- internal_constraint_toleranceThe Newton-Raphson process is only deemed converged if the internal constraint is less than this.
C++ Type:double
Controllable:No
Description:The Newton-Raphson process is only deemed converged if the internal constraint is less than this.
- yield_function_toleranceIf the yield function is less than this amount, the (stress, internal parameter) are deemed admissible.
C++ Type:double
Controllable:No
Description:If the yield function is less than this amount, the (stress, internal parameter) are deemed admissible.
- yield_strengthA TensorMechanicsHardening UserObject that defines hardening of the yield strength
C++ Type:UserObjectName
Controllable:No
Description:A TensorMechanicsHardening UserObject that defines hardening of the yield strength
TensorMechanicsPlasticJ2
The TensorMechanicsPlasticJ2 has not been documented. The content listed below should be used as a starting point for documenting the class, which includes the typical automatic documentation associated with a MooseObject; however, what is contained is ultimately determined by what is necessary to make the documentation clear for users.
J2 plasticity, associative, with hardening
Overview
Example Input File Syntax
Input Parameters
- execute_onTIMESTEP_ENDThe list of flag(s) indicating when this object should be executed, the available options include NONE, INITIAL, LINEAR, NONLINEAR, TIMESTEP_END, TIMESTEP_BEGIN, FINAL, CUSTOM, ALWAYS.
Default:TIMESTEP_END
C++ Type:ExecFlagEnum
Options:NONE, INITIAL, LINEAR, NONLINEAR, TIMESTEP_END, TIMESTEP_BEGIN, FINAL, CUSTOM, ALWAYS
Controllable:No
Description:The list of flag(s) indicating when this object should be executed, the available options include NONE, INITIAL, LINEAR, NONLINEAR, TIMESTEP_END, TIMESTEP_BEGIN, FINAL, CUSTOM, ALWAYS.
- max_iterations10Maximum iterations for custom J2 return map
Default:10
C++ Type:unsigned int
Controllable:No
Description:Maximum iterations for custom J2 return map
- 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_custom_ctoTrueWhether to use the custom consistent tangent operator computations. Set to true if you are using isotropic elasticity.
Default:True
C++ Type:bool
Controllable:No
Description:Whether to use the custom consistent tangent operator computations. Set to true if you are using isotropic elasticity.
- use_custom_returnMapTrueWhether to use the custom returnMap algorithm. Set to true if you are using isotropic elasticity.
Default:True
C++ Type:bool
Controllable:No
Description:Whether to use the custom returnMap algorithm. Set to true if you are using isotropic elasticity.
Optional Parameters
- allow_duplicate_execution_on_initialFalseIn the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
Default:False
C++ Type:bool
Controllable:No
Description:In the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
- 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.
- force_postauxFalseForces the UserObject to be executed in POSTAUX
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in POSTAUX
- force_preauxFalseForces the UserObject to be executed in PREAUX
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in PREAUX
- force_preicFalseForces the UserObject to be executed in PREIC during initial setup
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in PREIC during initial setup
- 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/tensor_mechanics/test/tests/lagrangian/updated/cross_material/convergence/plastic_j2.i)
- (modules/tensor_mechanics/tutorials/basics/part_2.3.i)
- (modules/tensor_mechanics/tutorials/basics/part_3_1.i)
- (modules/tensor_mechanics/test/tests/lagrangian/total/cross_material/convergence/plastic_j2.i)
- (modules/combined/test/tests/j2_plasticity_vs_LSH/necking/j2_hard1_necking.i)
- (modules/tensor_mechanics/test/tests/lagrangian/updated/cross_material/correctness/plastic_j2.i)
- (modules/combined/test/tests/j2_plasticity_vs_LSH/j2_hard1_mod_optimised.i)
- (modules/tensor_mechanics/test/tests/multi/paper5.i)
- (modules/combined/test/tests/j2_plasticity_vs_LSH/j2_hard1_mod.i)
- (modules/tensor_mechanics/tutorials/basics/part_2.4.i)
- (modules/combined/test/tests/j2_plasticity_vs_LSH/necking/j2_hard1_neckingRZ.i)
- (modules/combined/test/tests/j2_plasticity_vs_LSH/j2_hard1_mod_small_strain.i)
- (modules/tensor_mechanics/test/tests/j2_plasticity/small_deform2.i)
- (modules/tensor_mechanics/test/tests/j2_plasticity/hard2.i)
- (modules/tensor_mechanics/test/tests/j2_plasticity/small_deform3.i)
- (modules/tensor_mechanics/test/tests/lagrangian/total/cross_material/correctness/plastic_j2.i)
- (modules/tensor_mechanics/test/tests/j2_plasticity/hard1.i)
- (modules/tensor_mechanics/test/tests/j2_plasticity/small_deform1.i)
Child Objects
(modules/tensor_mechanics/test/tests/lagrangian/updated/cross_material/convergence/plastic_j2.i)
# Simple 3D test
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
large_kinematics = false
[]
[Variables]
[disp_x]
[]
[disp_y]
[]
[disp_z]
[]
[]
[Mesh]
[msh]
type = GeneratedMeshGenerator
dim = 3
nx = 4
ny = 4
nz = 4
[]
[]
[ICs]
[disp_x]
type = RandomIC
variable = disp_x
min = -0.02
max = 0.02
[]
[disp_y]
type = RandomIC
variable = disp_y
min = -0.02
max = 0.02
[]
[disp_z]
type = RandomIC
variable = disp_z
min = -0.02
max = 0.02
[]
[]
[Kernels]
[sdx]
type = UpdatedLagrangianStressDivergence
variable = disp_x
component = 0
use_displaced_mesh = false
[]
[sdy]
type = UpdatedLagrangianStressDivergence
variable = disp_y
component = 1
use_displaced_mesh = false
[]
[sdz]
type = UpdatedLagrangianStressDivergence
variable = disp_z
component = 2
use_displaced_mesh = false
[]
[]
[Functions]
[pullx]
type = ParsedFunction
value = '4000 * t'
[]
[pully]
type = ParsedFunction
value = '-2000 * t'
[]
[pullz]
type = ParsedFunction
value = '3000 * t'
[]
[]
[BCs]
[leftx]
type = DirichletBC
preset = true
boundary = left
variable = disp_x
value = 0.0
[]
[lefty]
type = DirichletBC
preset = true
boundary = left
variable = disp_y
value = 0.0
[]
[leftz]
type = DirichletBC
preset = true
boundary = left
variable = disp_z
value = 0.0
[]
[pull_x]
type = FunctionNeumannBC
boundary = right
variable = disp_x
function = pullx
[]
[pull_y]
type = FunctionNeumannBC
boundary = top
variable = disp_y
function = pully
[]
[pull_z]
type = FunctionNeumannBC
boundary = right
variable = disp_z
function = pullz
[]
[]
[UserObjects]
[./str]
type = TensorMechanicsHardeningPowerRule
value_0 = 100.0
epsilon0 = 1.0
exponent = 1.0
[../]
[./j2]
type = TensorMechanicsPlasticJ2
yield_strength = str
yield_function_tolerance = 1E-3
internal_constraint_tolerance = 1E-9
[../]
[]
[Materials]
[elastic_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 100000.0
poissons_ratio = 0.3
[]
[compute_stress]
type = ComputeLagrangianWrappedStress
[]
[compute_stress_base]
type = ComputeMultiPlasticityStress
plastic_models = j2
ep_plastic_tolerance = 1E-9
[]
[compute_strain]
type = ComputeLagrangianStrain
[]
[]
[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-8
nl_abs_tol = 1e-10
start_time = 0.0
dt = 1.0
dtmin = 1.0
end_time = 1.0
[]
(modules/tensor_mechanics/tutorials/basics/part_2.3.i)
#Tensor Mechanics tutorial: the basics
#Step 2, part 3
#2D axisymmetric RZ simulation of uniaxial tension with J2 plasticity with no
#hardening
[GlobalParams]
displacements = 'disp_r disp_z'
[]
[Problem]
coord_type = RZ
[]
[Mesh]
file = necking_quad4.e
uniform_refine = 0
second_order = true
[]
[Modules/TensorMechanics/Master]
[./block1]
strain = FINITE
add_variables = true
generate_output = 'stress_yy strain_yy' #use the yy option to get the zz component in axisymmetric coords
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 2.1e5
poissons_ratio = 0.3
[../]
[./stress]
type = ComputeMultiPlasticityStress
ep_plastic_tolerance = 1e-9
plastic_models = J2
[../]
[]
[UserObjects]
[./str]
type = TensorMechanicsHardeningConstant
value = 2.4e2
[../]
[./J2]
type = TensorMechanicsPlasticJ2
yield_strength = str
yield_function_tolerance = 1E-3
internal_constraint_tolerance = 1E-9
[../]
[]
[BCs]
[./left]
type = DirichletBC
variable = disp_r
boundary = left
value = 0.0
[../]
[./bottom]
type = DirichletBC
variable = disp_z
boundary = bottom
value = 0.0
[../]
[./top]
type = FunctionDirichletBC
variable = disp_z
boundary = top
function = '0.0007*t'
[../]
[]
[Preconditioning]
[./SMP]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
dt = 0.25
end_time = 20
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type -sub_pc_type -pc_asm_overlap -ksp_gmres_restart'
petsc_options_value = 'asm lu 1 101'
[]
[Postprocessors]
[./ave_stress_bottom]
type = SideAverageValue
variable = stress_yy
boundary = bottom
[../]
[./ave_strain_bottom]
type = SideAverageValue
variable = strain_yy
boundary = bottom
[../]
[]
[Outputs]
exodus = true
perf_graph = true
csv = true
print_linear_residuals = false
[]
(modules/tensor_mechanics/tutorials/basics/part_3_1.i)
#Tensor Mechanics tutorial: the basics
#Step 3, part 1
#3D simulation of uniaxial tension with J2 plasticity
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Mesh]
[file_mesh]
type = FileMeshGenerator
file = necking_quad4.e
[]
[extrude]
type = MeshExtruderGenerator
extrusion_vector = '0 0 0.5'
num_layers = 2
bottom_sideset = 'back'
top_sideset = 'front'
input = file_mesh
[]
uniform_refine = 0
second_order = true
[]
[Modules/TensorMechanics/Master]
[./block1]
strain = FINITE
add_variables = true
generate_output = 'stress_yy strain_yy'
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 2.1e5
poissons_ratio = 0.3
[../]
[./stress]
type = ComputeMultiPlasticityStress
ep_plastic_tolerance = 1e-9
plastic_models = J2
[../]
[]
[UserObjects]
[./hardening]
type = TensorMechanicsHardeningCubic
value_0 = 2.4e2
value_residual = 3.0e2
internal_0 = 0
internal_limit = 0.005
[../]
[./J2]
type = TensorMechanicsPlasticJ2
yield_strength = hardening
yield_function_tolerance = 1E-3
internal_constraint_tolerance = 1E-9
[../]
[]
[BCs]
[./left]
type = DirichletBC
variable = disp_x #change the variable to reflect the new displacement names
boundary = 1
value = 0.0
[../]
[./back]
type = DirichletBC
variable = disp_z #change the variable to reflect the new displacement names
boundary = back
value = 0.0
[../]
[./bottom]
type = DirichletBC
variable = disp_y #change the variable to reflect the new displacement names
boundary = 3
value = 0.0
[../]
[./top]
type = FunctionDirichletBC
variable = disp_y #change the variable to reflect the new displacement names
boundary = 4
function = '0.0007*t'
[../]
[]
[Preconditioning]
[./SMP]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
dt = 0.25
end_time = 16
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type -sub_pc_type -pc_asm_overlap -ksp_gmres_restart'
petsc_options_value = 'asm lu 1 101'
[]
[Postprocessors]
[./ave_stress_bottom]
type = SideAverageValue
variable = stress_yy
boundary = 3
[../]
[./ave_strain_bottom]
type = SideAverageValue
variable = strain_yy
boundary = 3
[../]
[]
[Outputs]
exodus = true
perf_graph = true
csv = true
print_linear_residuals = false
[]
(modules/tensor_mechanics/test/tests/lagrangian/total/cross_material/convergence/plastic_j2.i)
# Simple 3D test
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
large_kinematics = false
[]
[Variables]
[disp_x]
[]
[disp_y]
[]
[disp_z]
[]
[]
[Mesh]
[msh]
type = GeneratedMeshGenerator
dim = 3
nx = 4
ny = 4
nz = 4
[]
[]
[ICs]
[disp_x]
type = RandomIC
variable = disp_x
min = -0.02
max = 0.02
[]
[disp_y]
type = RandomIC
variable = disp_y
min = -0.02
max = 0.02
[]
[disp_z]
type = RandomIC
variable = disp_z
min = -0.02
max = 0.02
[]
[]
[Kernels]
[sdx]
type = TotalLagrangianStressDivergence
variable = disp_x
component = 0
[]
[sdy]
type = TotalLagrangianStressDivergence
variable = disp_y
component = 1
[]
[sdz]
type = TotalLagrangianStressDivergence
variable = disp_z
component = 2
[]
[]
[Functions]
[pullx]
type = ParsedFunction
value = '4000 * t'
[]
[pully]
type = ParsedFunction
value = '-2000 * t'
[]
[pullz]
type = ParsedFunction
value = '3000 * t'
[]
[]
[BCs]
[leftx]
type = DirichletBC
preset = true
boundary = left
variable = disp_x
value = 0.0
[]
[lefty]
type = DirichletBC
preset = true
boundary = left
variable = disp_y
value = 0.0
[]
[leftz]
type = DirichletBC
preset = true
boundary = left
variable = disp_z
value = 0.0
[]
[pull_x]
type = FunctionNeumannBC
boundary = right
variable = disp_x
function = pullx
[]
[pull_y]
type = FunctionNeumannBC
boundary = top
variable = disp_y
function = pully
[]
[pull_z]
type = FunctionNeumannBC
boundary = right
variable = disp_z
function = pullz
[]
[]
[UserObjects]
[./str]
type = TensorMechanicsHardeningPowerRule
value_0 = 100.0
epsilon0 = 1.0
exponent = 1.0
[../]
[./j2]
type = TensorMechanicsPlasticJ2
yield_strength = str
yield_function_tolerance = 1E-3
internal_constraint_tolerance = 1E-9
[../]
[]
[Materials]
[elastic_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 100000.0
poissons_ratio = 0.3
[]
[compute_stress]
type = ComputeLagrangianWrappedStress
[]
[compute_stress_base]
type = ComputeMultiPlasticityStress
plastic_models = j2
ep_plastic_tolerance = 1E-9
[]
[compute_strain]
type = ComputeLagrangianStrain
[]
[]
[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-8
nl_abs_tol = 1e-10
start_time = 0.0
dt = 1.0
dtmin = 1.0
end_time = 1.0
[]
(modules/combined/test/tests/j2_plasticity_vs_LSH/necking/j2_hard1_necking.i)
#
[Mesh]
file = necking_quad4.e
displacements = 'disp_x disp_y'
[]
[Variables]
[./disp_x]
order = FIRST
family = LAGRANGE
[../]
[./disp_y]
order = FIRST
family = LAGRANGE
[../]
[]
[Kernels]
[./TensorMechanics]
displacements = 'disp_x disp_y'
use_displaced_mesh = true
# save_in_disp_x = force_x
save_in_disp_y = force_y
[../]
[]
[AuxVariables]
[./stress_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yy]
order = CONSTANT
family = MONOMIAL
[../]
# [./force_x]
# order = FIRST
# family = LAGRANGE
# [../]
[./force_y]
order = FIRST
family = LAGRANGE
[../]
[]
[AuxKernels]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_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_xx]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_xx
index_i = 0
index_j = 0
[../]
[./strain_yy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_yy
index_i = 1
index_j = 1
[../]
[]
[BCs]
[./left]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[../]
[./bottom]
type = DirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[../]
[./y_top]
type = FunctionDirichletBC
variable = disp_y
boundary = top
function = 't/5'
[../]
[]
[UserObjects]
[./str]
type = TensorMechanicsHardeningConstant
value = 2.4e2
[../]
[./j2]
type = TensorMechanicsPlasticJ2
yield_strength = str
yield_function_tolerance = 1E-3
internal_constraint_tolerance = 1E-9
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
block = 1
fill_method = symmetric_isotropic
#with E = 2.1e5 and nu = 0.3
#changed to SM values using E-nu to Lambda-G
C_ijkl = '121154 80769.2'
[../]
[./strain]
type = ComputeFiniteStrain
block = 1
displacements = 'disp_x disp_y'
[../]
[./mc]
type = ComputeMultiPlasticityStress
block = 1
ep_plastic_tolerance = 1E-9
plastic_models = j2
[../]
[]
[Executioner]
end_time = 0.2
dt = 0.005
type = Transient
#Preconditioned JFNK (default)
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
l_max_its = 100
nl_max_its = 100
nl_rel_tol = 1e-12
nl_abs_tol = 1e-10
l_tol = 1e-9
[]
[Postprocessors]
[./stress_xx]
type = ElementAverageValue
variable = stress_xx
[../]
[./stress_yy]
type = ElementAverageValue
variable = stress_yy
[../]
[./strain_xx]
type = ElementAverageValue
variable = strain_xx
[../]
[./strain_yy]
type = ElementAverageValue
variable = strain_yy
[../]
[./disp_y]
type = NodalSum
variable = disp_y
boundary = top
[../]
[./force_y]
type = NodalSum
variable = force_y
boundary = top
[../]
[]
[Outputs]
exodus = true
csv = true
print_linear_residuals = false
perf_graph = true
[]
(modules/tensor_mechanics/test/tests/lagrangian/updated/cross_material/correctness/plastic_j2.i)
# Simple 3D test
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
large_kinematics = false
[]
[Variables]
[disp_x]
[]
[disp_y]
[]
[disp_z]
[]
[]
[Mesh]
[msh]
type = GeneratedMeshGenerator
dim = 3
nx = 2
ny = 1
nz = 1
[]
[]
[AuxVariables]
[strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[strain_xz]
order = CONSTANT
family = MONOMIAL
[]
[strain_yz]
order = CONSTANT
family = MONOMIAL
[]
[stress_xx]
order = CONSTANT
family = MONOMIAL
[]
[stress_yy]
order = CONSTANT
family = MONOMIAL
[]
[stress_zz]
order = CONSTANT
family = MONOMIAL
[]
[stress_xy]
order = CONSTANT
family = MONOMIAL
[]
[stress_yz]
order = CONSTANT
family = MONOMIAL
[]
[stress_xz]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[stress_xx]
type = RankTwoAux
rank_two_tensor = cauchy_stress
variable = stress_xx
index_i = 0
index_j = 0
execute_on = timestep_end
[]
[stress_yy]
type = RankTwoAux
rank_two_tensor = cauchy_stress
variable = stress_yy
index_i = 1
index_j = 1
execute_on = timestep_end
[]
[stress_zz]
type = RankTwoAux
rank_two_tensor = cauchy_stress
variable = stress_zz
index_i = 2
index_j = 2
execute_on = timestep_end
[]
[stress_xy]
type = RankTwoAux
rank_two_tensor = cauchy_stress
variable = stress_xy
index_i = 0
index_j = 1
execute_on = timestep_end
[]
[stress_xz]
type = RankTwoAux
rank_two_tensor = cauchy_stress
variable = stress_xz
index_i = 0
index_j = 2
execute_on = timestep_end
[]
[stress_yz]
type = RankTwoAux
rank_two_tensor = cauchy_stress
variable = stress_yz
index_i = 1
index_j = 2
execute_on = timestep_end
[]
[strain_xx]
type = RankTwoAux
rank_two_tensor = mechanical_strain
variable = strain_xx
index_i = 0
index_j = 0
execute_on = timestep_end
[]
[strain_yy]
type = RankTwoAux
rank_two_tensor = mechanical_strain
variable = strain_yy
index_i = 1
index_j = 1
execute_on = timestep_end
[]
[strain_zz]
type = RankTwoAux
rank_two_tensor = mechanical_strain
variable = strain_zz
index_i = 2
index_j = 2
execute_on = timestep_end
[]
[strain_xy]
type = RankTwoAux
rank_two_tensor = mechanical_strain
variable = strain_xy
index_i = 0
index_j = 1
execute_on = timestep_end
[]
[strain_xz]
type = RankTwoAux
rank_two_tensor = mechanical_strain
variable = strain_xz
index_i = 0
index_j = 2
execute_on = timestep_end
[]
[strain_yz]
type = RankTwoAux
rank_two_tensor = mechanical_strain
variable = strain_yz
index_i = 1
index_j = 2
execute_on = timestep_end
[]
[]
[Kernels]
[sdx]
type = UpdatedLagrangianStressDivergence
variable = disp_x
component = 0
use_displaced_mesh = false
[]
[sdy]
type = UpdatedLagrangianStressDivergence
variable = disp_y
component = 1
use_displaced_mesh = false
[]
[sdz]
type = UpdatedLagrangianStressDivergence
variable = disp_z
component = 2
use_displaced_mesh = false
[]
[]
[Functions]
[pullx]
type = ParsedFunction
value = 't'
[]
[]
[BCs]
[leftx]
type = DirichletBC
preset = true
boundary = left
variable = disp_x
value = 0.0
[]
[lefty]
type = DirichletBC
preset = true
boundary = bottom
variable = disp_y
value = 0.0
[]
[leftz]
type = DirichletBC
preset = true
boundary = back
variable = disp_z
value = 0.0
[]
[pull_x]
type = FunctionDirichletBC
boundary = right
variable = disp_x
function = pullx
[]
[]
[UserObjects]
[./str]
type = TensorMechanicsHardeningPowerRule
value_0 = 100.0
epsilon0 = 0.1
exponent = 2.0
[../]
[./j2]
type = TensorMechanicsPlasticJ2
yield_strength = str
yield_function_tolerance = 1E-3
internal_constraint_tolerance = 1E-9
[../]
[]
[Materials]
[elastic_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 100000.0
poissons_ratio = 0.3
[]
[compute_stress]
type = ComputeLagrangianWrappedStress
[]
[compute_stress_base]
type = ComputeMultiPlasticityStress
plastic_models = j2
ep_plastic_tolerance = 1E-9
[]
[compute_strain]
type = ComputeLagrangianStrain
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Postprocessors]
[./strain]
type = ElementAverageValue
variable = strain_xx
[]
[./stress]
type = ElementAverageValue
variable = stress_xx
[]
[]
[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-8
nl_abs_tol = 1e-10
start_time = 0.0
dt = 0.001
dtmin = 0.001
end_time = 0.05
[]
[Outputs]
exodus = false
csv = true
[]
(modules/combined/test/tests/j2_plasticity_vs_LSH/j2_hard1_mod_optimised.i)
# Test designed to compare results and active time between SH/LinearStrainHardening
# material vs TM j2 plastic user object. As number of elements increases, TM
# active time increases at a much higher rate than SM. Testing at 4x4x4
# (64 elements).
#
# plot vm_stress vs intnl to see constant hardening
#
# Original test located at:
# tensor_mechanics/tests/j2_plasticity/hard1.i
[Mesh]
type = GeneratedMesh
dim = 3
nx = 4
ny = 4
nz = 4
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
displacements = 'disp_x disp_y disp_z'
[]
[Variables]
[./disp_x]
order = FIRST
family = LAGRANGE
[../]
[./disp_y]
order = FIRST
family = LAGRANGE
[../]
[./disp_z]
order = FIRST
family = LAGRANGE
[../]
[]
[Kernels]
[./TensorMechanics]
displacements = 'disp_x disp_y disp_z'
[../]
[]
[AuxVariables]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[./intnl]
order = CONSTANT
family = MONOMIAL
[../]
[./vm_stress]
order = CONSTANT
family = MONOMIAL
[../]
[./eq_pl_strain]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[../]
[./intnl]
type = MaterialStdVectorAux
index = 0
property = plastic_internal_parameter
variable = intnl
[../]
[./eq_pl_strain]
type = RankTwoScalarAux
rank_two_tensor = plastic_strain
scalar_type = EffectiveStrain
variable = eq_pl_strain
[../]
[./vm_stress]
type = RankTwoScalarAux
rank_two_tensor = stress
scalar_type = VonMisesStress
variable = vm_stress
[../]
[]
[BCs]
[./left]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[../]
[./bottom]
type = DirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[../]
[./back]
type = DirichletBC
variable = disp_z
boundary = back
value = 0.0
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = front
function = 't/60'
[../]
[]
[UserObjects]
[./str]
type = TensorMechanicsHardeningConstant
value = 2.4e2
[../]
[./j2]
type = TensorMechanicsPlasticJ2
yield_strength = str
yield_function_tolerance = 1E-3
internal_constraint_tolerance = 1E-9
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
#with E = 2.1e5 and nu = 0.3
#Hooke's law: E-nu to Lambda-G
C_ijkl = '121154 80769.2'
[../]
[./strain]
type = ComputeIncrementalSmallStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[../]
[./mc]
type = ComputeMultiPlasticityStress
block = 0
ep_plastic_tolerance = 1E-9
plastic_models = j2
perform_finite_strain_rotations = false
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
#Preconditioned JFNK (default)
solve_type = NEWTON
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
#line_search = 'none'
l_max_its = 100
nl_max_its = 100
nl_rel_tol = 1e-6
nl_abs_tol = 1e-10
l_tol = 1e-4
start_time = 0.0
end_time = 0.5
dt = 0.5
[]
[Postprocessors]
[./stress_zz]
type = ElementAverageValue
variable = stress_zz
[../]
[./intnl]
type = ElementAverageValue
variable = intnl
[../]
[./eq_pl_strain]
type = PointValue
point = '0 0 0'
variable = eq_pl_strain
[../]
[./vm_stress]
type = PointValue
point = '0 0 0'
variable = vm_stress
[../]
[]
[Outputs]
csv = true
print_linear_residuals = false
perf_graph = true
[]
(modules/tensor_mechanics/test/tests/multi/paper5.i)
# This runs the J2+cap+hardening example model described in the 'MultiSurface' plasticity paper
#
# Plasticity models:
# J2 with strength = 20MPa to 10MPa in 100% strain
# Compressive cap with strength = 15MPa to 5MPa in 100% strain
#
# Lame lambda = 1.2GPa. Lame mu = 1.2GPa (Young = 3GPa, poisson = 0.25)
#
# A line of elements is perturbed randomly, and return to the yield surface at each quadpoint is checked
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1000
ny = 125
nz = 1
xmin = 0
xmax = 1000
ymin = 0
ymax = 125
zmin = 0
zmax = 1
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[Kernels]
[./TensorMechanics]
displacements = 'disp_x disp_y disp_z'
[../]
[]
[ICs]
[./x]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_x
[../]
[./y]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_y
[../]
[./z]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_z
[../]
[]
[BCs]
[./x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'front back'
function = '0'
[../]
[./y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'front back'
function = '0'
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = 'front back'
function = '0'
[../]
[]
[AuxVariables]
[./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
[../]
[./intnl0]
order = CONSTANT
family = MONOMIAL
[../]
[./intnl1]
order = CONSTANT
family = MONOMIAL
[../]
[./f0]
order = CONSTANT
family = MONOMIAL
[../]
[./f1]
order = CONSTANT
family = MONOMIAL
[../]
[./linesearch]
order = CONSTANT
family = MONOMIAL
[../]
[./ld]
order = CONSTANT
family = MONOMIAL
[../]
[./constr_added]
order = CONSTANT
family = MONOMIAL
[../]
[./iter]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./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
[../]
[./f0]
type = MaterialStdVectorAux
property = plastic_yield_function
index = 0
variable = f0
[../]
[./f1]
type = MaterialStdVectorAux
property = plastic_yield_function
index = 1
variable = f1
[../]
[./intnl0]
type = MaterialStdVectorAux
property = plastic_internal_parameter
index = 0
variable = intnl0
[../]
[./intnl1]
type = MaterialStdVectorAux
property = plastic_internal_parameter
index = 1
variable = intnl1
[../]
[./linesearch]
type = MaterialRealAux
property = plastic_linesearch_needed
variable = linesearch
[../]
[./ld]
type = MaterialRealAux
property = plastic_linear_dependence_encountered
variable = ld
[../]
[./constr_added]
type = MaterialRealAux
property = plastic_constraints_added
variable = constr_added
[../]
[./iter]
type = MaterialRealAux
property = plastic_NR_iterations
variable = iter
[../]
[]
[Postprocessors]
[./max_f0]
type = ElementExtremeValue
variable = f0
outputs = console
[../]
[./max_f1]
type = ElementExtremeValue
variable = f1
outputs = console
[../]
[./max_iter]
type = ElementExtremeValue
variable = iter
outputs = console
[../]
[./av_iter]
type = ElementAverageValue
variable = iter
outputs = 'console csv'
[../]
[./av_linesearch]
type = ElementAverageValue
variable = linesearch
outputs = 'console csv'
[../]
[./av_ld]
type = ElementAverageValue
variable = ld
outputs = 'console csv'
[../]
[./av_constr_added]
type = ElementAverageValue
variable = constr_added
outputs = 'console csv'
[../]
[]
[UserObjects]
[./yield_strength]
type = TensorMechanicsHardeningCubic
value_0 = 20E6
value_residual = 10E6
internal_limit = 1
[../]
[./j2]
type = TensorMechanicsPlasticJ2
yield_strength = yield_strength
yield_function_tolerance = 1.0E2
internal_constraint_tolerance = 1.0E-7
use_custom_returnMap = false
[../]
[./compressive_strength]
type = TensorMechanicsHardeningCubic
value_0 = 15E6
value_residual = 5E6
internal_limit = 1
[../]
[./cap]
type = TensorMechanicsPlasticMeanCap
a = -1
strength = compressive_strength
yield_function_tolerance = 1.0E2
internal_constraint_tolerance = 1.0E-7
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '1.2E9 1.2E9'
[../]
[./strain]
type = ComputeIncrementalSmallStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[../]
[./multi]
type = ComputeMultiPlasticityStress
block = 0
ep_plastic_tolerance = 1E-5
plastic_models = 'j2 cap'
max_NR_iterations = 10
deactivation_scheme = 'safe'
min_stepsize = 1
max_stepsize_for_dumb = 1
tangent_operator = elastic # tangent operator is unimportant in this test
debug_fspb = crash
debug_jac_at_stress = '10E6 0 0 0 10E6 0 0 0 10E6'
debug_jac_at_pm = '1E-2 1E-2'
debug_jac_at_intnl = '0.05 0.05'
debug_stress_change = 1E1
debug_pm_change = '1E-6 1E-6'
debug_intnl_change = '1E-6 1E-6'
[../]
[]
[Executioner]
end_time = 1
dt = 1
type = Transient
[]
[Outputs]
file_base = paper5
exodus = false
csv = true
perf_graph = true
[]
(modules/combined/test/tests/j2_plasticity_vs_LSH/j2_hard1_mod.i)
# Test designed to compare results and active time between SH/LinearStrainHardening
# material vs TM j2 plastic user object. As number of elements increases, TM
# active time increases at a much higher rate than SM. Testing at 4x4x4
# (64 elements).
#
# plot vm_stress vs intnl to see constant hardening
#
# Original test located at:
# tensor_mechanics/tests/j2_plasticity/hard1.i
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Mesh]
type = GeneratedMesh
dim = 3
nx = 4
ny = 4
nz = 4
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[Modules/TensorMechanics/Master]
[all]
add_variables = true
strain = FINITE
generate_output = 'stress_zz vonmises_stress effective_plastic_strain'
[]
[]
[AuxVariables]
[intnl]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[intnl]
type = MaterialStdVectorAux
index = 0
property = plastic_internal_parameter
variable = intnl
[]
[]
[BCs]
[left]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[bottom]
type = DirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[back]
type = DirichletBC
variable = disp_z
boundary = back
value = 0.0
[]
[z]
type = FunctionDirichletBC
variable = disp_z
boundary = front
function = 't/60'
[]
[]
[UserObjects]
[str]
type = TensorMechanicsHardeningConstant
value = 2.4e2
[]
[j2]
type = TensorMechanicsPlasticJ2
yield_strength = str
yield_function_tolerance = 1E-3
internal_constraint_tolerance = 1E-9
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeElasticityTensor
fill_method = symmetric_isotropic
#with E = 2.1e5 and nu = 0.3
#Hooke's law: E-nu to Lambda-G
C_ijkl = '121154 80769.2'
[]
[mc]
type = ComputeMultiPlasticityStress
ep_plastic_tolerance = 1E-9
plastic_models = j2
tangent_operator = elastic
[]
[]
[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 = 100
nl_max_its = 100
nl_rel_tol = 1e-6
nl_abs_tol = 1e-10
l_tol = 1e-4
start_time = 0.0
end_time = 0.5
dt = 0.01
[]
[Postprocessors]
[stress_zz]
type = ElementAverageValue
variable = stress_zz
[]
[intnl]
type = ElementAverageValue
variable = intnl
[]
[eq_pl_strain]
type = PointValue
point = '0 0 0'
variable = effective_plastic_strain
[]
[vm_stress]
type = PointValue
point = '0 0 0'
variable = vonmises_stress
[]
[]
[Outputs]
csv = true
print_linear_residuals = false
perf_graph = true
[]
(modules/tensor_mechanics/tutorials/basics/part_2.4.i)
#Tensor Mechanics tutorial: the basics
#Step 2, part 4
#2D axisymmetric RZ simulation of uniaxial tension with J2 plasticity with
#hardening
[GlobalParams]
displacements = 'disp_r disp_z'
[]
[Problem]
coord_type = RZ
[]
[Mesh]
file = necking_quad4.e
uniform_refine = 0
second_order = true
[]
[Modules/TensorMechanics/Master]
[./block1]
strain = FINITE
add_variables = true
generate_output = 'stress_yy strain_yy vonmises_stress'
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 2.1e5
poissons_ratio = 0.3
[../]
[./stress]
type = ComputeMultiPlasticityStress
ep_plastic_tolerance = 1e-9
plastic_models = J2
[../]
[]
[UserObjects]
[./hardening]
type = TensorMechanicsHardeningCubic
value_0 = 2.4e2
value_residual = 3.0e2
internal_0 = 0
internal_limit = 0.005
[../]
[./J2]
type = TensorMechanicsPlasticJ2
yield_strength = hardening
yield_function_tolerance = 1E-9
internal_constraint_tolerance = 1E-9
[../]
[]
[BCs]
[./left]
type = DirichletBC
variable = disp_r
boundary = left
value = 0.0
[../]
[./bottom]
type = DirichletBC
variable = disp_z
boundary = bottom
value = 0.0
[../]
[./top]
type = FunctionDirichletBC
variable = disp_z
boundary = top
function = '0.0007*t'
[../]
[]
[Preconditioning]
[./SMP]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
dt = 0.25
end_time = 20
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type -sub_pc_type -pc_asm_overlap -ksp_gmres_restart'
petsc_options_value = 'asm lu 1 101'
[]
[Postprocessors]
[./ave_stress_bottom]
type = SideAverageValue
variable = stress_yy
boundary = bottom
[../]
[./ave_strain_bottom]
type = SideAverageValue
variable = strain_yy
boundary = bottom
[../]
[]
[Outputs]
exodus = true
perf_graph = true
csv = true
print_linear_residuals = false
[]
(modules/combined/test/tests/j2_plasticity_vs_LSH/necking/j2_hard1_neckingRZ.i)
#
[Mesh]
file = necking_quad4.e
[]
[GlobalParams]
displacements = 'disp_r disp_z'
[]
[Problem]
coord_type = RZ
[]
[Variables]
[./disp_r]
order = FIRST
family = LAGRANGE
[../]
[./disp_z]
order = FIRST
family = LAGRANGE
[../]
[]
[Kernels]
[./AxisymmetricRZ]
use_displaced_mesh = true
# save_in_disp_r = force_r
save_in_disp_z = force_z
[../]
[]
[AuxVariables]
[./stress_rr]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_rr]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_zz]
order = CONSTANT
family = MONOMIAL
[../]
# [./force_r]
# order = FIRST
# family = LAGRANGE
# [../]
[./force_z]
order = FIRST
family = LAGRANGE
[../]
[]
[AuxKernels]
[./stress_rr]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_rr
index_i = 0
index_j = 0
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 1
index_j = 1
[../]
[./strain_rr]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_rr
index_i = 0
index_j = 0
[../]
[./strain_zz]
type = RankTwoAux
rank_two_tensor = total_strain
variable = strain_zz
index_i = 1
index_j = 1
[../]
[]
[BCs]
[./left]
type = DirichletBC
variable = disp_r
boundary = left
value = 0.0
[../]
[./bottom]
type = DirichletBC
variable = disp_z
boundary = bottom
value = 0.0
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = top
function = 't/5'
[../]
[]
[UserObjects]
[./str]
type = TensorMechanicsHardeningConstant
value = 2.4e2
[../]
[./j2]
type = TensorMechanicsPlasticJ2
yield_strength = str
yield_function_tolerance = 1E-3
internal_constraint_tolerance = 1E-9
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
block = 1
fill_method = symmetric_isotropic
#with E = 2.1e5 and nu = 0.3
#changed to SM values using E-nu to Lambda-G
C_ijkl = '121154 80769.2'
[../]
[./strain]
type = ComputeAxisymmetricRZFiniteStrain
block = 1
[../]
[./mc]
type = ComputeMultiPlasticityStress
block = 1
ep_plastic_tolerance = 1E-9
plastic_models = j2
[../]
[]
[Executioner]
end_time = 0.1
dt = 0.005
type = Transient
#Preconditioned JFNK (default)
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
l_max_its = 100
nl_max_its = 100
nl_rel_tol = 1e-6
nl_abs_tol = 1e-15
l_tol = 1e-9
[]
[Postprocessors]
[./stress_rr]
type = ElementAverageValue
variable = stress_rr
[../]
[./stress_zz]
type = ElementAverageValue
variable = stress_zz
[../]
[./strain_rr]
type = ElementAverageValue
variable = strain_rr
[../]
[./strain_zz]
type = ElementAverageValue
variable = strain_zz
[../]
[./disp_z]
type = NodalSum
variable = disp_z
boundary = top
[../]
[./force_z]
type = NodalSum
variable = force_z
boundary = top
[../]
[]
[Outputs]
exodus = true
csv = true
print_linear_residuals = false
perf_graph = true
[]
(modules/combined/test/tests/j2_plasticity_vs_LSH/j2_hard1_mod_small_strain.i)
# Test designed to compare results and active time between SH/LinearStrainHardening
# material vs TM j2 plastic user object. As number of elements increases, TM
# active time increases at a much higher rate than SM. Testing at 4x4x4
# (64 elements).
#
# plot vm_stress vs intnl to see constant hardening
#
# Original test located at:
# tensor_mechanics/tests/j2_plasticity/hard1.i
[Mesh]
type = GeneratedMesh
dim = 3
nx = 4
ny = 4
nz = 4
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
displacements = 'disp_x disp_y disp_z'
[]
[Variables]
[./disp_x]
order = FIRST
family = LAGRANGE
[../]
[./disp_y]
order = FIRST
family = LAGRANGE
[../]
[./disp_z]
order = FIRST
family = LAGRANGE
[../]
[]
[Kernels]
[./TensorMechanics]
displacements = 'disp_x disp_y disp_z'
[../]
[]
[AuxVariables]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[./intnl]
order = CONSTANT
family = MONOMIAL
[../]
[./vm_stress]
order = CONSTANT
family = MONOMIAL
[../]
[./eq_pl_strain]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[../]
[./intnl]
type = MaterialStdVectorAux
index = 0
property = plastic_internal_parameter
variable = intnl
[../]
[./eq_pl_strain]
type = RankTwoScalarAux
rank_two_tensor = plastic_strain
scalar_type = EffectiveStrain
variable = eq_pl_strain
[../]
[./vm_stress]
type = RankTwoScalarAux
rank_two_tensor = stress
scalar_type = VonMisesStress
variable = vm_stress
[../]
[]
[BCs]
[./left]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[../]
[./bottom]
type = DirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[../]
[./back]
type = DirichletBC
variable = disp_z
boundary = back
value = 0.0
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = front
function = 't/60'
[../]
[]
[UserObjects]
[./str]
type = TensorMechanicsHardeningConstant
value = 2.4e2
[../]
[./j2]
type = TensorMechanicsPlasticJ2
yield_strength = str
yield_function_tolerance = 1E-3
internal_constraint_tolerance = 1E-9
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
#with E = 2.1e5 and nu = 0.3
#Hooke's law: E-nu to Lambda-G
C_ijkl = '121154 80769.2'
[../]
[./strain]
type = ComputeIncrementalSmallStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[../]
[./mc]
type = ComputeMultiPlasticityStress
block = 0
ep_plastic_tolerance = 1E-9
plastic_models = j2
tangent_operator = elastic
perform_finite_strain_rotations = false
[../]
[]
[Executioner]
type = Transient
#Preconditioned JFNK (default)
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
l_max_its = 100
nl_max_its = 100
nl_rel_tol = 1e-6
nl_abs_tol = 1e-10
l_tol = 1e-4
start_time = 0.0
end_time = 0.5
dt = 0.01
[]
[Postprocessors]
[./stress_zz]
type = ElementAverageValue
variable = stress_zz
[../]
[./intnl]
type = ElementAverageValue
variable = intnl
[../]
[./eq_pl_strain]
type = PointValue
point = '0 0 0'
variable = eq_pl_strain
[../]
[./vm_stress]
type = PointValue
point = '0 0 0'
variable = vm_stress
[../]
[]
[Outputs]
csv = true
print_linear_residuals = false
perf_graph = true
[]
(modules/tensor_mechanics/test/tests/j2_plasticity/small_deform2.i)
# UserObject J2 test
# apply uniform stretch in z direction to give
# trial stress_zz = 7, so sqrt(3*J2) = 7
# with zero Poisson's ratio, this should return to
# stress_zz = 3, stress_xx = 2 = stress_yy
# (note that stress_zz - stress_xx = stress_zz - stress_yy = 1, so sqrt(3*j2) = 1,
# and that the mean stress remains = 7/3)
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[Kernels]
[./TensorMechanics]
displacements = 'disp_x disp_y disp_z'
[../]
[]
[BCs]
[./x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'front back'
function = '0E-6*x'
[../]
[./y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'front back'
function = '0E-6*y'
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = 'front back'
function = '3.5E-6*z'
[../]
[]
[AuxVariables]
[./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
[../]
[./f]
order = CONSTANT
family = MONOMIAL
[../]
[./iter]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./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
[../]
[./f]
type = MaterialStdVectorAux
index = 0
property = plastic_yield_function
variable = f
[../]
[./iter]
type = MaterialRealAux
property = plastic_NR_iterations
variable = iter
[../]
[]
[Postprocessors]
[./s_xx]
type = PointValue
point = '0 0 0'
variable = stress_xx
[../]
[./s_xy]
type = PointValue
point = '0 0 0'
variable = stress_xy
[../]
[./s_xz]
type = PointValue
point = '0 0 0'
variable = stress_xz
[../]
[./s_yy]
type = PointValue
point = '0 0 0'
variable = stress_yy
[../]
[./s_yz]
type = PointValue
point = '0 0 0'
variable = stress_yz
[../]
[./s_zz]
type = PointValue
point = '0 0 0'
variable = stress_zz
[../]
[./f]
type = PointValue
point = '0 0 0'
variable = f
[../]
[./iter]
type = PointValue
point = '0 0 0'
variable = iter
[../]
[]
[UserObjects]
[./str]
type = TensorMechanicsHardeningConstant
value = 1
[../]
[./j2]
type = TensorMechanicsPlasticJ2
yield_strength = str
yield_function_tolerance = 1E-3
internal_constraint_tolerance = 1E-9
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '0 1E6'
[../]
[./strain]
type = ComputeFiniteStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[../]
[./mc]
type = ComputeMultiPlasticityStress
block = 0
ep_plastic_tolerance = 1E-9
plastic_models = j2
debug_fspb = crash
[../]
[]
[Executioner]
end_time = 1
dt = 1
type = Transient
[]
[Outputs]
file_base = small_deform2
exodus = false
[./csv]
type = CSV
[../]
[]
(modules/tensor_mechanics/test/tests/j2_plasticity/hard2.i)
# UserObject J2 test, with hardening, but with rate=1E6
# apply uniform compression in x direction to give
# trial stress_xx = 5, so sqrt(3*J2) = 5
# with zero Poisson's ratio, lambda_mu = 1E6, and strength=2, strength_residual=1,
# the equations that we need to solve are:
#
# stress_yy = stress_zz [because of the symmetry of the problem: to keep Lode angle constant]
# stress_xx - stress_yy = 1 + (2 - 1)*exp(-0.5*(1E6*q)^2) [yield_fcn = 0]
# stress_xx + stress_yy + stress_zz = 5 [mean stress constant]
# q = gamma
# stress_xx = 1E6*2*gamma*(stress_xx - 5/3)*sqrt(3)/2/sqrt(J2), where sqrt(J2) = (1 + (2 - 1)*exp(-0.5*(1E6*q)^2))/Sqrt(3)
# so RHS = 1E6*2*gamma*(stress_xx - 5/3)*3/2/(stress_xx - stress_yy)
#
# stress_xx = 2.672
# stress_yy = 1.164
# q = 1.164E-6
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[Kernels]
[./TensorMechanics]
displacements = 'disp_x disp_y disp_z'
[../]
[]
[BCs]
[./x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'front back'
function = '2.5E-6*x'
[../]
[./y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'front back'
function = '0E-6*y'
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = 'front back'
function = '0E-6*z'
[../]
[]
[AuxVariables]
[./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
[../]
[./f]
order = CONSTANT
family = MONOMIAL
[../]
[./iter]
order = CONSTANT
family = MONOMIAL
[../]
[./intnl]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./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
[../]
[./f]
type = MaterialStdVectorAux
index = 0
property = plastic_yield_function
variable = f
[../]
[./iter]
type = MaterialRealAux
property = plastic_NR_iterations
variable = iter
[../]
[./intnl]
type = MaterialStdVectorAux
index = 0
property = plastic_internal_parameter
variable = intnl
[../]
[]
[Postprocessors]
[./s_xx]
type = PointValue
point = '0 0 0'
variable = stress_xx
[../]
[./s_xy]
type = PointValue
point = '0 0 0'
variable = stress_xy
[../]
[./s_xz]
type = PointValue
point = '0 0 0'
variable = stress_xz
[../]
[./s_yy]
type = PointValue
point = '0 0 0'
variable = stress_yy
[../]
[./s_yz]
type = PointValue
point = '0 0 0'
variable = stress_yz
[../]
[./s_zz]
type = PointValue
point = '0 0 0'
variable = stress_zz
[../]
[./f]
type = PointValue
point = '0 0 0'
variable = f
[../]
[./iter]
type = PointValue
point = '0 0 0'
variable = iter
[../]
[./intnl]
type = PointValue
point = '0 0 0'
variable = intnl
[../]
[]
[UserObjects]
[./str]
type = TensorMechanicsHardeningGaussian
value_0 = 2
value_residual = 1
rate = 1E12
[../]
[./j2]
type = TensorMechanicsPlasticJ2
yield_strength = str
yield_function_tolerance = 1E-5
internal_constraint_tolerance = 1E-9
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '0 1E6'
[../]
[./strain]
type = ComputeFiniteStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[../]
[./mc]
type = ComputeMultiPlasticityStress
block = 0
ep_plastic_tolerance = 1E-9
plastic_models = j2
debug_fspb = crash
[../]
[]
[Executioner]
end_time = 1
dt = 1
type = Transient
[]
[Outputs]
file_base = hard2
exodus = false
[./csv]
type = CSV
[../]
[]
(modules/tensor_mechanics/test/tests/j2_plasticity/small_deform3.i)
# UserObject J2 test
# apply uniform compression in x direction to give
# trial stress_xx = -7, so sqrt(3*J2) = 7
# with zero Poisson's ratio, this should return to
# stress_xx = -3, stress_yy = -2 = stress_zz
# (note that stress_xx - stress_yy = stress_xx - stress_zz = -1, so sqrt(3*j2) = 1,
# and that the mean stress remains = -7/3)
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[Kernels]
[./TensorMechanics]
displacements = 'disp_x disp_y disp_z'
[../]
[]
[BCs]
[./x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'front back'
function = '-3.5E-6*x'
[../]
[./y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'front back'
function = '0E-6*y'
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = 'front back'
function = '0E-6*z'
[../]
[]
[AuxVariables]
[./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
[../]
[./f]
order = CONSTANT
family = MONOMIAL
[../]
[./iter]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./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
[../]
[./f]
type = MaterialStdVectorAux
index = 0
property = plastic_yield_function
variable = f
[../]
[./iter]
type = MaterialRealAux
property = plastic_NR_iterations
variable = iter
[../]
[]
[Postprocessors]
[./s_xx]
type = PointValue
point = '0 0 0'
variable = stress_xx
[../]
[./s_xy]
type = PointValue
point = '0 0 0'
variable = stress_xy
[../]
[./s_xz]
type = PointValue
point = '0 0 0'
variable = stress_xz
[../]
[./s_yy]
type = PointValue
point = '0 0 0'
variable = stress_yy
[../]
[./s_yz]
type = PointValue
point = '0 0 0'
variable = stress_yz
[../]
[./s_zz]
type = PointValue
point = '0 0 0'
variable = stress_zz
[../]
[./f]
type = PointValue
point = '0 0 0'
variable = f
[../]
[./iter]
type = PointValue
point = '0 0 0'
variable = iter
[../]
[]
[UserObjects]
[./str]
type = TensorMechanicsHardeningConstant
value = 1
[../]
[./j2]
type = TensorMechanicsPlasticJ2
yield_strength = str
yield_function_tolerance = 1E-3
internal_constraint_tolerance = 1E-9
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '0 1E6'
[../]
[./strain]
type = ComputeFiniteStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[../]
[./mc]
type = ComputeMultiPlasticityStress
block = 0
ep_plastic_tolerance = 1E-9
plastic_models = j2
debug_fspb = crash
[../]
[]
[Executioner]
end_time = 1
dt = 1
type = Transient
[]
[Outputs]
file_base = small_deform3
exodus = false
[./csv]
type = CSV
[../]
[]
(modules/tensor_mechanics/test/tests/lagrangian/total/cross_material/correctness/plastic_j2.i)
# Simple 3D test
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
large_kinematics = false
[]
[Variables]
[disp_x]
[]
[disp_y]
[]
[disp_z]
[]
[]
[Mesh]
[msh]
type = GeneratedMeshGenerator
dim = 3
nx = 2
ny = 1
nz = 1
[]
[]
[AuxVariables]
[strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[strain_xz]
order = CONSTANT
family = MONOMIAL
[]
[strain_yz]
order = CONSTANT
family = MONOMIAL
[]
[stress_xx]
order = CONSTANT
family = MONOMIAL
[]
[stress_yy]
order = CONSTANT
family = MONOMIAL
[]
[stress_zz]
order = CONSTANT
family = MONOMIAL
[]
[stress_xy]
order = CONSTANT
family = MONOMIAL
[]
[stress_yz]
order = CONSTANT
family = MONOMIAL
[]
[stress_xz]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[stress_xx]
type = RankTwoAux
rank_two_tensor = cauchy_stress
variable = stress_xx
index_i = 0
index_j = 0
execute_on = timestep_end
[]
[stress_yy]
type = RankTwoAux
rank_two_tensor = cauchy_stress
variable = stress_yy
index_i = 1
index_j = 1
execute_on = timestep_end
[]
[stress_zz]
type = RankTwoAux
rank_two_tensor = cauchy_stress
variable = stress_zz
index_i = 2
index_j = 2
execute_on = timestep_end
[]
[stress_xy]
type = RankTwoAux
rank_two_tensor = cauchy_stress
variable = stress_xy
index_i = 0
index_j = 1
execute_on = timestep_end
[]
[stress_xz]
type = RankTwoAux
rank_two_tensor = cauchy_stress
variable = stress_xz
index_i = 0
index_j = 2
execute_on = timestep_end
[]
[stress_yz]
type = RankTwoAux
rank_two_tensor = cauchy_stress
variable = stress_yz
index_i = 1
index_j = 2
execute_on = timestep_end
[]
[strain_xx]
type = RankTwoAux
rank_two_tensor = mechanical_strain
variable = strain_xx
index_i = 0
index_j = 0
execute_on = timestep_end
[]
[strain_yy]
type = RankTwoAux
rank_two_tensor = mechanical_strain
variable = strain_yy
index_i = 1
index_j = 1
execute_on = timestep_end
[]
[strain_zz]
type = RankTwoAux
rank_two_tensor = mechanical_strain
variable = strain_zz
index_i = 2
index_j = 2
execute_on = timestep_end
[]
[strain_xy]
type = RankTwoAux
rank_two_tensor = mechanical_strain
variable = strain_xy
index_i = 0
index_j = 1
execute_on = timestep_end
[]
[strain_xz]
type = RankTwoAux
rank_two_tensor = mechanical_strain
variable = strain_xz
index_i = 0
index_j = 2
execute_on = timestep_end
[]
[strain_yz]
type = RankTwoAux
rank_two_tensor = mechanical_strain
variable = strain_yz
index_i = 1
index_j = 2
execute_on = timestep_end
[]
[]
[Kernels]
[sdx]
type = TotalLagrangianStressDivergence
variable = disp_x
component = 0
[]
[sdy]
type = TotalLagrangianStressDivergence
variable = disp_y
component = 1
[]
[sdz]
type = TotalLagrangianStressDivergence
variable = disp_z
component = 2
[]
[]
[Functions]
[pullx]
type = ParsedFunction
value = 't'
[]
[]
[BCs]
[leftx]
type = DirichletBC
preset = true
boundary = left
variable = disp_x
value = 0.0
[]
[lefty]
type = DirichletBC
preset = true
boundary = bottom
variable = disp_y
value = 0.0
[]
[leftz]
type = DirichletBC
preset = true
boundary = back
variable = disp_z
value = 0.0
[]
[pull_x]
type = FunctionDirichletBC
boundary = right
variable = disp_x
function = pullx
[]
[]
[UserObjects]
[./str]
type = TensorMechanicsHardeningPowerRule
value_0 = 100.0
epsilon0 = 0.1
exponent = 2.0
[../]
[./j2]
type = TensorMechanicsPlasticJ2
yield_strength = str
yield_function_tolerance = 1E-3
internal_constraint_tolerance = 1E-9
[../]
[]
[Materials]
[elastic_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 100000.0
poissons_ratio = 0.3
[]
[compute_stress]
type = ComputeLagrangianWrappedStress
[]
[compute_stress_base]
type = ComputeMultiPlasticityStress
plastic_models = j2
ep_plastic_tolerance = 1E-9
[]
[compute_strain]
type = ComputeLagrangianStrain
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Postprocessors]
[./strain]
type = ElementAverageValue
variable = strain_xx
[]
[./stress]
type = ElementAverageValue
variable = stress_xx
[]
[]
[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-8
nl_abs_tol = 1e-10
start_time = 0.0
dt = 0.001
dtmin = 0.001
end_time = 0.05
[]
[Outputs]
exodus = false
csv = true
[]
(modules/tensor_mechanics/test/tests/j2_plasticity/hard1.i)
# UserObject J2 test, with hardening, but with rate=0
# apply uniform compression in x direction to give
# trial stress_xx = -5, so sqrt(3*J2) = 5
# with zero Poisson's ratio, this should return to
# stress_xx = -3, stress_yy = -1 = stress_zz,
# for strength = 2
# (note that stress_xx - stress_yy = stress_xx - stress_zz = -2, so sqrt(3*j2) = 2,
# and that the mean stress remains = -5/3)
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[Kernels]
[./TensorMechanics]
displacements = 'disp_x disp_y disp_z'
[../]
[]
[BCs]
[./x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'front back'
function = '-2.5E-6*x'
[../]
[./y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'front back'
function = '0E-6*y'
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = 'front back'
function = '0E-6*z'
[../]
[]
[AuxVariables]
[./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
[../]
[./f]
order = CONSTANT
family = MONOMIAL
[../]
[./iter]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./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
[../]
[./f]
type = MaterialStdVectorAux
index = 0
property = plastic_yield_function
variable = f
[../]
[./iter]
type = MaterialRealAux
property = plastic_NR_iterations
variable = iter
[../]
[]
[Postprocessors]
[./s_xx]
type = PointValue
point = '0 0 0'
variable = stress_xx
[../]
[./s_xy]
type = PointValue
point = '0 0 0'
variable = stress_xy
[../]
[./s_xz]
type = PointValue
point = '0 0 0'
variable = stress_xz
[../]
[./s_yy]
type = PointValue
point = '0 0 0'
variable = stress_yy
[../]
[./s_yz]
type = PointValue
point = '0 0 0'
variable = stress_yz
[../]
[./s_zz]
type = PointValue
point = '0 0 0'
variable = stress_zz
[../]
[./f]
type = PointValue
point = '0 0 0'
variable = f
[../]
[./iter]
type = PointValue
point = '0 0 0'
variable = iter
[../]
[]
[UserObjects]
[./str]
type = TensorMechanicsHardeningConstant
value = 2
[../]
[./j2]
type = TensorMechanicsPlasticJ2
yield_strength = str
yield_function_tolerance = 1E-3
internal_constraint_tolerance = 1E-9
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '0 1E6'
[../]
[./strain]
type = ComputeFiniteStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[../]
[./mc]
type = ComputeMultiPlasticityStress
block = 0
ep_plastic_tolerance = 1E-9
plastic_models = j2
debug_fspb = crash
[../]
[]
[Executioner]
end_time = 1
dt = 1
type = Transient
[]
[Outputs]
file_base = hard1
exodus = false
[./csv]
type = CSV
[../]
[]
(modules/tensor_mechanics/test/tests/j2_plasticity/small_deform1.i)
# UserObject J2 test
# apply uniform stretch in x, y and z directions.
# no plasticity should be observed
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[Kernels]
[./TensorMechanics]
displacements = 'disp_x disp_y disp_z'
[../]
[]
[BCs]
[./x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'front back'
function = '1E-6*x'
[../]
[./y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'front back'
function = '1E-6*y'
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = 'front back'
function = '1E-6*z'
[../]
[]
[AuxVariables]
[./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
[../]
[./f]
order = CONSTANT
family = MONOMIAL
[../]
[./iter]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./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
[../]
[./f]
type = MaterialStdVectorAux
index = 0
property = plastic_yield_function
variable = f
[../]
[./iter]
type = MaterialRealAux
property = plastic_NR_iterations
variable = iter
[../]
[]
[Postprocessors]
[./s_xx]
type = PointValue
point = '0 0 0'
variable = stress_xx
[../]
[./s_xy]
type = PointValue
point = '0 0 0'
variable = stress_xy
[../]
[./s_xz]
type = PointValue
point = '0 0 0'
variable = stress_xz
[../]
[./s_yy]
type = PointValue
point = '0 0 0'
variable = stress_yy
[../]
[./s_yz]
type = PointValue
point = '0 0 0'
variable = stress_yz
[../]
[./s_zz]
type = PointValue
point = '0 0 0'
variable = stress_zz
[../]
[./f]
type = PointValue
point = '0 0 0'
variable = f
[../]
[./iter]
type = PointValue
point = '0 0 0'
variable = iter
[../]
[]
[UserObjects]
[./str]
type = TensorMechanicsHardeningConstant
value = 1
[../]
[./j2]
type = TensorMechanicsPlasticJ2
yield_strength = str
yield_function_tolerance = 1E-3
internal_constraint_tolerance = 1E-9
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '0 1E6'
[../]
[./strain]
type = ComputeFiniteStrain
block = 0
displacements = 'disp_x disp_y disp_z'
[../]
[./mc]
type = ComputeMultiPlasticityStress
block = 0
ep_plastic_tolerance = 1E-9
plastic_models = j2
debug_fspb = crash
[../]
[]
[Executioner]
end_time = 1
dt = 1
type = Transient
[]
[Outputs]
file_base = small_deform1
exodus = false
[./csv]
type = CSV
[../]
[]
(modules/tensor_mechanics/include/userobjects/TensorMechanicsPlasticIsotropicSD.h)
// This file is part of the MOOSE framework
// https://www.mooseframework.org
//
// All rights reserved, see COPYRIGHT for full restrictions
// https://github.com/idaholab/moose/blob/master/COPYRIGHT
//
// Licensed under LGPL 2.1, please see LICENSE for details
// https://www.gnu.org/licenses/lgpl-2.1.html
#pragma once
#include "TensorMechanicsPlasticJ2.h"
#include "RankFourTensor.h"
/**
* IsotropicSD plasticity model from Yoon (2013)
* the name of the paper is "Asymmetric yield function based on the
* stress invariants for pressure sensitive metals" published
* 4th December 2013.
* This model accounts for sensitivity in pressure and for the
* strength differential effect
* Yield_function = \f$ a[b*I_{1} + (J2^{3/2} - c*J3)^{1/3}]\f$ - yield_strength
* The last three functions are the main functions that call all other
* functions in this module for the Newton-Raphson method.
*/
class TensorMechanicsPlasticIsotropicSD : public TensorMechanicsPlasticJ2
{
public:
static InputParameters validParams();
TensorMechanicsPlasticIsotropicSD(const InputParameters & parameters);
protected:
/// A constant to model the influence of pressure
const Real _b;
/// A constant to model the influence of strength differential effect
Real _c;
/// Flag for flow-rule, true if not specified
const bool _associative;
/// Comes from transforming the stress tensor to the deviatoric stress tensor
RankFourTensor _h;
/// A constant used in the constructor that depends on _b and _c
Real _a;
/// derivative of phi with respect to J2, phi is b*I1 + (J2^{3/2} - c*J3)^{1/3}
Real dphi_dj2(const Real j2, const Real j3) const;
/// derivative of phi with respect to J3
Real dphi_dj3(const Real j2, const Real j3) const;
/// derivative of dphi_dJ2 with respect to J2
Real dfj2_dj2(const Real j2, const Real j3) const;
/// derivative of dphi_dJ2 with respect to J3
Real dfj2_dj3(const Real j2, const Real j3) const;
/// derivative of dphi_dJ3 with respect to J2
Real dfj3_dj2(const Real j2, const Real j3) const;
/// derivative of dphi_dJ3 with respect to J3
Real dfj3_dj3(const Real j2, const Real j3) const;
/// derivative of the trace with respect to sigma rank two tensor
RankTwoTensor dI_sigma() const;
/// derivative of the second invariant with respect to the stress deviatoric tensor
RankTwoTensor dj2_dSkl(const RankTwoTensor & stress) const;
/// Yield_function = a[b*I1 + (J2^{3/2} - c*J3)^{1/3}] - yield_strength
Real yieldFunction(const RankTwoTensor & stress, Real intnl) const override;
/// Tensor derivative of the yield_function with respect to the stress tensor
RankTwoTensor dyieldFunction_dstress(const RankTwoTensor & stress, Real intnl) const override;
/// Tensor derivative of the tensor derivative of the yield_function with respect to the stress tensor
RankFourTensor dflowPotential_dstress(const RankTwoTensor & stress, Real intnl) const override;
/// Receives the flag for associative or non-associative and calculates the flow potential accordingly
RankTwoTensor flowPotential(const RankTwoTensor & stress, Real intnl) const override;
};