- hill_constantsHill material constants in order: F, G, H, L, M, N
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Hill material constants in order: F, G, H, L, M, N
Hill Constants
Build and rotate the Hill Tensor. It can be used with other Hill plasticity and creep materials.
Description
The HillConstants
material transforms the user specified hill constants from global co-ordinates to the material co-ordinates and stores them as a material property. It rotates the hill constants during the initial time step only. This class does not rotate the hill tensor during the simulation. The initial rotation is performed based of the user defined rotation angle parameters. The rotated Hill tensor is obtained as Stewart et al. (2011):
(1)
Here, is the transformed hill tensor, is the initial Hill tensor and is the transformation matrix. The transformation matrix is formed from the components of the total rotation matrix due to initial rotation and the orientation change due to large deformation.
Temperature dependency and large deformation kinematics
The Hill's tensor varies depending on temperature (due to texture) and depending on the material's rotation. To that effect, the user can create functions describing the evolution of the coefficients with temperature and provide it to the material, as follows:
[Materials]
[hill_constants]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5 0.5 0.5 1.5 1.5 1.5"
function_names = 'F G H L M N'
temperature = temperature
[]
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_temperature_coefficients_function_variation.i)where six piecewise linear functions are created to define the material directional creep dependency with temperature.
In addition, the code accounts for finite strain rotation to update the Hill's tensor by default. For simple problems, the user can deactivate this feature by setting the input argument use_large_rotation
to false. Updating of directional coefficients with finite strain rotation kinematics is strongly encouraged when the material Similarly, use of the transformed Hill's tensor would need to be disabled in the creep model, i.e. the following input file's command line needs to be passed: use_transformation = false
.
[Materials]
[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
[]
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/3d_bar_orthotropic_90deg_rotation_ad_creep_z.i)Temperature coupling and large deformation updates have only been tested on creep models.
Example Input File Syntax
[Materials]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5829856 0.364424 0.6342174 2.0691375 2.3492325 1.814589"
base_name = trial_plasticity
[]
[]
(modules/solid_mechanics/test/tests/anisotropic_plasticity/ad_aniso_plasticity_x.i)Input Parameters
- base_nameOptional parameter that allows the user to define multiple mechanics material systems on the same block, i.e. for multiple phases
C++ Type:std::string
Unit:(no unit assumed)
Controllable:No
Description:Optional parameter that allows the user to define multiple mechanics material systems on the same block, i.e. for multiple phases
- blockThe list of blocks (ids or names) that this object will be applied
C++ Type:std::vector<SubdomainName>
Unit:(no unit assumed)
Controllable:No
Description:The list of blocks (ids or names) that this object will be applied
- boundaryThe list of boundaries (ids or names) from the mesh where this object applies
C++ Type:std::vector<BoundaryName>
Unit:(no unit assumed)
Controllable:No
Description:The list of boundaries (ids or names) from the mesh where this object applies
- computeTrueWhen false, MOOSE will not call compute methods on this material. The user must call computeProperties() after retrieving the MaterialBase via MaterialBasePropertyInterface::getMaterialBase(). Non-computed MaterialBases are not sorted for dependencies.
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:When false, MOOSE will not call compute methods on this material. The user must call computeProperties() after retrieving the MaterialBase via MaterialBasePropertyInterface::getMaterialBase(). Non-computed MaterialBases are not sorted for dependencies.
- constant_onNONEWhen ELEMENT, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps.When SUBDOMAIN, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps. Evaluations on element qps will be skipped
Default:NONE
C++ Type:MooseEnum
Unit:(no unit assumed)
Options:NONE, ELEMENT, SUBDOMAIN
Controllable:No
Description:When ELEMENT, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps.When SUBDOMAIN, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps. Evaluations on element qps will be skipped
- declare_suffixAn optional suffix parameter that can be appended to any declared properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:An optional suffix parameter that can be appended to any declared properties. The suffix will be prepended with a '_' character.
- function_namesA set of functions that describe the evolution of anisotropy with temperature
C++ Type:std::vector<FunctionName>
Unit:(no unit assumed)
Controllable:No
Description:A set of functions that describe the evolution of anisotropy with temperature
- 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
Unit:(no unit assumed)
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.
- rotation_anglesProvide the rotation angles for the transformation matrix. This should be a vector that provides the rotation angles about z-, x-, and z-axis, respectively in degrees.
C++ Type:libMesh::VectorValue<double>
Unit:(no unit assumed)
Controllable:No
Description:Provide the rotation angles for the transformation matrix. This should be a vector that provides the rotation angles about z-, x-, and z-axis, respectively in degrees.
- temperatureCoupled temperature
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Coupled temperature
- use_automatic_differentiationFalseWhether thermal contact depends on automatic differentiation materials.
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Whether thermal contact depends on automatic differentiation materials.
- use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
- use_large_rotationTrueWhether to rotate the Hill tensor (anisotropic parameters) to account for large kinematic rotations. It's recommended to set it to true if large displacements are to be expected.
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Whether to rotate the Hill tensor (anisotropic parameters) to account for large kinematic rotations. It's recommended to set it to true if large displacements are to be expected.
Optional Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Unit:(no unit assumed)
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
Unit:(no unit assumed)
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
Unit:(no unit assumed)
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
Unit:(no unit assumed)
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
Unit:(no unit assumed)
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
- output_propertiesList of material properties, from this material, to output (outputs must also be defined to an output type)
C++ Type:std::vector<std::string>
Unit:(no unit assumed)
Controllable:No
Description:List of material properties, from this material, to output (outputs must also be defined to an output type)
- outputsnone Vector of output names where you would like to restrict the output of variables(s) associated with this object
Default:none
C++ Type:std::vector<OutputName>
Unit:(no unit assumed)
Controllable:No
Description:Vector of output names where you would like to restrict the output of variables(s) associated with this object
Outputs Parameters
Input Files
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_xy_3d_shear.i)
- (modules/solid_mechanics/test/tests/anisotropic_elastoplasticity/ad_uniaxial_y.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_x_3d_shear.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_y_3d.i)
- (modules/solid_mechanics/test/tests/anisotropic_plasticity/ad_aniso_plasticity_x_rotate.i)
- (modules/solid_mechanics/test/tests/anisotropic_elastoplasticity/hoop_strain_comparison_coarse_zaxis.i)
- (modules/solid_mechanics/test/tests/anisotropic_plasticity/ad_aniso_plasticity_y.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/aniso_creep_x_3d.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_integration_error.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/aniso_iso_creep_x_3d.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_iso_creep_x_3d.i)
- (modules/solid_mechanics/test/tests/anisotropic_elastoplasticity/hoop_strain_comparison.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/3d_bar_orthotropic_90deg_rotation_ad_creep_z.i)
- (modules/solid_mechanics/test/tests/anisotropic_elastoplasticity/ad_uniaxial_x.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_temperature_coefficients_function_variation.i)
- (modules/solid_mechanics/test/tests/anisotropic_elastoplasticity/hoop_strain_comparison_coarse_yaxis.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_temperature_coefficients_function.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_x_3d.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/aniso_creep_integration_error.i)
- (modules/solid_mechanics/test/tests/anisotropic_elastoplasticity/ad_aniso_plasticity_x_one_ref.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/ad_anisotropic_creep/anis_mech_hill_tensor_creep_small_tiny_step_ts_limit_test.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_x_3d_anisoElasticity.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/anis_mech_hill_tensor_creep.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/3d_bar_orthotropic_90deg_rotation_ad_creep_x.i)
- (modules/solid_mechanics/test/tests/anisotropic_plasticity/ad_aniso_plasticity_x.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_xy_3d_anisoElasticity.i)
- (modules/solid_mechanics/test/tests/anisotropic_elastoplasticity/hoop_strain_comparison_coarse_xaxis.i)
- (modules/solid_mechanics/test/tests/anisotropic_elastoplasticity/ad_uniaxial_x_non_linear.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_temperature_coefficients.i)
- (modules/solid_mechanics/test/tests/anisotropic_plasticity/anis_plasticity_test.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/anisotropic_elastoplasticity/ad_aniso_plasticity_x_one.i)
- (modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_z_3d.i)
References
- Calvin M Stewart, Ali P Gordon, Young Wha Ma, and Richard W Neu.
An anisotropic tertiary creep damage constitutive model for anisotropic materials.
International Journal of Pressure Vessels and Piping, 88(8-9):356–364, 2011.[BibTeX]
@article{stewart2011anisotropic, author = "Stewart, Calvin M and Gordon, Ali P and Ma, Young Wha and Neu, Richard W", title = "An anisotropic tertiary creep damage constitutive model for anisotropic materials", journal = "International Journal of Pressure Vessels and Piping", volume = "88", number = "8-9", pages = "356--364", year = "2011", publisher = "Elsevier" }
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_temperature_coefficients_function_variation.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 10
ny = 2
nz = 2
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 10.0
ymax = 1.0
zmax = 1.0
[]
[corner_node]
type = ExtraNodesetGenerator
new_boundary = '100'
nodes = '3 69'
input = gen
[]
[corner_node_2]
type = ExtraNodesetGenerator
new_boundary = '101'
nodes = '4 47'
input = corner_node
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[temperature]
order = CONSTANT
family = MONOMIAL
[]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xz]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yz]
order = CONSTANT
family = MONOMIAL
[]
[hill_constants_f]
order = CONSTANT
family = MONOMIAL
[]
[hill_constants_g]
order = CONSTANT
family = MONOMIAL
[]
[hill_constants_h]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[temperature]
type = FunctionAux
variable = temperature
function = time_temperature
[]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[creep_strain_xx]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xx
index_i = 0
index_j = 0
[]
[creep_strain_xy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xy
index_i = 0
index_j = 1
[]
[creep_strain_yy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yy
index_i = 1
index_j = 1
[]
[creep_strain_zz]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_zz
index_i = 2
index_j = 2
[]
[creep_strain_xz]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xz
index_i = 0
index_j = 2
[]
[creep_strain_yz]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yz
index_i = 1
index_j = 2
[]
[sigma_xx]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 1
index_j = 1
[]
[hill_constant_f]
type = MaterialStdVectorAux
property = hill_constants
variable = hill_constants_f
index = 0
[]
[hill_constant_g]
type = MaterialStdVectorAux
property = hill_constants
variable = hill_constants_g
index = 1
[]
[hill_constant_h]
type = MaterialStdVectorAux
property = hill_constants
variable = hill_constants_h
index = 2
[]
[]
[ICs]
[temp]
type = ConstantIC
variable = temperature
value = 50.0
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1.0e-9 1.0'
y = '0 -4e1 -4e1'
[]
[F]
type = PiecewiseLinear
x = '50 200'
y = '0.2 0.5'
[]
[G]
type = PiecewiseLinear
x = '50 200'
y = '0.9 0.6'
[]
[H]
type = PiecewiseLinear
x = '50 200'
y = '0.5 0.3'
[]
[L]
type = PiecewiseLinear
x = '50 200'
y = '1.5 1.5'
[]
[M]
type = PiecewiseLinear
x = '50 200'
y = '1.5 1.5'
[]
[N]
type = PiecewiseLinear
x = '50 200'
y = '1.5 1.5'
[]
[time_temperature]
type = PiecewiseLinear
x = '0 1.0e-2'
y = '50 200'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_xx stress_xx'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 700
poissons_ratio = 0.0
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = 'trial_creep_aniso_iso'
max_iterations = 50
[]
[hill_constants]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5 0.5 0.5 1.5 1.5 1.5"
function_names = 'F G H L M N'
temperature = temperature
[]
[trial_creep_aniso_iso]
type = ADHillCreepStressUpdate
coefficient = 1e-16
n_exponent = 9
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 0.00003
relative_tolerance = 1e-20
absolute_tolerance = 1e-20
internal_solve_output_on = never
# Force it to not use integration error
max_integration_error = 1.0
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = 100
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = 101
value = 0.0
[]
[Pressure]
[Side1]
boundary = right
function = pull
[]
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-13
nl_abs_tol = 1.0e-14
l_max_its = 90
num_steps = 20
dt = 5.0e-4
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[creep_strain_xx]
type = ElementalVariableValue
variable = creep_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_yy]
type = ElementalVariableValue
variable = creep_strain_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_zz]
type = ElementalVariableValue
variable = creep_strain_zz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_xy]
type = ElementalVariableValue
variable = creep_strain_xy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_yz]
type = ElementalVariableValue
variable = creep_strain_yz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_xz]
type = ElementalVariableValue
variable = creep_strain_xz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[elastic_strain_xx]
type = ElementalVariableValue
variable = elastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[sigma_xx]
type = ElementalVariableValue
variable = stress_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[]
[Outputs]
csv = true
exodus = true
perf_graph = 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/anisotropic_plasticity/ad_aniso_plasticity_x.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 10
ny = 2
nz = 2
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 10.0
ymax = 1.0
zmax = 1.0
[]
[corner_node]
type = ExtraNodesetGenerator
new_boundary = '100'
nodes = '3 69'
input = gen
[]
[corner_node_2]
type = ExtraNodesetGenerator
new_boundary = '101'
nodes = '4 47'
input = corner_node
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[stress_yy]
order = CONSTANT
family = MONOMIAL
[]
[elastic_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[plasticity_strain_xx]
type = ADRankTwoAux
rank_two_tensor = trial_plasticity_plastic_strain
variable = plastic_strain_xx
index_i = 0
index_j = 0
[]
[plasticity_strain_xy]
type = ADRankTwoAux
rank_two_tensor = trial_plasticity_plastic_strain
variable = plastic_strain_xy
index_i = 0
index_j = 1
[]
[plasticity_strain_yy]
type = ADRankTwoAux
rank_two_tensor = trial_plasticity_plastic_strain
variable = plastic_strain_yy
index_i = 1
index_j = 1
[]
[plasticity_strain_zz]
type = ADRankTwoAux
rank_two_tensor = trial_plasticity_plastic_strain
variable = plastic_strain_zz
index_i = 2
index_j = 2
[]
[sigma_xx]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 1
index_j = 1
[]
[elastic_strain_yy]
type = ADRankTwoAux
rank_two_tensor = elastic_strain
variable = elastic_strain_yy
index_i = 1
index_j = 1
[]
[sigma_yy]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1e1 1e8'
y = '0 -4e2 -4e2'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_xx stress_xx'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 70000
poissons_ratio = 0.25
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_plasticity"
max_iterations = 50
absolute_tolerance = 1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5829856 0.364424 0.6342174 2.0691375 2.3492325 1.814589"
base_name = trial_plasticity
[]
[trial_plasticity]
type = ADHillPlasticityStressUpdate
hardening_constant = 2000.0
yield_stress = 0.001 # was 200 for verification
absolute_tolerance = 1e-14
relative_tolerance = 1e-12
base_name = trial_plasticity
internal_solve_full_iteration_history = true
max_inelastic_increment = 2.0e-6
internal_solve_output_on = on_error
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = 100
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = 101
value = 0.0
[]
[Pressure]
[Side1]
boundary = right
function = pull
[]
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-11
nl_abs_tol = 1.0e-14
l_max_its = 90
num_steps = 25
[TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 30
iteration_window = 9
growth_factor = 1.05
cutback_factor = 0.5
timestep_limiting_postprocessor = matl_ts_min
dt = 1.0e-5
time_t = '0 3.4e-5 10'
time_dt = '1.0e-5 1.0e-7 1.0e-7'
[]
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[plasticity_strain_yy]
type = ElementalVariableValue
variable = plastic_strain_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[elastic_strain_yy]
type = ElementalVariableValue
variable = elastic_strain_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[sigma_yy]
type = ElementalVariableValue
variable = stress_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[plasticity_strain_xx]
type = ElementalVariableValue
variable = plastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[elastic_strain_xx]
type = ElementalVariableValue
variable = elastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[sigma_xx]
type = ElementalVariableValue
variable = stress_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[plasticity_strain_zz]
type = ElementalVariableValue
variable = plastic_strain_zz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[]
[Outputs]
csv = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_xy_3d_shear.i)
# This test simulates shear test. The shear load is applied in two directions.
#
# -------------------
# ANALYTICAL SOLUTION
# -------------------
# https://mooseframework.inl.gov/source/materials/HillCreepStressUpdate.html
# q = [F(S22-S33)^2 + G(S33-S11)^2 + H(S11-S22)^2 + 2L(S23)^2 + 2M(S13)^2 + 2N(S12)^2]^0.5
# S12 = 10 Pa and S23 = 10 Pa; other compoenents of stress are zero since it is a uniaxial test
# F=0.5 G=0.25 H=0.3866 L=1.6413 M=1.6413 N=1.2731 (as used in this test)
# Substituting the values of stress components and F, G, H, L, M and N we obtain
# q = 24.1429 Pa
#
# Equivalent_creep_strain_rate = A(q)^n (power law creep rate used in this test)
# Substituting A=1e-16 and n=9, and q as calculated above, we obtain
# Equivalent_creep_strain_rate = 2.7868e-4
#
# The 12 (xy) and 32 (zy) component of creep_strain_tensor is calculated as below
# creep_strain_tensor_12 = (Equivalent_creep_strain_rate / q) * 2.0 * N * S12 * time_increment
# creep_strain_tensor_32 = (Equivalent_creep_strain_rate / q) * 2.0 * L * S32 * time_increment
# Substituting the values and time_increment as 0.001 we obtain the analytical solution.
#
# MOOSE Analytical
# creep_strain_tensor_12 2.935999e-08 2.9390645e-08
# creep_strain_tensor_32 3.788000e-08 3.7890870e-08
#
# -----------------------------------------
# PYTHON SCRIPT FOR THE ANALYTICAL SOLUTION
# -----------------------------------------
# import math
# F=0.5; G=0.25; H=0.3866; L=1.6413; M=1.6413; N=1.2731
# S11=0; S22=0; S33=0; S23=10; S13=0; S12=10
# q = math.sqrt(F*(S22-S33)**2 + G*(S33-S11)**2 + H*(S11-S22)**2 + 2*L*(S23)**2 + 2*M*(S13)**2 + 2*N*(S12)**2)
# print(q)
# A=1e-16; n=9; time=0.0001
# equivalent_creep_strain_rate = A*(q**n)
# print(equivalent_creep_strain_rate)
# equivalent_creep_strain_rate_12=(equivalent_creep_strain_rate / q) * 2.0 * N * S12 * time
# equivalent_creep_strain_rate_32=(equivalent_creep_strain_rate / q) * 2.0 * L * S23 * time
# print(equivalent_creep_strain_rate_12)
# print(equivalent_creep_strain_rate_32)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 1
ny = 1
nz = 1
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 1.0
ymax = 1.0
zmax = 1.0
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_zy]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[creep_strain_xy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xy
index_i = 0
index_j = 1
[]
[creep_strain_zy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_zy
index_i = 2
index_j = 1
[]
[sigma_xy]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xy
index_i = 0
index_j = 1
[]
[sigma_zy]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_zy
index_i = 2
index_j = 1
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_xy stress_xy elastic_strain_zy stress_zy'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 700
poissons_ratio = 0.0
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_creep_two"
max_iterations = 50
absolute_tolerance = 1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5 0.25 0.3866 1.6413 1.6413 1.2731"
[]
[trial_creep_two]
type = ADHillCreepStressUpdate
coefficient = 1e-16
n_exponent = 9
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 0.00003
absolute_tolerance = 1e-20
relative_tolerance = 1e-20
# Force it to not use integration error
max_integration_error = 100.0
anisotropic_elasticity = true
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = bottom
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = bottom
value = 0.0
[]
[shear_load_xy]
type = ADNeumannBC
variable = disp_x
boundary = top
value = 10
[]
[shear_load_zy]
type = ADNeumannBC
variable = disp_z
boundary = top
value = 10
[]
[no_disp_y_top]
type = ADDirichletBC
variable = disp_y
boundary = top
value = 0.0
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package -mat_mffd_err'
petsc_options_value = 'lu superlu_dist 1e-5'
nl_rel_tol = 1.0e-14
nl_abs_tol = 1.0e-14
l_max_its = 10
num_steps = 5
dt = 1.0e-4
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[creep_strain_xy]
type = ElementAverageValue
variable = creep_strain_xy
execute_on = 'TIMESTEP_END'
[]
[elastic_strain_xy]
type = ElementAverageValue
variable = elastic_strain_xy
execute_on = 'TIMESTEP_END'
[]
[sigma_xy]
type = ElementAverageValue
variable = stress_xy
execute_on = 'TIMESTEP_END'
[]
[creep_strain_zy]
type = ElementAverageValue
variable = creep_strain_zy
execute_on = 'TIMESTEP_END'
[]
[elastic_strain_zy]
type = ElementAverageValue
variable = elastic_strain_zy
execute_on = 'TIMESTEP_END'
[]
[sigma_zy]
type = ElementAverageValue
variable = stress_zy
execute_on = 'TIMESTEP_END'
[]
[]
[Outputs]
csv = true
exodus = false
perf_graph = true
# unnecessary output variables
hide = 'matl_ts_min max_disp_x max_disp_y max_hydro dt num_lin num_nonlin'
[]
(modules/solid_mechanics/test/tests/anisotropic_elastoplasticity/ad_uniaxial_y.i)
# This test simulates uniaxial tensile loading in y-direction.
# The slope of the stress vs. plastic strain is evaluated from
# the simulation and compared with the value calculated using
# the analytical expression. This test uses a material with li-
# near strain hardening.
# For uniaxial tensile loading in y-direction, the slope of the
# stress vs. plastic strain is (2K / (F + H)) where K is the ha-
# rdening constant, and F & H are the Hill's constant. For deta-
# ils on the derivation of the expression for slope please refer
# the documentation of this material.
# Slope obtained from this MOOSE test simulation:
# = 1.521 x 10^9
# Slope obtained from analytical expression:
# = 2 x 10^9 / (0.6 + 0.7) = 1.538 x 10^9
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[sigma_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[plasticity_strain_xx]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_xx
index_i = 0
index_j = 0
[]
[plasticity_strain_xy]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_xy
index_i = 0
index_j = 1
[]
[plasticity_strain_yy]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_yy
index_i = 1
index_j = 1
[]
[sigma_yy]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1e1 1e8'
y = '0 -4e8 -4e8'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_yy stress_yy strain_yy plastic_strain_yy'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeElasticityTensor
fill_method = orthotropic
C_ijkl = '10.0e10 15.0e10 20.0e10 2.0e10 2.0e10 2.0e10 0.2 0.2 0.2 0.13333333333333333 0.1 0.15'
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_plasticity"
max_iterations = 50
absolute_tolerance = 1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.6 0.4 0.7 1.5 1.5 1.5"
[]
[trial_plasticity]
type = ADHillElastoPlasticityStressUpdate
hardening_constant = 10e9
yield_stress = 60e6
absolute_tolerance = 1e-15
relative_tolerance = 1e-13
# internal_solve_full_iteration_history = true
max_inelastic_increment = 2.0e-5
# internal_solve_output_on = on_error
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = back
value = 0.0
[]
[Pressure]
[Side1]
boundary = top
function = pull
[]
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-12
nl_abs_tol = 1.0e-14
l_max_its = 90
[TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 30
iteration_window = 9
growth_factor = 1.05
cutback_factor = 0.5
timestep_limiting_postprocessor = matl_ts_min
dt = 0.1
time_t = '0 2.5 10'
time_dt = '0.1 1.0e-2 1.0e-2'
[]
start_time = 0
end_time = 10.0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[plasticity_strain_yy]
type = ElementalVariableValue
variable = plastic_strain_yy
execute_on = 'TIMESTEP_END'
elementid = 0
[]
[elastic_strain_yy]
type = ElementalVariableValue
variable = elastic_strain_yy
execute_on = 'TIMESTEP_END'
elementid = 0
[]
[strain_yy]
type = ElementalVariableValue
variable = strain_yy
execute_on = 'TIMESTEP_END'
elementid = 0
[]
[sigma_yy]
type = ElementalVariableValue
variable = stress_yy
execute_on = 'TIMESTEP_END'
elementid = 0
[]
[]
[Outputs]
csv = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_x_3d_shear.i)
# This test simulates shear test. The shear load is applied in one direction.
#
# -------------------
# ANALYTICAL SOLUTION
# -------------------
# https://mooseframework.inl.gov/source/materials/HillCreepStressUpdate.html
# q = [F(S22-S33)^2 + G(S33-S11)^2 + H(S11-S22)^2 + 2L(S23)^2 + 2M(S13)^2 + 2N(S12)^2]^0.5
# S12 = 10 Pa; other compoenents of stress are zero since it is a uniaxial test
# F=0.5 G=0.25 H=0.3866 L=1.6413 M=1.6413 N=1.2731 (as used in this test)
# Substituting the values of stress components and F, G, H, L, M and N we obtain
# q = 15.9568 Pa
#
# Equivalent_creep_strain_rate = A(q)^n (power law creep rate used in this test)
# Substituting A=1e-16 and n=9, and q as calculated above, we obtain
# Equivalent_creep_strain_rate = 6.7068e-06
#
# The 12 (xy) component of creep_strain_tensor is calculated as below
# creep_strain_tensor_12 = (Equivalent_creep_strain_rate / q) * 2.0 * N * S12 * time_increment
# Substituting the values and time_increment as 0.001 we obtain the analytical solution.
#
# MOOSE Analytical
# creep_strain_tensor_12 1.070870e-09 1.07019e-09
#
# -----------------------------------------
# PYTHON SCRIPT FOR THE ANALYTICAL SOLUTION
# -----------------------------------------
# import math
# F=0.5; G=0.25; H=0.3866; L=1.6413; M=1.6413; N=1.2731
# S11=0; S22=0; S33=0; S23=0; S13=0; S12=10
# q = math.sqrt(F*(S22-S33)**2 + G*(S33-S11)**2 + H*(S11-S22)**2 + 2*L*(S23)**2 + 2*M*(S13)**2 + 2*N*(S12)**2)
# print(q)
# A=1e-16; n=9; time=0.0001
# equivalent_creep_strain_rate = A*(q**n)
# print(equivalent_creep_strain_rate)
# equivalent_creep_strain_rate_12=(equivalent_creep_strain_rate / q) * 2.0 * N * S12 * time
# print(equivalent_creep_strain_rate_12)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 1
ny = 1
nz = 1
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 1.0
ymax = 1.0
zmax = 1.0
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[creep_strain_xy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xy
index_i = 0
index_j = 1
[]
[sigma_xy]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xy
index_i = 0
index_j = 1
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[./all]
strain = FINITE
generate_output = 'elastic_strain_xy stress_xy'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 700
poissons_ratio = 0.0
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_creep_two"
max_iterations = 50
absolute_tolerance = 1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5 0.25 0.3866 1.6413 1.6413 1.2731"
[]
[trial_creep_two]
type = ADHillCreepStressUpdate
coefficient = 1e-16
n_exponent = 9
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 0.00003
absolute_tolerance = 1e-20
relative_tolerance = 1e-20
# Force it to not use integration error
max_integration_error = 100.0
anisotropic_elasticity = true
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = bottom
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = bottom
value = 0.0
[]
[shear_load]
type = ADNeumannBC
variable = disp_x
boundary = top
value = 10
[]
[no_disp_y_top]
type = ADDirichletBC
variable = disp_y
boundary = top
value = 0.0
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package -mat_mffd_err'
petsc_options_value = 'lu superlu_dist 1e-5'
nl_rel_tol = 1.0e-14
nl_abs_tol = 1.0e-14
l_max_its = 10
num_steps = 5
dt = 1.0e-4
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[creep_strain_xy]
type = ElementAverageValue
variable = creep_strain_xy
execute_on = 'TIMESTEP_END'
[]
[elastic_strain_xy]
type = ElementAverageValue
variable = elastic_strain_xy
execute_on = 'TIMESTEP_END'
[]
[sigma_xy]
type = ElementAverageValue
variable = stress_xy
execute_on = 'TIMESTEP_END'
[]
[]
[Outputs]
csv = true
exodus = false
perf_graph = true
# unnecessary output variables
hide = 'matl_ts_min max_disp_x max_disp_y max_hydro dt num_lin num_nonlin'
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_y_3d.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 2
ny = 10
nz = 2
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 1.0
ymax = 10.0
zmax = 1.0
[]
[corner_node]
type = ExtraNodesetGenerator
new_boundary = '100'
nodes = '4 10'
input = gen
[]
[corner_node_2]
type = ExtraNodesetGenerator
new_boundary = '101'
nodes = '1 67'
input = corner_node
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[creep_strain_xx]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xx
index_i = 0
index_j = 0
[]
[creep_strain_xy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xy
index_i = 0
index_j = 1
[]
[creep_strain_yy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yy
index_i = 1
index_j = 1
[]
[creep_strain_zz]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yy
index_i = 1
index_j = 1
[]
[sigma_yy]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1.0e-11 1.0'
y = '0 -4e1 -4e1'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_yy stress_yy'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 700
poissons_ratio = 0.0
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_creep_two"
max_iterations = 50
absolute_tolerance = 1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5 0.25 0.3866 1.6413 1.6413 1.2731"
[]
[trial_creep_two]
type = ADHillCreepStressUpdate
coefficient = 1e-16
n_exponent = 9
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 0.00003
absolute_tolerance = 1e-20
relative_tolerance = 1e-20
# Force it to not use integration error
max_integration_error = 0.000001
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = 101
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = 100
value = 0.0
[]
[pressure]
type = ADPressure
boundary = top
function = pull
variable = disp_y
component = 1
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1.0e-13
nl_abs_tol = 1.0e-13
l_max_its = 90
num_steps = 10
dt = 1.0e-4
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[creep_strain_yy]
type = ElementalVariableValue
variable = creep_strain_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[elastic_strain_yy]
type = ElementalVariableValue
variable = elastic_strain_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[sigma_yy]
type = ElementalVariableValue
variable = stress_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[]
[Outputs]
csv = true
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/anisotropic_plasticity/ad_aniso_plasticity_x_rotate.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 10
ny = 2
nz = 2
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 10.0
ymax = 1.0
zmax = 1.0
[]
[corner_node]
type = ExtraNodesetGenerator
new_boundary = '100'
nodes = '3 69'
input = gen
[]
[corner_node_2]
type = ExtraNodesetGenerator
new_boundary = '101'
nodes = '4 47'
input = corner_node
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[stress_yy]
order = CONSTANT
family = MONOMIAL
[]
[elastic_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[plasticity_strain_xx]
type = ADRankTwoAux
rank_two_tensor = trial_plasticity_plastic_strain
variable = plastic_strain_xx
index_i = 0
index_j = 0
[]
[plasticity_strain_xy]
type = ADRankTwoAux
rank_two_tensor = trial_plasticity_plastic_strain
variable = plastic_strain_xy
index_i = 0
index_j = 1
[]
[plasticity_strain_yy]
type = ADRankTwoAux
rank_two_tensor = trial_plasticity_plastic_strain
variable = plastic_strain_yy
index_i = 1
index_j = 1
[]
[plasticity_strain_zz]
type = ADRankTwoAux
rank_two_tensor = trial_plasticity_plastic_strain
variable = plastic_strain_zz
index_i = 2
index_j = 2
[]
[sigma_xx]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 1
index_j = 1
[]
[elastic_strain_yy]
type = ADRankTwoAux
rank_two_tensor = elastic_strain
variable = elastic_strain_yy
index_i = 1
index_j = 1
[]
[sigma_yy]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1e1 1e8'
y = '0 -4e2 -4e2'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_xx stress_xx'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 70000
poissons_ratio = 0.25
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_plasticity"
max_iterations = 50
absolute_tolerance = 1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5829856 0.364424 0.6342174 2.0691375 2.3492325 1.814589"
base_name = trial_plasticity
rotation_angles = '90 90 90'
[]
[trial_plasticity]
type = ADHillPlasticityStressUpdate
hardening_constant = 2000.0
yield_stress = 0.001 # was 200 for verification
absolute_tolerance = 1e-14
relative_tolerance = 1e-12
base_name = trial_plasticity
internal_solve_full_iteration_history = true
max_inelastic_increment = 2.0e-6
internal_solve_output_on = on_error
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = 100
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = 101
value = 0.0
[]
[Pressure]
[Side1]
boundary = right
function = pull
[]
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-11
nl_abs_tol = 1.0e-14
l_max_its = 90
num_steps = 25
[TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 30
iteration_window = 9
growth_factor = 1.05
cutback_factor = 0.5
timestep_limiting_postprocessor = matl_ts_min
dt = 1.0e-5
time_t = '0 3.4e-5 10'
time_dt = '1.0e-5 1.0e-7 1.0e-7'
[]
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[plasticity_strain_yy]
type = ElementalVariableValue
variable = plastic_strain_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[elastic_strain_yy]
type = ElementalVariableValue
variable = elastic_strain_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[sigma_yy]
type = ElementalVariableValue
variable = stress_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[plasticity_strain_xx]
type = ElementalVariableValue
variable = plastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[elastic_strain_xx]
type = ElementalVariableValue
variable = elastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[sigma_xx]
type = ElementalVariableValue
variable = stress_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[plasticity_strain_zz]
type = ElementalVariableValue
variable = plastic_strain_zz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[]
[Outputs]
csv = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/anisotropic_elastoplasticity/hoop_strain_comparison_coarse_zaxis.i)
# This test compares the hoop strain at two different elements in an internally
# pressurized cylinder with anisotropic plasticity: different yield condition
# for hoop and axial directions. The elements are located circumferentially
# apart but at same axial position. It is expected that due to pressurization
# hoop strains will develop with uniform magnitude along hoop direction. The
# test verifies that the plastic hoop strain is uniform in hoop direction.
# For 3D simulations with material properties oriented along the curved
# geometry such as cylinder or sphere, the stresses and strains are rotated to
# the local coordinate system from the global coordinate system. The plastic
# strain is calculated in the local coordinate system and then transformed to
# the global coordinate system. This test involves a 3D cylindrical geometry,
# and helps in indirectly verifying that this transformation of stresses and
# strains back and forth between the local and global coordinate system is
# correctly implemented.
[Mesh]
file = quarter_cylinder_coarse_zaxis.e
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[stress_zz]
order = CONSTANT
family = MONOMIAL
[]
[stress_xx]
order = CONSTANT
family = MONOMIAL
[]
[stress_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[plasticity_strain_xx]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_xx
index_i = 0
index_j = 0
[]
[plasticity_strain_xy]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_xy
index_i = 0
index_j = 1
[]
[plasticity_strain_yy]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_yy
index_i = 1
index_j = 1
[]
[plasticity_strain_zz]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_zz
index_i = 2
index_j = 2
[]
[stress_zz]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[]
[stress_xx]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[]
[stress_yy]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[]
[]
[Functions]
[push]
type = PiecewiseLinear
x = '0 1e2'
y = '0 200e6'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_zz elastic_strain_xx elastic_strain_yy stress_xx stress_yy stress_zz strain_zz plastic_strain_zz plastic_strain_xx plastic_strain_yy hoop_stress hoop_strain'
use_automatic_differentiation = true
add_variables = true
cylindrical_axis_point1 = '0 0 0'
cylindrical_axis_point2 = '0 0 1'
[]
[]
[Constraints]
[mid_section_plane]
type = EqualValueBoundaryConstraint
variable = disp_z
secondary = top # boundary
penalty = 1.0e+10
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 200.0e9
poissons_ratio = 0.2
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "plasticity"
max_iterations = 50
absolute_tolerance = 1e-30 #1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
# hill_constants = "0.5 0.5 0.5 1.5 1.5 1.5"
hill_constants = "0.5 0.5 0.25 1.5 1.5 1.5"
[]
[plasticity]
type = ADHillElastoPlasticityStressUpdate
hardening_constant = 1.5e10
hardening_exponent = 1.0
yield_stress = 0.0 # 60e6
local_cylindrical_csys = true
axis = z
absolute_tolerance = 1e-15 # 1e-8
relative_tolerance = 1e-13 # 1e-15
internal_solve_full_iteration_history = true
max_inelastic_increment = 2.0e-6
internal_solve_output_on = on_error
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = x_face
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = bottom
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = y_face
value = 0.0
[]
[Pressure]
[Side1]
boundary = inner
function = push
[]
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-12
nl_abs_tol = 1e-14
# nl_abs_tol = 1e-10
l_max_its = 90
nl_max_its = 30
[TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 30
iteration_window = 9
growth_factor = 1.05
cutback_factor = 0.5
timestep_limiting_postprocessor = matl_ts_min
dt = 0.1e-4
time_t = '0 6.23 10'
time_dt = '0.1 1.0e-2 1.0e-2'
[]
num_steps = 1
start_time = 0
end_time = 200.0
automatic_scaling = true
dtmax = 0.1e-4
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[hoop_strain_elementA]
type = ElementalVariableValue
elementid = 10
variable = hoop_strain
[]
[hoop_strain_elementB]
type = ElementalVariableValue
elementid = 4
variable = hoop_strain
[]
[hoop_strain_diff]
type = DifferencePostprocessor
value1 = hoop_strain_elementA
value2 = hoop_strain_elementB
[]
[]
[Outputs]
csv = true
exodus = false
perf_graph = true
[]
(modules/solid_mechanics/test/tests/anisotropic_plasticity/ad_aniso_plasticity_y.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
# Original verification nx = 2, ny = 10, nz = 2
nx = 2
ny = 10
nz = 2
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 1.0
ymax = 10.0
zmax = 1.0
[]
[corner_node]
type = ExtraNodesetGenerator
new_boundary = '100'
nodes = '4 10'
input = gen
[]
[corner_node_2]
type = ExtraNodesetGenerator
new_boundary = '101'
nodes = '1 67'
input = corner_node
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[stress_yy]
order = CONSTANT
family = MONOMIAL
[]
[elastic_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[plasticity_strain_xx]
type = ADRankTwoAux
rank_two_tensor = trial_plasticity_plastic_strain
variable = plastic_strain_xx
index_i = 0
index_j = 0
[]
[plasticity_strain_xy]
type = ADRankTwoAux
rank_two_tensor = trial_plasticity_plastic_strain
variable = plastic_strain_xy
index_i = 0
index_j = 1
[]
[plasticity_strain_yy]
type = ADRankTwoAux
rank_two_tensor = trial_plasticity_plastic_strain
variable = plastic_strain_yy
index_i = 1
index_j = 1
[]
[elastic_strain_yy]
type = ADRankTwoAux
rank_two_tensor = elastic_strain
variable = elastic_strain_yy
index_i = 1
index_j = 1
[]
[sigma_yy]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1e1 1e8'
y = '0 -4e2 -4e2'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 70000
poissons_ratio = 0.25
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_plasticity"
max_iterations = 50
absolute_tolerance = 1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5829856 0.364424 0.6342174 2.0691375 2.3492325 1.814589"
base_name = trial_plasticity
[]
[trial_plasticity]
type = ADHillPlasticityStressUpdate
hardening_constant = 2000.0
yield_stress = 0.001
absolute_tolerance = 1e-14
relative_tolerance = 1e-12
base_name = trial_plasticity
internal_solve_full_iteration_history = true
max_inelastic_increment = 2.0e-6
internal_solve_output_on = on_error
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = 101
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = 100
value = 0.0
[]
[Pressure]
[Side1]
boundary = top
function = pull
[]
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-11
nl_abs_tol = 1.0e-14
l_max_its = 90
num_steps = 25
[TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 30
iteration_window = 9
growth_factor = 1.05
cutback_factor = 0.5
timestep_limiting_postprocessor = matl_ts_min
dt = 1e-5
time_t = '0 3.2e-5 10'
time_dt = '1e-5 1.0e-7 1.0e-7'
[]
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[plasticity_strain_yy]
type = ElementalVariableValue
variable = plastic_strain_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[elastic_strain_yy]
type = ElementalVariableValue
variable = elastic_strain_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[sigma_yy]
type = ElementalVariableValue
variable = stress_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[]
[Outputs]
csv = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/aniso_creep_x_3d.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 10
ny = 2
nz = 2
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 10.0
ymax = 1.0
zmax = 1.0
[]
[corner_node]
type = ExtraNodesetGenerator
new_boundary = '100'
nodes = '3 69'
input = gen
[]
[corner_node_2]
type = ExtraNodesetGenerator
new_boundary = '101'
nodes = '4 47'
input = corner_node
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = RankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[creep_strain_xx]
type = RankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xx
index_i = 0
index_j = 0
[]
[creep_strain_xy]
type = RankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xy
index_i = 0
index_j = 1
[]
[creep_strain_yy]
type = RankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yy
index_i = 1
index_j = 1
[]
[sigma_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 1
index_j = 1
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1.0e-9 1.0'
y = '0 -4e1 -4e1'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_xx stress_xx'
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 700
poissons_ratio = 0.0
[]
[elastic_strain]
type = ComputeMultipleInelasticStress
inelastic_models = "trial_creep_two"
max_iterations = 50
absolute_tolerance = 1e-16
[]
[hill_tensor]
type = HillConstants
# F G H L M N
hill_constants = "0.5 0.25 0.3866 1.6413 1.6413 1.2731"
[]
[trial_creep_two]
type = HillCreepStressUpdate
coefficient = 1e-16
n_exponent = 9
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 0.00003
absolute_tolerance = 1e-20
relative_tolerance = 1e-20
# Force it to not use integration error
max_integration_error = 100.0
[]
[]
[BCs]
[no_disp_x]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = DirichletBC
variable = disp_y
boundary = 100
value = 0.0
[]
[no_disp_z]
type = DirichletBC
variable = disp_z
boundary = 101
value = 0.0
[]
[Pressure]
[Side1]
boundary = right
function = pull
[]
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package -mat_mffd_err'
petsc_options_value = 'lu superlu_dist 1e-5'
nl_rel_tol = 1.0e-14
nl_abs_tol = 1.0e-14
l_max_its = 10
num_steps = 10
dt = 1.0e-4
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[creep_strain_xx]
type = ElementalVariableValue
variable = creep_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[elastic_strain_xx]
type = ElementalVariableValue
variable = elastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[sigma_xx]
type = ElementalVariableValue
variable = stress_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[]
[Outputs]
csv = true
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_integration_error.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 10
ny = 2
nz = 2
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 10.0
ymax = 1.0
zmax = 1.0
[]
[corner_node]
type = ExtraNodesetGenerator
new_boundary = '100'
nodes = '3 69'
input = gen
[]
[corner_node_2]
type = ExtraNodesetGenerator
new_boundary = '101'
nodes = '4 47'
input = corner_node
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[creep_strain_xx]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xx
index_i = 0
index_j = 0
[]
[creep_strain_xy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xy
index_i = 0
index_j = 1
[]
[creep_strain_yy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yy
index_i = 1
index_j = 1
[]
[sigma_xx]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 1
index_j = 1
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1.0'
y = '0 -4e1'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_xx stress_xx'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 7000
poissons_ratio = 0.0
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_creep_two"
max_iterations = 50
absolute_tolerance = 1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5 0.25 0.3866 1.6413 1.6413 1.2731"
[]
[trial_creep_two]
type = ADHillCreepStressUpdate
coefficient = 1e-16
n_exponent = 9
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 1.0e-4
absolute_tolerance = 1e-20
relative_tolerance = 1e-20
max_integration_error = 1.0e-5
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = 100
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = 101
value = 0.0
[]
[Pressure]
[Side1]
boundary = right
function = pull
[]
[]
[]
[UserObjects]
[terminator_creep]
type = Terminator
expression = 'time_step_size > matl_ts_min'
fail_mode = SOFT
execute_on = TIMESTEP_END
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1.0e-13
nl_abs_tol = 1.0e-13
l_max_its = 10
end_time = 1.65e-1
dt = 2.5e-2
start_time = 0
automatic_scaling = true
[./TimeStepper]
type = IterationAdaptiveDT
dt = 2.5e-2
time_t = '0.0 10.0'
time_dt = '2.5e-2 2.5e-2 '
optimal_iterations = 30
iteration_window = 9
growth_factor = 1.5
cutback_factor = 0.5
timestep_limiting_postprocessor = matl_ts_min
[../]
[]
[Postprocessors]
[time_step_size]
type = TimestepSize
[]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[creep_strain_xx]
type = ElementalVariableValue
variable = creep_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[elastic_strain_xx]
type = ElementalVariableValue
variable = elastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[sigma_xx]
type = ElementalVariableValue
variable = stress_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[]
[Outputs]
csv = true
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/aniso_iso_creep_x_3d.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 10
ny = 2
nz = 2
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 10.0
ymax = 1.0
zmax = 1.0
[]
[corner_node]
type = ExtraNodesetGenerator
new_boundary = '100'
nodes = '3 69'
input = gen
[]
[corner_node_2]
type = ExtraNodesetGenerator
new_boundary = '101'
nodes = '4 47'
input = corner_node
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xz]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yz]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = RankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[creep_strain_xx]
type = RankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xx
index_i = 0
index_j = 0
[]
[creep_strain_xy]
type = RankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xy
index_i = 0
index_j = 1
[]
[creep_strain_yy]
type = RankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yy
index_i = 1
index_j = 1
[]
[creep_strain_zz]
type = RankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_zz
index_i = 2
index_j = 2
[]
[creep_strain_xz]
type = RankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xz
index_i = 0
index_j = 2
[]
[creep_strain_yz]
type = RankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yz
index_i = 1
index_j = 2
[]
[sigma_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 1
index_j = 1
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1.0e-9 1.0'
y = '0 -4e1 -4e1'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_xx stress_xx'
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 700
poissons_ratio = 0.0
[]
[elastic_strain]
type = ComputeMultipleInelasticStress
# inelastic_models = 'trial_creep_iso'
max_iterations = 50
[]
[hill_tensor]
type = HillConstants
# F G H L M N
hill_constants = "0.5 0.5 0.5 1.5 1.5 1.5"
[]
[trial_creep_aniso_iso]
type = HillCreepStressUpdate
coefficient = 1e-16
n_exponent = 9
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 0.00003
relative_tolerance = 1e-20
absolute_tolerance = 1e-20
internal_solve_output_on = never
# Force it to not use integration error
max_integration_error = 1.0
[]
[trial_creep_iso]
type = PowerLawCreepStressUpdate
coefficient = 1e-16
n_exponent = 9
m_exponent = 0
activation_energy = 0
# F G H L M N
max_inelastic_increment = 0.00003
relative_tolerance = 1e-16
absolute_tolerance = 1e-16
internal_solve_output_on = never
[]
[]
[BCs]
[no_disp_x]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = DirichletBC
variable = disp_y
boundary = 100
value = 0.0
[]
[no_disp_z]
type = DirichletBC
variable = disp_z
boundary = 101
value = 0.0
[]
[Pressure]
[Side1]
boundary = right
function = pull
[]
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-13
nl_abs_tol = 1.0e-14
l_max_its = 90
num_steps = 10
dt = 5.0e-4
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[creep_strain_xx]
type = ElementalVariableValue
variable = creep_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_yy]
type = ElementalVariableValue
variable = creep_strain_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_zz]
type = ElementalVariableValue
variable = creep_strain_zz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_xy]
type = ElementalVariableValue
variable = creep_strain_xy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_yz]
type = ElementalVariableValue
variable = creep_strain_yz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_xz]
type = ElementalVariableValue
variable = creep_strain_xz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[elastic_strain_xx]
type = ElementalVariableValue
variable = elastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[sigma_xx]
type = ElementalVariableValue
variable = stress_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[]
[Outputs]
csv = true
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_iso_creep_x_3d.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 10
ny = 2
nz = 2
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 10.0
ymax = 1.0
zmax = 1.0
[]
[corner_node]
type = ExtraNodesetGenerator
new_boundary = '100'
nodes = '3 69'
input = gen
[]
[corner_node_2]
type = ExtraNodesetGenerator
new_boundary = '101'
nodes = '4 47'
input = corner_node
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xz]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yz]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[creep_strain_xx]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xx
index_i = 0
index_j = 0
[]
[creep_strain_xy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xy
index_i = 0
index_j = 1
[]
[creep_strain_yy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yy
index_i = 1
index_j = 1
[]
[creep_strain_zz]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_zz
index_i = 2
index_j = 2
[]
[creep_strain_xz]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xz
index_i = 0
index_j = 2
[]
[creep_strain_yz]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yz
index_i = 1
index_j = 2
[]
[sigma_xx]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 1
index_j = 1
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1.0e-9 1.0'
y = '0 -4e1 -4e1'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_xx stress_xx'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 700
poissons_ratio = 0.0
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
# inelastic_models = 'trial_creep_iso'
max_iterations = 50
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5 0.5 0.5 1.5 1.5 1.5"
[]
[trial_creep_aniso_iso]
type = ADHillCreepStressUpdate
coefficient = 1e-16
n_exponent = 9
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 0.00003
relative_tolerance = 1e-20
absolute_tolerance = 1e-20
internal_solve_output_on = never
# Force it to not use integration error
max_integration_error = 1.0
[]
[trial_creep_iso]
type = ADPowerLawCreepStressUpdate
coefficient = 1e-16
n_exponent = 9
m_exponent = 0
activation_energy = 0
# F G H L M N
max_inelastic_increment = 0.00003
relative_tolerance = 1e-16
absolute_tolerance = 1e-16
internal_solve_output_on = never
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = 100
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = 101
value = 0.0
[]
[Pressure]
[Side1]
boundary = right
function = pull
[]
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-13
nl_abs_tol = 1.0e-14
l_max_its = 90
num_steps = 10
dt = 5.0e-4
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[creep_strain_xx]
type = ElementalVariableValue
variable = creep_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_yy]
type = ElementalVariableValue
variable = creep_strain_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_zz]
type = ElementalVariableValue
variable = creep_strain_zz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_xy]
type = ElementalVariableValue
variable = creep_strain_xy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_yz]
type = ElementalVariableValue
variable = creep_strain_yz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_xz]
type = ElementalVariableValue
variable = creep_strain_xz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[elastic_strain_xx]
type = ElementalVariableValue
variable = elastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[sigma_xx]
type = ElementalVariableValue
variable = stress_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[]
[Outputs]
csv = true
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/anisotropic_elastoplasticity/hoop_strain_comparison.i)
# This test compares the hoop strain at two different elements in an internally
# pressurized cylinder with anisotropic plasticity: different yield condition
# for hoop and axial directions. The elements are located circumferentially
# apart but at same axial position. It is expected that due to pressurization
# hoop strains will develop with uniform magnitude along hoop direction. The
# test verifies that the plastic hoop strain is uniform in hoop direction.
# For 3D simulations with material properties oriented along the curved
# geometry such as cylinder or sphere, the stresses and strains are rotated to
# the local coordinate system from the global coordinate system. The plastic
# strain is calculated in the local coordinate system and then transformed to
# the global coordinate system. This test involves a 3D cylindrical geometry,
# and helps in indirectly verifying that this transformation of stresses and
# strains back and forth between the local and global coordinate system is
# correctly implemented.
[Mesh]
file = quarter_cylinder.e
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[stress_zz]
order = CONSTANT
family = MONOMIAL
[]
[stress_xx]
order = CONSTANT
family = MONOMIAL
[]
[stress_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[plasticity_strain_xx]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_xx
index_i = 0
index_j = 0
[]
[plasticity_strain_xy]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_xy
index_i = 0
index_j = 1
[]
[plasticity_strain_yy]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_yy
index_i = 1
index_j = 1
[]
[plasticity_strain_zz]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_zz
index_i = 2
index_j = 2
[]
[stress_zz]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[]
[stress_xx]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[]
[stress_yy]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[]
[]
[Functions]
[push]
type = PiecewiseLinear
x = '0 1e2'
y = '0 200e6'
[]
[swelling_func]
type = ParsedFunction
expression = 0
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_zz elastic_strain_xx elastic_strain_yy stress_xx stress_yy stress_zz strain_zz plastic_strain_zz plastic_strain_xx plastic_strain_yy hoop_stress hoop_strain'
use_automatic_differentiation = true
add_variables = true
cylindrical_axis_point1 = '0 0 0'
cylindrical_axis_point2 = '0 1 0'
[]
[]
[Constraints]
[mid_section_plane]
type = EqualValueBoundaryConstraint
variable = disp_y
secondary = top # boundary
penalty = 1.0e+10
[]
[]
[Materials]
[swelling]
type = ADGenericFunctionMaterial
prop_values = swelling_func
prop_names = swelling
[]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 200.0e9
poissons_ratio = 0.2
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "plasticity"
max_iterations = 50
absolute_tolerance = 1e-30 #1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
# hill_constants = "0.5 0.5 0.5 1.5 1.5 1.5"
hill_constants = "0.5 0.25 0.5 1.5 1.5 1.5"
[]
[plasticity]
type = ADHillElastoPlasticityStressUpdate
hardening_constant = 1.5e10
hardening_exponent = 1.0
yield_stress = 0.0 # 60e6
local_cylindrical_csys = true
# local_spherical_csys = false
axis = y
absolute_tolerance = 1e-15 # 1e-8
relative_tolerance = 1e-13 # 1e-15
internal_solve_full_iteration_history = true
max_inelastic_increment = 2.0e-6
internal_solve_output_on = on_error
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = x_face
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = z_face
value = 0.0
[]
[Pressure]
[Side1]
boundary = inner
function = push
[]
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-12
nl_abs_tol = 1e-14
# nl_abs_tol = 1e-10
l_max_its = 90
nl_max_its = 30
[TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 30
iteration_window = 9
growth_factor = 1.05
cutback_factor = 0.5
timestep_limiting_postprocessor = matl_ts_min
dt = 0.1e-4
time_t = '0 6.23 10'
time_dt = '0.1 1.0e-2 1.0e-2'
[]
num_steps = 3
start_time = 0
end_time = 200.0
automatic_scaling = true
dtmax = 0.1e-4
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[hoop_strain_elementA]
type = ElementalVariableValue
elementid = 464
variable = hoop_strain
[]
[hoop_strain_elementB]
type = ElementalVariableValue
elementid = 478
variable = hoop_strain
[]
[hoop_strain_diff]
type = DifferencePostprocessor
value1 = hoop_strain_elementA
value2 = hoop_strain_elementB
[]
[]
[Outputs]
csv = true
exodus = false
perf_graph = 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/anisotropic_elastoplasticity/ad_uniaxial_x.i)
# This test simulates uniaxial tensile loading in x-direction.
# The slope of the stress vs. plastic strain is evaluated from
# the simulation and compared with the value calculated using
# the analytical expression. This test uses a material with li-
# near strain hardening.
# For uniaxial tensile loading in y-direction, the slope of the
# stress vs. plastic strain is (2K / (G + H)) where K is the ha-
# rdening constant, and G & H are the Hill's constant. For deta-
# ils on the derivation of the expression for slope please refer
# the documentation of this material.
# Slope obtained from this MOOSE test simulation:
# = 1.791 x 10^9
# Slope obtained from analytical expression:
# = 2 x 10^9 / (0.4 + 0.7) = 1.818 x 10^9
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[sigma_xx]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[plasticity_strain_xx]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_xx
index_i = 0
index_j = 0
[]
[plasticity_strain_xy]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_xy
index_i = 0
index_j = 1
[]
[plasticity_strain_yy]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_yy
index_i = 1
index_j = 1
[]
[sigma_xx]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1e1'
y = '0 -2e8'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_xx stress_xx strain_xx plastic_strain_xx'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeElasticityTensor
fill_method = orthotropic
C_ijkl = '10.0e10 15.0e10 20.0e10 2.0e10 2.0e10 2.0e10 0.2 0.2 0.2 0.13333333333333333 0.1 0.15'
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_plasticity"
max_iterations = 50
absolute_tolerance = 1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.6 0.4 0.7 1.5 1.5 1.5"
[]
[trial_plasticity]
type = ADHillElastoPlasticityStressUpdate
hardening_constant = 10e9
yield_stress = 60e6
absolute_tolerance = 1e-15 # 1e-8
relative_tolerance = 1e-13 # 1e-15
# internal_solve_full_iteration_history = true
max_inelastic_increment = 2.0e-5
# internal_solve_output_on = on_error
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = back
value = 0.0
[]
[Pressure]
[Side1]
boundary = right
function = pull
[]
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-12
nl_abs_tol = 1.0e-14
l_max_its = 90
[TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 30
iteration_window = 9
growth_factor = 1.05
cutback_factor = 0.5
timestep_limiting_postprocessor = matl_ts_min
dt = 0.1
time_t = '0 2.5 10'
time_dt = '0.1 1.0e-2 1.0e-2'
[]
start_time = 0
end_time = 10.0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[plasticity_strain_xx]
type = ElementalVariableValue
variable = plastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 0
[]
[elastic_strain_xx]
type = ElementalVariableValue
variable = elastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 0
[]
[strain_xx]
type = ElementalVariableValue
variable = strain_xx
execute_on = 'TIMESTEP_END'
elementid = 0
[]
[sigma_xx]
type = ElementalVariableValue
variable = stress_xx
execute_on = 'TIMESTEP_END'
elementid = 0
[]
[]
[Outputs]
csv = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_temperature_coefficients_function_variation.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 10
ny = 2
nz = 2
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 10.0
ymax = 1.0
zmax = 1.0
[]
[corner_node]
type = ExtraNodesetGenerator
new_boundary = '100'
nodes = '3 69'
input = gen
[]
[corner_node_2]
type = ExtraNodesetGenerator
new_boundary = '101'
nodes = '4 47'
input = corner_node
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[temperature]
order = CONSTANT
family = MONOMIAL
[]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xz]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yz]
order = CONSTANT
family = MONOMIAL
[]
[hill_constants_f]
order = CONSTANT
family = MONOMIAL
[]
[hill_constants_g]
order = CONSTANT
family = MONOMIAL
[]
[hill_constants_h]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[temperature]
type = FunctionAux
variable = temperature
function = time_temperature
[]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[creep_strain_xx]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xx
index_i = 0
index_j = 0
[]
[creep_strain_xy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xy
index_i = 0
index_j = 1
[]
[creep_strain_yy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yy
index_i = 1
index_j = 1
[]
[creep_strain_zz]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_zz
index_i = 2
index_j = 2
[]
[creep_strain_xz]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xz
index_i = 0
index_j = 2
[]
[creep_strain_yz]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yz
index_i = 1
index_j = 2
[]
[sigma_xx]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 1
index_j = 1
[]
[hill_constant_f]
type = MaterialStdVectorAux
property = hill_constants
variable = hill_constants_f
index = 0
[]
[hill_constant_g]
type = MaterialStdVectorAux
property = hill_constants
variable = hill_constants_g
index = 1
[]
[hill_constant_h]
type = MaterialStdVectorAux
property = hill_constants
variable = hill_constants_h
index = 2
[]
[]
[ICs]
[temp]
type = ConstantIC
variable = temperature
value = 50.0
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1.0e-9 1.0'
y = '0 -4e1 -4e1'
[]
[F]
type = PiecewiseLinear
x = '50 200'
y = '0.2 0.5'
[]
[G]
type = PiecewiseLinear
x = '50 200'
y = '0.9 0.6'
[]
[H]
type = PiecewiseLinear
x = '50 200'
y = '0.5 0.3'
[]
[L]
type = PiecewiseLinear
x = '50 200'
y = '1.5 1.5'
[]
[M]
type = PiecewiseLinear
x = '50 200'
y = '1.5 1.5'
[]
[N]
type = PiecewiseLinear
x = '50 200'
y = '1.5 1.5'
[]
[time_temperature]
type = PiecewiseLinear
x = '0 1.0e-2'
y = '50 200'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_xx stress_xx'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 700
poissons_ratio = 0.0
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = 'trial_creep_aniso_iso'
max_iterations = 50
[]
[hill_constants]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5 0.5 0.5 1.5 1.5 1.5"
function_names = 'F G H L M N'
temperature = temperature
[]
[trial_creep_aniso_iso]
type = ADHillCreepStressUpdate
coefficient = 1e-16
n_exponent = 9
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 0.00003
relative_tolerance = 1e-20
absolute_tolerance = 1e-20
internal_solve_output_on = never
# Force it to not use integration error
max_integration_error = 1.0
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = 100
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = 101
value = 0.0
[]
[Pressure]
[Side1]
boundary = right
function = pull
[]
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-13
nl_abs_tol = 1.0e-14
l_max_its = 90
num_steps = 20
dt = 5.0e-4
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[creep_strain_xx]
type = ElementalVariableValue
variable = creep_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_yy]
type = ElementalVariableValue
variable = creep_strain_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_zz]
type = ElementalVariableValue
variable = creep_strain_zz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_xy]
type = ElementalVariableValue
variable = creep_strain_xy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_yz]
type = ElementalVariableValue
variable = creep_strain_yz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_xz]
type = ElementalVariableValue
variable = creep_strain_xz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[elastic_strain_xx]
type = ElementalVariableValue
variable = elastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[sigma_xx]
type = ElementalVariableValue
variable = stress_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[]
[Outputs]
csv = true
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/anisotropic_elastoplasticity/hoop_strain_comparison_coarse_yaxis.i)
# This test compares the hoop strain at two different elements in an internally
# pressurized cylinder with anisotropic plasticity: different yield condition
# for hoop and axial directions. The elements are located circumferentially
# apart but at same axial position. It is expected that due to pressurization
# hoop strains will develop with uniform magnitude along hoop direction. The
# test verifies that the plastic hoop strain is uniform in hoop direction.
# For 3D simulations with material properties oriented along the curved
# geometry such as cylinder or sphere, the stresses and strains are rotated to
# the local coordinate system from the global coordinate system. The plastic
# strain is calculated in the local coordinate system and then transformed to
# the global coordinate system. This test involves a 3D cylindrical geometry,
# and helps in indirectly verifying that this transformation of stresses and
# strains back and forth between the local and global coordinate system is
# correctly implemented.
[Mesh]
file = quarter_cylinder_coarse_yaxis.e
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[stress_zz]
order = CONSTANT
family = MONOMIAL
[]
[stress_xx]
order = CONSTANT
family = MONOMIAL
[]
[stress_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[plasticity_strain_xx]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_xx
index_i = 0
index_j = 0
[]
[plasticity_strain_xy]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_xy
index_i = 0
index_j = 1
[]
[plasticity_strain_yy]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_yy
index_i = 1
index_j = 1
[]
[plasticity_strain_zz]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_zz
index_i = 2
index_j = 2
[]
[stress_zz]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[]
[stress_xx]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[]
[stress_yy]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[]
[]
[Functions]
[push]
type = PiecewiseLinear
x = '0 1e2'
y = '0 200e6'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_zz elastic_strain_xx elastic_strain_yy stress_xx stress_yy stress_zz strain_zz plastic_strain_zz plastic_strain_xx plastic_strain_yy hoop_stress hoop_strain'
use_automatic_differentiation = true
add_variables = true
cylindrical_axis_point1 = '0 0 0'
cylindrical_axis_point2 = '0 1 0'
[]
[]
[Constraints]
[mid_section_plane]
type = EqualValueBoundaryConstraint
variable = disp_y
secondary = top # boundary
penalty = 1.0e+10
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 200.0e9
poissons_ratio = 0.2
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "plasticity"
max_iterations = 50
absolute_tolerance = 1e-30 #1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
# hill_constants = "0.5 0.5 0.5 1.5 1.5 1.5"
hill_constants = "0.5 0.25 0.5 1.5 1.5 1.5"
[]
[plasticity]
type = ADHillElastoPlasticityStressUpdate
hardening_constant = 1.5e10
hardening_exponent = 1.0
yield_stress = 0.0 # 60e6
local_cylindrical_csys = true
axis = y
absolute_tolerance = 1e-15 # 1e-8
relative_tolerance = 1e-13 # 1e-15
internal_solve_full_iteration_history = true
max_inelastic_increment = 2.0e-6
internal_solve_output_on = on_error
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = x_face
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = z_face
value = 0.0
[]
[Pressure]
[Side1]
boundary = inner
function = push
[]
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-12
nl_abs_tol = 1e-14
# nl_abs_tol = 1e-10
l_max_its = 90
nl_max_its = 30
[TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 30
iteration_window = 9
growth_factor = 1.05
cutback_factor = 0.5
timestep_limiting_postprocessor = matl_ts_min
dt = 0.1e-4
time_t = '0 6.23 10'
time_dt = '0.1 1.0e-2 1.0e-2'
[]
num_steps = 1
start_time = 0
end_time = 200.0
automatic_scaling = true
dtmax = 0.1e-4
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[hoop_strain_elementA]
type = ElementalVariableValue
elementid = 10
variable = hoop_strain
[]
[hoop_strain_elementB]
type = ElementalVariableValue
elementid = 4
variable = hoop_strain
[]
[hoop_strain_diff]
type = DifferencePostprocessor
value1 = hoop_strain_elementA
value2 = hoop_strain_elementB
[]
[]
[Outputs]
csv = true
exodus = false
perf_graph = true
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_temperature_coefficients_function.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 10
ny = 2
nz = 2
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 10.0
ymax = 1.0
zmax = 1.0
[]
[corner_node]
type = ExtraNodesetGenerator
new_boundary = '100'
nodes = '3 69'
input = gen
[]
[corner_node_2]
type = ExtraNodesetGenerator
new_boundary = '101'
nodes = '4 47'
input = corner_node
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[temperature]
order = CONSTANT
family = MONOMIAL
[]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xz]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yz]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[temperature]
type = ConstantAux
variable = temperature
value = 50
[]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[creep_strain_xx]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xx
index_i = 0
index_j = 0
[]
[creep_strain_xy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xy
index_i = 0
index_j = 1
[]
[creep_strain_yy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yy
index_i = 1
index_j = 1
[]
[creep_strain_zz]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_zz
index_i = 2
index_j = 2
[]
[creep_strain_xz]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xz
index_i = 0
index_j = 2
[]
[creep_strain_yz]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yz
index_i = 1
index_j = 2
[]
[sigma_xx]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 1
index_j = 1
[]
[]
[ICs]
[temp]
type = ConstantIC
variable = temperature
value = 50.0
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1.0e-9 1.0'
y = '0 -4e1 -4e1'
[]
[F]
type = PiecewiseLinear
x = '-1000 10000'
y = '0.5 0.5'
[]
[G]
type = PiecewiseLinear
x = '-1000 10000'
y = '0.5 0.5'
[]
[H]
type = PiecewiseLinear
x = '-1000 10000'
y = '0.5 0.5'
[]
[L]
type = PiecewiseLinear
x = '-1000 10000'
y = '1.5 1.5'
[]
[M]
type = PiecewiseLinear
x = '-1000 10000'
y = '1.5 1.5'
[]
[N]
type = PiecewiseLinear
x = '-1000 10000'
y = '1.5 1.5'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_xx stress_xx'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 700
poissons_ratio = 0.0
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = 'trial_creep_aniso_iso'
max_iterations = 50
[]
[hill_constants]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5 0.5 0.5 1.5 1.5 1.5"
function_names = 'F G H L M N'
temperature = temperature
[]
[trial_creep_aniso_iso]
type = ADHillCreepStressUpdate
coefficient = 1e-16
n_exponent = 9
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 0.00003
relative_tolerance = 1e-20
absolute_tolerance = 1e-20
internal_solve_output_on = never
# Force it to not use integration error
max_integration_error = 1.0
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = 100
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = 101
value = 0.0
[]
[Pressure]
[Side1]
boundary = right
function = pull
[]
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-13
nl_abs_tol = 1.0e-14
l_max_its = 90
num_steps = 50
dt = 5.0e-4
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[creep_strain_xx]
type = ElementalVariableValue
variable = creep_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_yy]
type = ElementalVariableValue
variable = creep_strain_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_zz]
type = ElementalVariableValue
variable = creep_strain_zz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_xy]
type = ElementalVariableValue
variable = creep_strain_xy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_yz]
type = ElementalVariableValue
variable = creep_strain_yz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_xz]
type = ElementalVariableValue
variable = creep_strain_xz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[elastic_strain_xx]
type = ElementalVariableValue
variable = elastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[sigma_xx]
type = ElementalVariableValue
variable = stress_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[]
[Outputs]
csv = true
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_x_3d.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 10
ny = 2
nz = 2
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 10.0
ymax = 1.0
zmax = 1.0
[]
[corner_node]
type = ExtraNodesetGenerator
new_boundary = '100'
nodes = '3 69'
input = gen
[]
[corner_node_2]
type = ExtraNodesetGenerator
new_boundary = '101'
nodes = '4 47'
input = corner_node
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[creep_strain_xx]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xx
index_i = 0
index_j = 0
[]
[creep_strain_xy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xy
index_i = 0
index_j = 1
[]
[creep_strain_yy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yy
index_i = 1
index_j = 1
[]
[sigma_xx]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 1
index_j = 1
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1.0e-9 1.0'
y = '0 -4e1 -4e1'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_xx stress_xx'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 700
poissons_ratio = 0.0
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_creep_two"
max_iterations = 50
absolute_tolerance = 1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5 0.25 0.3866 1.6413 1.6413 1.2731"
[]
[trial_creep_two]
type = ADHillCreepStressUpdate
coefficient = 1e-16
n_exponent = 9
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 0.00003
absolute_tolerance = 1e-20
relative_tolerance = 1e-20
# Force it to not use integration error
max_integration_error = 100.0
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = 100
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = 101
value = 0.0
[]
[Pressure]
[Side1]
boundary = right
function = pull
[]
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package -mat_mffd_err'
petsc_options_value = 'lu superlu_dist 1e-5'
nl_rel_tol = 1.0e-14
nl_abs_tol = 1.0e-14
l_max_its = 10
num_steps = 10
dt = 1.0e-4
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[creep_strain_xx]
type = ElementalVariableValue
variable = creep_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[elastic_strain_xx]
type = ElementalVariableValue
variable = elastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[sigma_xx]
type = ElementalVariableValue
variable = stress_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[]
[Outputs]
csv = true
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/aniso_creep_integration_error.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 10
ny = 2
nz = 2
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 10.0
ymax = 1.0
zmax = 1.0
[]
[corner_node]
type = ExtraNodesetGenerator
new_boundary = '100'
nodes = '3 69'
input = gen
[]
[corner_node_2]
type = ExtraNodesetGenerator
new_boundary = '101'
nodes = '4 47'
input = corner_node
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = RankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[creep_strain_xx]
type = RankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xx
index_i = 0
index_j = 0
[]
[creep_strain_xy]
type = RankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xy
index_i = 0
index_j = 1
[]
[creep_strain_yy]
type = RankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yy
index_i = 1
index_j = 1
[]
[sigma_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 1
index_j = 1
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1.0'
y = '0 -4e1'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_xx stress_xx'
use_automatic_differentiation = false
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 7000
poissons_ratio = 0.0
[]
[elastic_strain]
type = ComputeMultipleInelasticStress
inelastic_models = "trial_creep_two"
max_iterations = 50
absolute_tolerance = 1e-16
[]
[hill_tensor]
type = HillConstants
# F G H L M N
hill_constants = "0.5 0.25 0.3866 1.6413 1.6413 1.2731"
[]
[trial_creep_two]
type = HillCreepStressUpdate
coefficient = 1e-16
n_exponent = 9
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 1.0e-4
absolute_tolerance = 1e-20
relative_tolerance = 1e-20
max_integration_error = 1.0e-5
[]
[]
[BCs]
[no_disp_x]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = DirichletBC
variable = disp_y
boundary = 100
value = 0.0
[]
[no_disp_z]
type = DirichletBC
variable = disp_z
boundary = 101
value = 0.0
[]
[Pressure]
[Side1]
boundary = right
function = pull
[]
[]
[]
[UserObjects]
[terminator_creep]
type = Terminator
expression = 'time_step_size > matl_ts_min'
fail_mode = SOFT
execute_on = TIMESTEP_END
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1.0e-13
nl_abs_tol = 1.0e-13
l_max_its = 10
end_time = 1.65e-1
dt = 2.5e-2
start_time = 0
automatic_scaling = true
[./TimeStepper]
type = IterationAdaptiveDT
dt = 2.5e-2
time_t = '0.0 10.0'
time_dt = '2.5e-2 2.5e-2 '
optimal_iterations = 30
iteration_window = 9
growth_factor = 1.5
cutback_factor = 0.5
timestep_limiting_postprocessor = matl_ts_min
[../]
[]
[Postprocessors]
[time_step_size]
type = TimestepSize
[]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[creep_strain_xx]
type = ElementalVariableValue
variable = creep_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[elastic_strain_xx]
type = ElementalVariableValue
variable = elastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[sigma_xx]
type = ElementalVariableValue
variable = stress_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[]
[Outputs]
csv = true
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/anisotropic_elastoplasticity/ad_aniso_plasticity_x_one_ref.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 10
ny = 2
nz = 2
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 10.0
ymax = 1.0
zmax = 1.0
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[plasticity_strain_xx]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_xx
index_i = 0
index_j = 0
[]
[plasticity_strain_xy]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_xy
index_i = 0
index_j = 1
[]
[plasticity_strain_yy]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_yy
index_i = 1
index_j = 1
[]
[sigma_xx]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 1
index_j = 1
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1e1 1e8'
y = '0 -4e2 -4e2'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_xx stress_xx'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 70000
poissons_ratio = 0.25
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_plasticity"
max_iterations = 50
absolute_tolerance = 1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5829856 0.364424 0.6342174 2.0691375 2.3492325 1.814589"
[]
[trial_plasticity]
type = ADHillPlasticityStressUpdate
hardening_constant = 2000.0
yield_stress = 0.001 # was 200 for verification
absolute_tolerance = 1e-15
relative_tolerance = 1e-13
# internal_solve_full_iteration_history = true
max_inelastic_increment = 2.0e-6
# internal_solve_output_on = on_error
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = left
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = left
value = 0.0
[]
[Pressure]
[Side1]
boundary = right
function = pull
[]
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-12
nl_abs_tol = 1.0e-14
l_max_its = 90
num_steps = 25
[TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 30
iteration_window = 9
growth_factor = 1.05
cutback_factor = 0.5
timestep_limiting_postprocessor = matl_ts_min
dt = 1.0e-5
time_t = '0 3.4e-5 10'
time_dt = '1.0e-5 1.0e-7 1.0e-7'
[]
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[plasticity_strain_xx]
type = ElementalVariableValue
variable = plastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 0
[]
[elastic_strain_xx]
type = ElementalVariableValue
variable = elastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 0
[]
[sigma_xx]
type = ElementalVariableValue
variable = stress_xx
execute_on = 'TIMESTEP_END'
elementid = 0
[]
[]
[Outputs]
csv = true
perf_graph = true
[]
(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/ad_anisotropic_creep/anis_mech_hill_tensor_creep_small_tiny_step_ts_limit_test.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 2
ny = 2
second_order = true
[]
[GlobalParams]
displacements = 'disp_x disp_y'
volumetric_locking_correction = false
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
add_variables = true
incremental = true
generate_output = 'elastic_strain_xx elastic_strain_yy elastic_strain_xy stress_xx stress_xy '
'stress_yy'
use_automatic_differentiation = true
[]
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[Variables]
[disp_x]
order = SECOND
[]
[disp_y]
order = SECOND
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[creep_strain_xx]
type = ADRankTwoAux
rank_two_tensor = trial_creep_creep_strain
variable = creep_strain_xx
index_i = 0
index_j = 0
[]
[creep_strain_xy]
type = ADRankTwoAux
rank_two_tensor = trial_creep_creep_strain
variable = creep_strain_xy
index_i = 0
index_j = 1
[]
[creep_strain_yy]
type = ADRankTwoAux
rank_two_tensor = trial_creep_creep_strain
variable = creep_strain_yy
index_i = 1
index_j = 1
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1e3 1e8'
y = '0 1e2 1e2'
[]
[]
[Materials]
# Supplying elasticity tensor three times with different base_name
[elasticity_tensor_three]
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'
[]
[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'
base_name = trial_creep
[]
[elasticity_tensor_two]
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'
base_name = trial_creep_two
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_creep trial_creep_two"
max_iterations = 5
absolute_tolerance = 1e-05
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5 0.5 0.3866 1.6413 1.6413 1.2731"
base_name = trial_creep
[]
[trial_creep]
type = ADHillCreepStressUpdate
coefficient = 3e-18
n_exponent = 5
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 1.0e-5
base_name = trial_creep
# Force it to not use integration error
max_integration_error = 1.0
[]
[hill_tensor_two]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5 0.5 0.3866 1.6413 1.6413 1.2731"
base_name = trial_creep_two
[]
[trial_creep_two]
type = ADHillCreepStressUpdate
coefficient = 3e-18
n_exponent = 5
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 1.0e-5
base_name = trial_creep_two
# Force it to not use integration error
max_integration_error = 1.0
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = bottom
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[Pressure]
[Side1]
boundary = top
function = pull
[]
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-ksp_gmres_restart -pc_type -sub_pc_type'
petsc_options_value = '101 asm lu'
line_search = 'none'
nl_rel_tol = 1e-10
nl_abs_tol = 1.0e-14
l_max_its = 90
num_steps = 7
start_time = 0
automatic_scaling = true
[TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 30
iteration_window = 9
growth_factor = 2.0
cutback_factor = 0.5
timestep_limiting_postprocessor = matl_ts_min
dt = 5.0e1
[]
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[]
[Outputs]
csv = true
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_x_3d_anisoElasticity.i)
# This test simulates uniaxial tensile test with the material being anisotropic
# in terms of elasticity and creep.
#
# -------------------
# ANALYTICAL SOLUTION
# -------------------
# https://mooseframework.inl.gov/source/materials/HillCreepStressUpdate.html
# q = [F(S22-S33)^2 + G(S33-S11)^2 + H(S11-S22)^2 + 2L(S23)^2 + 2M(S13)^2 + 2N(S12)^2]^0.5
# S11 = 40 Pa; other compoenents of stress are zero since it is a uniaxial test
# F=0.5 G=0.25 H=0.3866 L=1.6413 M=1.6413 N=1.2731 (as used in this test)
# Substituting the values of stress components and F, G, H, L, M and N we obtain
# q = 31.9148868 Pa
#
# Equivalent_creep_strain_rate = A(q)^n (power law creep rate used in this test)
# Substituting A=1e-16 and n=9, and q as calculated above, we obtain
# Equivalent_creep_strain_rate = 3.4351030990356175e-07
#
# The 11 (xx) component of creep_strain_tensor is calculated as below
# creep_strain_tensor_11 = (Equivalent_creep_strain_rate / q) *
# (H * (S11 - S22) - G * (S33 - S11)) * time_increment
# Substituting the values and time_increment as 0.001 we obtain the analytical solution.
#
# MOOSE Analytical
# creep_strain_tensor_11 2.740674587165e-06 2.7407731645305e-06
#
# -----------------------------------------
# PYTHON SCRIPT FOR THE ANALYTICAL SOLUTION
# -----------------------------------------
# import math
# F=0.5; G=0.25; H=0.3866; L=1.6413; M=1.6413; N=1.2731
# S11=40; S22=0; S33=0; S23=0; S13=0; S12=0
# q = math.sqrt(F*(S22-S33)**2 + G*(S33-S11)**2 + H*(S11-S22)**2 + 2*L*(S23)**2 + 2*M*(S13)**2 + 2*N*(S12)**2)
# A=1e-16; n=9; time=0.001
# equivalent_creep_strain_rate = A*(q**n)
# equivalent_creep_strain_rate_11=(equivalent_creep_strain_rate / q) * (H * (S11 - S22) - G * (S33 - S11)) * time
# print(equivalent_creep_strain_rate_11)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 10
ny = 2
nz = 2
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 10.0
ymax = 1.0
zmax = 1.0
[]
[corner_node]
type = ExtraNodesetGenerator
new_boundary = '100'
nodes = '3 69'
input = gen
[]
[corner_node_2]
type = ExtraNodesetGenerator
new_boundary = '101'
nodes = '4 47'
input = corner_node
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[creep_strain_xx]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xx
index_i = 0
index_j = 0
[]
[creep_strain_xy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xy
index_i = 0
index_j = 1
[]
[creep_strain_yy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yy
index_i = 1
index_j = 1
[]
[sigma_xx]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1.0e-9 1.0'
y = '0 -4e1 -4e1'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_xx stress_xx'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeElasticityTensor
C_ijkl = '2925.433 391.979 391.979 2127.590 322.280 2127.590 1805.310 3.96 3.96'
fill_method = symmetric9
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_creep_two"
max_iterations = 50
absolute_tolerance = 1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5 0.25 0.3866 1.6413 1.6413 1.2731"
[]
[trial_creep_two]
type = ADHillCreepStressUpdate
coefficient = 1e-16
n_exponent = 9
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 0.00003
absolute_tolerance = 1e-20
relative_tolerance = 1e-20
# Force it to not use integration error
max_integration_error = 100.0
anisotropic_elasticity = true
creep_prefactor = 1.0
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = 100
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = 101
value = 0.0
[]
[Pressure]
[Side1]
boundary = right
function = pull
[]
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package -mat_mffd_err'
petsc_options_value = 'lu superlu_dist 1e-5'
nl_rel_tol = 1.0e-14
nl_abs_tol = 1.0e-14
l_max_its = 10
num_steps = 5
dt = 1.0e-4
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[creep_strain_xx]
type = ElementalVariableValue
variable = creep_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[elastic_strain_xx]
type = ElementalVariableValue
variable = elastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[sigma_xx]
type = ElementalVariableValue
variable = stress_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[]
[Outputs]
csv = true
exodus = false
perf_graph = true
# unnecessary output variables
hide = 'matl_ts_min max_disp_x max_disp_y max_hydro dt num_lin num_nonlin'
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/anis_mech_hill_tensor_creep.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 128
ny = 128
second_order = true
[]
[GlobalParams]
displacements = 'disp_x disp_y'
volumetric_locking_correction = false
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[]
[Variables]
[disp_x]
order = SECOND
scaling = 1e-10
[]
[disp_y]
order = SECOND
scaling = 1e-10
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 10e3'
y = '0 1e-4'
[]
[]
[Kernels]
[stress_x]
type = ADStressDivergenceTensors
component = 0
variable = disp_x
[]
[stress_y]
type = ADStressDivergenceTensors
component = 1
variable = disp_y
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
add_variables = true
generate_output = 'elastic_strain_xx elastic_strain_yy elastic_strain_xy'
use_automatic_differentiation = true
[]
[]
[Materials]
[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'
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_creep"
max_iterations = 300
[]
[hill_tensor]
type = HillConstants
# F G H L M N
hill_constants = "0.5 0.5 0.3866 1.6413 1.6413 1.2731"
base_name = trial_creep
[]
[trial_creep]
type = ADHillCreepStressUpdate
coefficient = 1e-24
n_exponent = 4
m_exponent = 0
activation_energy = 0
# internal_solve_output_on = always
base_name = trial_creep
[]
[creep_one]
type = ADPowerLawCreepStressUpdate
coefficient = 1e-24
n_exponent = 4
activation_energy = 0
base_name = creep_one
[]
[creep_nine]
type = ADPowerLawCreepStressUpdate
coefficient = 9e-24
n_exponent = 4
activation_energy = 0
base_name = creep_nine
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[pull_disp_y]
type = ADFunctionDirichletBC
variable = disp_y
boundary = top
function = pull
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
solve_type = Newton
petsc_options_iname = '-ksp_gmres_restart -pc_type -sub_pc_type'
petsc_options_value = '101 asm lu'
line_search = 'none'
nl_rel_tol = 1e-5
nl_abs_tol = 1.0e-13
num_steps = 200
dt = 1.0e2
automatic_scaling = true
[]
[Postprocessors]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[]
[Outputs]
csv = true
exodus = 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/anisotropic_plasticity/ad_aniso_plasticity_x.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 10
ny = 2
nz = 2
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 10.0
ymax = 1.0
zmax = 1.0
[]
[corner_node]
type = ExtraNodesetGenerator
new_boundary = '100'
nodes = '3 69'
input = gen
[]
[corner_node_2]
type = ExtraNodesetGenerator
new_boundary = '101'
nodes = '4 47'
input = corner_node
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[stress_yy]
order = CONSTANT
family = MONOMIAL
[]
[elastic_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[plasticity_strain_xx]
type = ADRankTwoAux
rank_two_tensor = trial_plasticity_plastic_strain
variable = plastic_strain_xx
index_i = 0
index_j = 0
[]
[plasticity_strain_xy]
type = ADRankTwoAux
rank_two_tensor = trial_plasticity_plastic_strain
variable = plastic_strain_xy
index_i = 0
index_j = 1
[]
[plasticity_strain_yy]
type = ADRankTwoAux
rank_two_tensor = trial_plasticity_plastic_strain
variable = plastic_strain_yy
index_i = 1
index_j = 1
[]
[plasticity_strain_zz]
type = ADRankTwoAux
rank_two_tensor = trial_plasticity_plastic_strain
variable = plastic_strain_zz
index_i = 2
index_j = 2
[]
[sigma_xx]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 1
index_j = 1
[]
[elastic_strain_yy]
type = ADRankTwoAux
rank_two_tensor = elastic_strain
variable = elastic_strain_yy
index_i = 1
index_j = 1
[]
[sigma_yy]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1e1 1e8'
y = '0 -4e2 -4e2'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_xx stress_xx'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 70000
poissons_ratio = 0.25
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_plasticity"
max_iterations = 50
absolute_tolerance = 1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5829856 0.364424 0.6342174 2.0691375 2.3492325 1.814589"
base_name = trial_plasticity
[]
[trial_plasticity]
type = ADHillPlasticityStressUpdate
hardening_constant = 2000.0
yield_stress = 0.001 # was 200 for verification
absolute_tolerance = 1e-14
relative_tolerance = 1e-12
base_name = trial_plasticity
internal_solve_full_iteration_history = true
max_inelastic_increment = 2.0e-6
internal_solve_output_on = on_error
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = 100
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = 101
value = 0.0
[]
[Pressure]
[Side1]
boundary = right
function = pull
[]
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-11
nl_abs_tol = 1.0e-14
l_max_its = 90
num_steps = 25
[TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 30
iteration_window = 9
growth_factor = 1.05
cutback_factor = 0.5
timestep_limiting_postprocessor = matl_ts_min
dt = 1.0e-5
time_t = '0 3.4e-5 10'
time_dt = '1.0e-5 1.0e-7 1.0e-7'
[]
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[plasticity_strain_yy]
type = ElementalVariableValue
variable = plastic_strain_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[elastic_strain_yy]
type = ElementalVariableValue
variable = elastic_strain_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[sigma_yy]
type = ElementalVariableValue
variable = stress_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[plasticity_strain_xx]
type = ElementalVariableValue
variable = plastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[elastic_strain_xx]
type = ElementalVariableValue
variable = elastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[sigma_xx]
type = ElementalVariableValue
variable = stress_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[plasticity_strain_zz]
type = ElementalVariableValue
variable = plastic_strain_zz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[]
[Outputs]
csv = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_xy_3d_anisoElasticity.i)
# This test simulates biaxial tensile test with the material being anisotropic
# in terms of elasticity and creep.
#
# -------------------
# ANALYTICAL SOLUTION
# -------------------
# https://mooseframework.inl.gov/source/materials/HillCreepStressUpdate.html
# q = [F(S22-S33)^2 + G(S33-S11)^2 + H(S11-S22)^2 + 2L(S23)^2 + 2M(S13)^2 + 2N(S12)^2]^0.5
# S11 = 40 Pa and S22 = 40 MPa; other compoenents of stress are zero since it is a biaxial test
# F=0.5 G=0.25 H=0.3866 L=1.6413 M=1.6413 N=1.2731 (as used in this test)
# Substituting the values of stress components and F, G, H, L, M and N we obtain
# q = 34.64101615137755 Pa
#
# Equivalent_creep_strain_rate = A(q)^n (power law creep rate used in this test)
# Substituting A=1e-15 and n=9, and q as calculated above, we obtain
# Equivalent_creep_strain_rate = 0.07183161109149655
#
# The 11 (xx) and 22 (yy) components of creep_strain_tensor are calculated as below:
#
# creep_strain_tensor_11 = (Equivalent_creep_strain_rate / q) *
# (H * (S11 - S22) - G * (S33 - S11)) * time_increment
# creep_strain_tensor_22 = (Equivalent_creep_strain_rate / q) *
# (F * (S22 - S33) - H * (S11 - S22)) * time_increment
#
# Substituting the values and time_increment as 0.001 we obtain the analytical solution.
#
# MOOSE Analytical
# creep_strain_tensor_11 2.073327e-06 2.0733271530122e-06
# creep_strain_tensor_22 4.147473e-06 4.147472838877e-06
#
# -----------------------------------------
# PYTHON SCRIPT FOR THE ANALYTICAL SOLUTION
# -----------------------------------------
# import math
# F=0.5; G=0.25; H=0.3866; L=1.6413; M=1.6413; N=1.2731
# S11=40; S22=40; S33=0; S23=0; S13=0; S12=0
# q = math.sqrt(F*(S22-S33)**2 + G*(S33-S11)**2 + H*(S11-S22)**2 + 2*L*(S23)**2 + 2*M*(S13)**2 + 2*N*(S12)**2)
# print(q)
# A=1e-15; n=9; time=0.0001
# equivalent_creep_strain_rate = A*(q**n)
# print(equivalent_creep_strain_rate)
# equivalent_creep_strain_rate_11=(equivalent_creep_strain_rate / q) * (H * (S11 - S22) - G * (S33 - S11)) * time
# equivalent_creep_strain_rate_22=(equivalent_creep_strain_rate / q) * (F * (S22 - S33) - H * (S11 - S22)) * time
# print(equivalent_creep_strain_rate_11, equivalent_creep_strain_rate_22)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 5
ny = 5
nz = 5
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 1.0
ymax = 1.0
zmax = 1.0
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[creep_strain_xx]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xx
index_i = 0
index_j = 0
[]
[creep_strain_xy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xy
index_i = 0
index_j = 1
[]
[creep_strain_yy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yy
index_i = 1
index_j = 1
[]
[sigma_xx]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[]
[sigma_yy]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[]
[sigma_zz]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1.0e-9 1.0'
y = '0 -40 -40'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_xx stress_xx elastic_strain_yy stress_yy elastic_strain_zz stress_zz'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeElasticityTensor
C_ijkl = '2925.433 391.979 391.979 2127.590 322.280 2127.590 1805.310 3.96 3.96'
fill_method = symmetric9
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_creep"
max_iterations = 50
absolute_tolerance = 1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5 0.25 0.3866 1.6413 1.6413 1.2731"
[]
[trial_creep]
type = ADHillCreepStressUpdate
coefficient = 1e-15 # 1e-16
n_exponent = 9
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 0.00003
absolute_tolerance = 1e-20
relative_tolerance = 1e-20
# Force it to not use integration error
max_integration_error = 100.0
anisotropic_elasticity = true
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = back
value = 0.0
[]
[Pressure]
[Side1]
boundary = 'right'
function = pull
[]
[Side2]
boundary = 'top'
function = pull
[]
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package -mat_mffd_err'
petsc_options_value = 'lu superlu_dist 1e-5'
nl_rel_tol = 1.0e-14
nl_abs_tol = 1.0e-14
l_max_its = 10
num_steps = 2
dt = 1.0e-4
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[creep_strain_xx]
type = ElementalVariableValue
variable = creep_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 109
[]
[elastic_strain_xx]
type = ElementalVariableValue
variable = elastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 109
[]
[sigma_xx]
type = ElementalVariableValue
variable = stress_xx
execute_on = 'TIMESTEP_END'
elementid = 109
[]
[creep_strain_yy]
type = ElementalVariableValue
variable = creep_strain_yy
execute_on = 'TIMESTEP_END'
elementid = 109
[]
[elastic_strain_yy]
type = ElementalVariableValue
variable = elastic_strain_yy
execute_on = 'TIMESTEP_END'
elementid = 109
[]
[sigma_yy]
type = ElementalVariableValue
variable = stress_yy
execute_on = 'TIMESTEP_END'
elementid = 109
[]
[elastic_strain_zz]
type = ElementalVariableValue
variable = elastic_strain_zz
execute_on = 'TIMESTEP_END'
elementid = 109
[]
[sigma_zz]
type = ElementalVariableValue
variable = stress_zz
execute_on = 'TIMESTEP_END'
elementid = 109
[]
[]
[Outputs]
csv = true
exodus = false
perf_graph = true
# unnecessary output variables
hide = 'matl_ts_min max_disp_x max_disp_y max_hydro dt num_lin num_nonlin elastic_strain_zz sigma_zz'
[]
(modules/solid_mechanics/test/tests/anisotropic_elastoplasticity/hoop_strain_comparison_coarse_xaxis.i)
# This test compares the hoop strain at two different elements in an internally
# pressurized cylinder with anisotropic plasticity: different yield condition
# for hoop and axial directions. The elements are located circumferentially
# apart but at same axial position. It is expected that due to pressurization
# hoop strains will develop with uniform magnitude along hoop direction. The
# test verifies that the plastic hoop strain is uniform in hoop direction.
# For 3D simulations with material properties oriented along the curved
# geometry such as cylinder or sphere, the stresses and strains are rotated to
# the local coordinate system from the global coordinate system. The plastic
# strain is calculated in the local coordinate system and then transformed to
# the global coordinate system. This test involves a 3D cylindrical geometry,
# and helps in indirectly verifying that this transformation of stresses and
# strains back and forth between the local and global coordinate system is
# correctly implemented.
[Mesh]
file = quarter_cylinder_coarse_xaxis.e
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[stress_zz]
order = CONSTANT
family = MONOMIAL
[]
[stress_xx]
order = CONSTANT
family = MONOMIAL
[]
[stress_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[plasticity_strain_xx]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_xx
index_i = 0
index_j = 0
[]
[plasticity_strain_xy]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_xy
index_i = 0
index_j = 1
[]
[plasticity_strain_yy]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_yy
index_i = 1
index_j = 1
[]
[plasticity_strain_zz]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_zz
index_i = 2
index_j = 2
[]
[stress_zz]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[]
[stress_xx]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[]
[stress_yy]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[]
[]
[Functions]
[push]
type = PiecewiseLinear
x = '0 1e2'
y = '0 200e6'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_zz elastic_strain_xx elastic_strain_yy stress_xx stress_yy stress_zz strain_zz plastic_strain_zz plastic_strain_xx plastic_strain_yy hoop_stress hoop_strain'
use_automatic_differentiation = true
add_variables = true
cylindrical_axis_point1 = '0 0 0'
cylindrical_axis_point2 = '1 0 0'
[]
[]
[Constraints]
[mid_section_plane]
type = EqualValueBoundaryConstraint
variable = disp_x
secondary = top # boundary
penalty = 1.0e+10
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 200.0e9
poissons_ratio = 0.2
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "plasticity"
max_iterations = 50
absolute_tolerance = 1e-30 #1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
# hill_constants = "0.5 0.5 0.5 1.5 1.5 1.5"
hill_constants = "0.25 0.5 0.5 1.5 1.5 1.5"
[]
[plasticity]
type = ADHillElastoPlasticityStressUpdate
hardening_constant = 1.5e10
hardening_exponent = 1.0
yield_stress = 0.0 # 60e6
local_cylindrical_csys = true
axis = x
absolute_tolerance = 1e-15 # 1e-8
relative_tolerance = 1e-13 # 1e-15
internal_solve_full_iteration_history = true
max_inelastic_increment = 2.0e-6
internal_solve_output_on = on_error
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = bottom
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = z_face
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = y_face
value = 0.0
[]
[Pressure]
[Side1]
boundary = inner
function = push
[]
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-12
nl_abs_tol = 1e-14
# nl_abs_tol = 1e-10
l_max_its = 90
nl_max_its = 30
[TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 30
iteration_window = 9
growth_factor = 1.05
cutback_factor = 0.5
timestep_limiting_postprocessor = matl_ts_min
dt = 0.1e-4
time_t = '0 6.23 10'
time_dt = '0.1 1.0e-2 1.0e-2'
[]
num_steps = 1
start_time = 0
end_time = 200.0
automatic_scaling = true
dtmax = 0.1e-4
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[hoop_strain_elementA]
type = ElementalVariableValue
elementid = 10
variable = hoop_strain
[]
[hoop_strain_elementB]
type = ElementalVariableValue
elementid = 4
variable = hoop_strain
[]
[hoop_strain_diff]
type = DifferencePostprocessor
value1 = hoop_strain_elementA
value2 = hoop_strain_elementB
[]
[]
[Outputs]
csv = true
exodus = false
perf_graph = true
[]
(modules/solid_mechanics/test/tests/anisotropic_elastoplasticity/ad_uniaxial_x_non_linear.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[sigma_xx]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[plasticity_strain_xx]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_xx
index_i = 0
index_j = 0
[]
[plasticity_strain_xy]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_xy
index_i = 0
index_j = 1
[]
[plasticity_strain_yy]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_yy
index_i = 1
index_j = 1
[]
[sigma_xx]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1e1'
y = '0 -2e8'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_xx stress_xx strain_xx plastic_strain_xx'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeElasticityTensor
fill_method = orthotropic
C_ijkl = '10.0e10 15.0e10 20.0e10 2.0e10 2.0e10 2.0e10 0.2 0.2 0.2 0.13333333333333333 0.1 0.15'
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_plasticity"
max_iterations = 50
absolute_tolerance = 1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.6 0.4 0.7 1.5 1.5 1.5"
[]
[trial_plasticity]
type = ADHillElastoPlasticityStressUpdate
hardening_constant = 1e9
hardening_exponent = 0.5
yield_stress = 60e6
absolute_tolerance = 1e-15 # 1e-8
relative_tolerance = 1e-13 # 1e-15
internal_solve_full_iteration_history = true
max_inelastic_increment = 2.0e-5
internal_solve_output_on = on_error
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = back
value = 0.0
[]
[Pressure]
[Side1]
boundary = right
function = pull
[]
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-12
nl_abs_tol = 1.0e-14
l_max_its = 90
[TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 30
iteration_window = 9
growth_factor = 1.05
cutback_factor = 0.5
timestep_limiting_postprocessor = matl_ts_min
dt = 0.1
time_t = '0 2.5 10'
time_dt = '0.1 1.0e-2 1.0e-2'
[]
start_time = 0
end_time = 10.0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[plasticity_strain_xx]
type = ElementalVariableValue
variable = plastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 0
[]
[elastic_strain_xx]
type = ElementalVariableValue
variable = elastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 0
[]
[strain_xx]
type = ElementalVariableValue
variable = strain_xx
execute_on = 'TIMESTEP_END'
elementid = 0
[]
[sigma_xx]
type = ElementalVariableValue
variable = stress_xx
execute_on = 'TIMESTEP_END'
elementid = 0
[]
[]
[Outputs]
csv = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_temperature_coefficients.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 10
ny = 2
nz = 2
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 10.0
ymax = 1.0
zmax = 1.0
[]
[corner_node]
type = ExtraNodesetGenerator
new_boundary = '100'
nodes = '3 69'
input = gen
[]
[corner_node_2]
type = ExtraNodesetGenerator
new_boundary = '101'
nodes = '4 47'
input = corner_node
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xz]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_yz]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[creep_strain_xx]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xx
index_i = 0
index_j = 0
[]
[creep_strain_xy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xy
index_i = 0
index_j = 1
[]
[creep_strain_yy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yy
index_i = 1
index_j = 1
[]
[creep_strain_zz]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_zz
index_i = 2
index_j = 2
[]
[creep_strain_xz]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xz
index_i = 0
index_j = 2
[]
[creep_strain_yz]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yz
index_i = 1
index_j = 2
[]
[sigma_xx]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 1
index_j = 1
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1.0e-9 1.0'
y = '0 -4e1 -4e1'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_xx stress_xx'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 700
poissons_ratio = 0.0
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = 'trial_creep_aniso_iso'
max_iterations = 50
[]
[hill_constants]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5 0.5 0.5 1.5 1.5 1.5"
[]
[trial_creep_aniso_iso]
type = ADHillCreepStressUpdate
coefficient = 1e-16
n_exponent = 9
m_exponent = 0
activation_energy = 0
max_inelastic_increment = 0.00003
relative_tolerance = 1e-20
absolute_tolerance = 1e-20
internal_solve_output_on = never
# Force it to not use integration error
max_integration_error = 1.0
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = 100
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = 101
value = 0.0
[]
[Pressure]
[Side1]
boundary = right
function = pull
[]
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-13
nl_abs_tol = 1.0e-14
l_max_its = 90
num_steps = 50
dt = 5.0e-4
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[creep_strain_xx]
type = ElementalVariableValue
variable = creep_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_yy]
type = ElementalVariableValue
variable = creep_strain_yy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_zz]
type = ElementalVariableValue
variable = creep_strain_zz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_xy]
type = ElementalVariableValue
variable = creep_strain_xy
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_yz]
type = ElementalVariableValue
variable = creep_strain_yz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[creep_strain_xz]
type = ElementalVariableValue
variable = creep_strain_xz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[elastic_strain_xx]
type = ElementalVariableValue
variable = elastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[sigma_xx]
type = ElementalVariableValue
variable = stress_xx
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[]
[Outputs]
csv = true
exodus = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/anisotropic_plasticity/anis_plasticity_test.i)
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[plasticity_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[plasticity_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[plasticity_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[Variables]
[disp_x]
scaling = 1e-10
[]
[disp_y]
scaling = 1e-10
[]
[disp_z]
scaling = 1e-10
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[plasticity_strain_xx]
type = ADRankTwoAux
rank_two_tensor = trial_plasticity_plastic_strain
variable = plasticity_strain_xx
index_i = 0
index_j = 0
[]
[plasticity_strain_xy]
type = ADRankTwoAux
rank_two_tensor = trial_plasticity_plastic_strain
variable = plasticity_strain_xy
index_i = 0
index_j = 1
[]
[plasticity_strain_yy]
type = ADRankTwoAux
rank_two_tensor = trial_plasticity_plastic_strain
variable = plasticity_strain_yy
index_i = 1
index_j = 1
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1e3 1e8'
y = '0 1e2 1e2'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
add_variables = true
incremental = true
generate_output = 'elastic_strain_xx elastic_strain_yy elastic_strain_xy stress_xx stress_xy stress_yy'
use_automatic_differentiation = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 206800
poissons_ratio = 0.0
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_plasticity"
max_iterations = 500
absolute_tolerance = 1e-05
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "1.0 4.0 5.0 0.5 0.5 0.5"
base_name = trial_plasticity
[]
[trial_plasticity]
type = ADHillPlasticityStressUpdate
# internal_solve_output_on = always
# F G H L M N
hardening_constant = 5000
yield_stress = 20000000000000
base_name = trial_plasticity
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = bottom
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = bottom
value = 0.0
[]
[Pressure]
[Side1]
boundary = top
function = pull
[]
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-ksp_gmres_restart -pc_type -sub_pc_type'
petsc_options_value = '101 asm lu'
line_search = 'none'
nl_rel_tol = 1e-07
nl_abs_tol = 1.0e-15
l_max_its = 90
num_steps = 40
dt = 5.0e1
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[]
[Outputs]
csv = true
perf_graph = 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/anisotropic_elastoplasticity/ad_aniso_plasticity_x_one.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 10
ny = 2
nz = 2
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 10.0
ymax = 1.0
zmax = 1.0
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[plastic_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[plasticity_strain_xx]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_xx
index_i = 0
index_j = 0
[]
[plasticity_strain_xy]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_xy
index_i = 0
index_j = 1
[]
[plasticity_strain_yy]
type = ADRankTwoAux
rank_two_tensor = plastic_strain
variable = plastic_strain_yy
index_i = 1
index_j = 1
[]
[sigma_xx]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 1
index_j = 1
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1e1 1e8'
y = '0 -4e2 -4e2'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_xx stress_xx'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 70000
poissons_ratio = 0.25
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_plasticity"
max_iterations = 50
absolute_tolerance = 1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5829856 0.364424 0.6342174 2.0691375 2.3492325 1.814589"
[]
[trial_plasticity]
type = ADHillElastoPlasticityStressUpdate
hardening_constant = 2000.0
yield_stress = 0.001 # was 200 for verification
absolute_tolerance = 1e-15
relative_tolerance = 1e-13
# internal_solve_full_iteration_history = true
max_inelastic_increment = 2.0e-6
# internal_solve_output_on = on_error
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_y
boundary = left
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = left
value = 0.0
[]
[Pressure]
[Side1]
boundary = right
function = pull
[]
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-12
nl_abs_tol = 1.0e-14
l_max_its = 90
num_steps = 25
[TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 30
iteration_window = 9
growth_factor = 1.05
cutback_factor = 0.5
timestep_limiting_postprocessor = matl_ts_min
dt = 1.0e-5
time_t = '0 3.4e-5 10'
time_dt = '1.0e-5 1.0e-7 1.0e-7'
[]
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[plasticity_strain_xx]
type = ElementalVariableValue
variable = plastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 0
[]
[elastic_strain_xx]
type = ElementalVariableValue
variable = elastic_strain_xx
execute_on = 'TIMESTEP_END'
elementid = 0
[]
[sigma_xx]
type = ElementalVariableValue
variable = stress_xx
execute_on = 'TIMESTEP_END'
elementid = 0
[]
[]
[Outputs]
csv = true
perf_graph = true
[]
(modules/solid_mechanics/test/tests/ad_anisotropic_creep/ad_aniso_creep_z_3d.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 2
ny = 2
nz = 10
xmin = 0.0
ymin = 0.0
zmin = 0.0
xmax = 1.0
ymax = 1.0
zmax = 10.0
[]
[corner_node]
type = ExtraNodesetGenerator
new_boundary = '100'
nodes = '9 3'
input = gen
[]
[corner_node_2]
type = ExtraNodesetGenerator
new_boundary = '101'
nodes = '12 1'
input = corner_node
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = true
[]
[AuxVariables]
[hydrostatic_stress]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xx]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xy]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[hydrostatic_stress]
type = ADRankTwoScalarAux
variable = hydrostatic_stress
rank_two_tensor = stress
scalar_type = Hydrostatic
[]
[creep_strain_xx]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xx
index_i = 0
index_j = 0
[]
[creep_strain_xy]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xy
index_i = 0
index_j = 1
[]
[creep_strain_zz]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_zz
index_i = 2
index_j = 2
[]
[sigma_zz]
type = ADRankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[]
[]
[Functions]
[pull]
type = PiecewiseLinear
x = '0 1.0'
y = '-4e1 -4e1'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = FINITE
generate_output = 'elastic_strain_zz stress_zz stress_xx stress_yy stress_xy stress_xz stress_yz'
use_automatic_differentiation = true
add_variables = true
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 700
poissons_ratio = 0.0
[]
[elastic_strain]
type = ADComputeMultipleInelasticStress
inelastic_models = "trial_creep_two"
max_iterations = 50
absolute_tolerance = 1e-16
[]
[hill_tensor]
type = ADHillConstants
# F G H L M N
hill_constants = "0.5 0.25 0.3866 1.6413 1.6413 1.2731"
[]
[trial_creep_two]
type = ADHillCreepStressUpdate
coefficient = 1e-16
n_exponent = 9
m_exponent = 0
activation_energy = 0
# F G H L M N
max_inelastic_increment = 0.00003
absolute_tolerance = 1e-20
relative_tolerance = 1e-20
# Force it to not use integration error
max_integration_error = 100.0
[]
[]
[BCs]
[no_disp_x]
type = ADDirichletBC
variable = disp_y
boundary = 100
value = 0.0
[]
[no_disp_y]
type = ADDirichletBC
variable = disp_x
boundary = 101
value = 0.0
[]
[no_disp_z]
type = ADDirichletBC
variable = disp_z
boundary = back
value = 0.0
[]
[pressure]
type = ADPressure
boundary = front
function = pull
variable = disp_z
component = 2
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1.0e-13
nl_abs_tol = 1.0e-13
l_max_its = 90
num_steps = 10
dt = 1.0e-4
start_time = 0
automatic_scaling = true
[]
[Postprocessors]
[matl_ts_min]
type = MaterialTimeStepPostprocessor
[]
[max_disp_x]
type = ElementExtremeValue
variable = disp_x
[]
[max_disp_y]
type = ElementExtremeValue
variable = disp_y
[]
[max_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
[]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
outputs = console
[]
[num_nonlin]
type = NumNonlinearIterations
outputs = console
[]
[creep_strain_zz]
type = ElementalVariableValue
variable = creep_strain_zz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[elastic_strain_zz]
type = ElementalVariableValue
variable = elastic_strain_zz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[sigma_zz]
type = ElementalVariableValue
variable = stress_zz
execute_on = 'TIMESTEP_END'
elementid = 39
[]
[]
[Outputs]
csv = true
exodus = true
perf_graph = true
[]