- DP_modelA SolidMechanicsPlasticDruckerPrager UserObject that defines the Drucker-Prager parameters (cohesion, friction angle and dilation angle)
C++ Type:UserObjectName
Controllable:No
Description:A SolidMechanicsPlasticDruckerPrager UserObject that defines the Drucker-Prager parameters (cohesion, friction angle and dilation angle)
- compressive_strengthA SolidMechanicsHardening UserObject that defines hardening of the compressive strength. In physical situations this is positive.
C++ Type:UserObjectName
Controllable:No
Description:A SolidMechanicsHardening UserObject that defines hardening of the compressive strength. In physical situations this is positive.
- smoothing_tolIntersections of the yield surfaces will be smoothed by this amount (this is measured in units of stress). Often this is related to other physical parameters (eg, 0.1*cohesion) but it is important to set this small enough so that the individual yield surfaces do not mix together in the smoothing process to produce a result where no stress is admissible (for example, mixing together tensile and compressive failure envelopes).
C++ Type:double
Controllable:No
Description:Intersections of the yield surfaces will be smoothed by this amount (this is measured in units of stress). Often this is related to other physical parameters (eg, 0.1*cohesion) but it is important to set this small enough so that the individual yield surfaces do not mix together in the smoothing process to produce a result where no stress is admissible (for example, mixing together tensile and compressive failure envelopes).
- tensile_strengthA SolidMechanicsHardening UserObject that defines hardening of the tensile strength. In physical situations this is positive (and always must be greater than negative compressive-strength.
C++ Type:UserObjectName
Controllable:No
Description:A SolidMechanicsHardening UserObject that defines hardening of the tensile strength. In physical situations this is positive (and always must be greater than negative compressive-strength.
- tip_smootherThe cone vertex at J2 = 0 will be smoothed by the given amount. Typical value is 0.1*cohesion
C++ Type:double
Controllable:No
Description:The cone vertex at J2 = 0 will be smoothed by the given amount. Typical value is 0.1*cohesion
- yield_function_tolThe return-map process will be deemed to have converged if all yield functions are within yield_function_tol of zero. If this is set very low then precision-loss might be encountered: if the code detects precision loss then it also deems the return-map process has converged.
C++ Type:double
Controllable:No
Description:The return-map process will be deemed to have converged if all yield functions are within yield_function_tol of zero. If this is set very low then precision-loss might be encountered: if the code detects precision loss then it also deems the return-map process has converged.
CappedDruckerPragerStressUpdate
The CappedDruckerPragerStressUpdate has not been documented. The content listed below should be used as a starting point for documenting the class, which includes the typical automatic documentation associated with a MooseObject; however, what is contained is ultimately determined by what is necessary to make the documentation clear for users.
Capped Drucker-Prager plasticity stress calculator
Overview
Example Input File Syntax
Input Parameters
- admissible_stressA single admissible value of the value of the stress parameters for internal parameters = 0. This is used to initialize the return-mapping algorithm during the first nonlinear iteration. If not given then it is assumed that stress parameters = 0 is admissible.
C++ Type:std::vector<double>
Controllable:No
Description:A single admissible value of the value of the stress parameters for internal parameters = 0. This is used to initialize the return-mapping algorithm during the first nonlinear iteration. If not given then it is assumed that stress parameters = 0 is admissible.
- base_nameOptional parameter that defines a prefix for all material properties related to this stress update model. This allows for multiple models of the same type to be used without naming conflicts.
C++ Type:std::string
Controllable:No
Description:Optional parameter that defines a prefix for all material properties related to this stress update model. This allows for multiple models of the same type to be used without naming conflicts.
- blockThe list of blocks (ids or names) that this object will be applied
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The list of blocks (ids or names) that this object will be applied
- boundaryThe list of boundaries (ids or names) from the mesh where this object applies
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:The list of boundaries (ids or names) from the mesh where this object applies
- 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
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
Controllable:No
Description:An optional suffix parameter that can be appended to any declared properties. The suffix will be prepended with a '_' character.
- max_NR_iterations20Maximum number of Newton-Raphson iterations allowed during the return-map algorithm
Default:20
C++ Type:unsigned int
Controllable:No
Description:Maximum number of Newton-Raphson iterations allowed during the return-map algorithm
- min_step_size1In order to help the Newton-Raphson procedure, the applied strain increment may be applied in sub-increments of size greater than this value. Usually it is better for Moose's nonlinear convergence to increase max_NR_iterations rather than decrease this parameter.
Default:1
C++ Type:double
Controllable:No
Description:In order to help the Newton-Raphson procedure, the applied strain increment may be applied in sub-increments of size greater than this value. Usually it is better for Moose's nonlinear convergence to increase max_NR_iterations rather than decrease this parameter.
- perfect_guessTrueProvide a guess to the Newton-Raphson procedure that is the result from perfect plasticity. With severe hardening/softening this may be suboptimal.
Default:True
C++ Type:bool
Controllable:No
Description:Provide a guess to the Newton-Raphson procedure that is the result from perfect plasticity. With severe hardening/softening this may be suboptimal.
- perform_finite_strain_rotationsFalseTensors are correctly rotated in finite-strain simulations. For optimal performance you can set this to 'false' if you are only ever using small strains
Default:False
C++ Type:bool
Controllable:No
Description:Tensors are correctly rotated in finite-strain simulations. For optimal performance you can set this to 'false' if you are only ever using small strains
- prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Controllable:No
Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
- small_dilationTrueIf true, and if the trial stress exceeds the tensile strength, then the user guarantees that the returned stress will be independent of the compressive strength.
Default:True
C++ Type:bool
Controllable:No
Description:If true, and if the trial stress exceeds the tensile strength, then the user guarantees that the returned stress will be independent of the compressive strength.
- use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Default:False
C++ Type:bool
Controllable:No
Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
- warn_about_precision_lossFalseOutput a message to the console every time precision-loss is encountered during the Newton-Raphson process
Default:False
C++ Type:bool
Controllable:No
Description:Output a message to the console every time precision-loss is encountered during the Newton-Raphson process
Optional Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:Yes
Description:Set the enabled status of the MooseObject.
- implicitTrueDetermines whether this object is calculated using an implicit or explicit form
Default:True
C++ Type:bool
Controllable:No
Description:Determines whether this object is calculated using an implicit or explicit form
- seed0The seed for the master random number generator
Default:0
C++ Type:unsigned int
Controllable:No
Description:The seed for the master random number generator
- smoother_function_typecosType of smoother function to use. 'cos' means (-a/pi)cos(pi x/2/a), 'polyN' means a polynomial of degree 2N+2
Default:cos
C++ Type:MooseEnum
Options:cos, poly1, poly2, poly3
Controllable:No
Description:Type of smoother function to use. 'cos' means (-a/pi)cos(pi x/2/a), 'polyN' means a polynomial of degree 2N+2
- use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Advanced Parameters
- 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>
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>
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/capped_drucker_prager/small_deform3_inner_edge.i)
- (modules/solid_mechanics/test/tests/capped_drucker_prager/small_deform2_native.i)
- (modules/solid_mechanics/test/tests/capped_drucker_prager/small_deform2_outer_tip.i)
- (modules/solid_mechanics/test/tests/jacobian/cto24.i)
- (modules/solid_mechanics/test/tests/capped_drucker_prager/small_deform3_lode_zero.i)
- (modules/porous_flow/test/tests/dirackernels/injection_with_plasticity.i)
- (modules/solid_mechanics/test/tests/capped_drucker_prager/small_deform3_native.i)
- (modules/solid_mechanics/test/tests/jacobian/cto28.i)
- (modules/solid_mechanics/test/tests/multiple_two_parameter_plasticity/cycled_dp_then_wp.i)
- (modules/solid_mechanics/test/tests/capped_drucker_prager/small_deform3_inner_tip.i)
- (modules/solid_mechanics/test/tests/jacobian/cto26.i)
- (modules/solid_mechanics/test/tests/multiple_two_parameter_plasticity/dp_and_wp.i)
- (modules/solid_mechanics/test/tests/capped_drucker_prager/small_deform3_outer_tip.i)
- (modules/solid_mechanics/test/tests/jacobian/cto27.i)
- (modules/solid_mechanics/test/tests/jacobian/cto25.i)
- (modules/solid_mechanics/test/tests/multiple_two_parameter_plasticity/dp_then_wp.i)
- (modules/solid_mechanics/test/tests/capped_drucker_prager/small_deform2_lode_zero.i)
- (modules/solid_mechanics/test/tests/capped_drucker_prager/small_deform2_inner_tip.i)
- (modules/solid_mechanics/test/tests/capped_drucker_prager/small_deform2_inner_edge.i)
- (modules/solid_mechanics/test/tests/capped_drucker_prager/random.i)
Child Objects
(modules/solid_mechanics/test/tests/capped_drucker_prager/small_deform3_inner_edge.i)
# apply repeated stretches in x z directions, and smaller stretches along the y direction,
# so that sigma_I = sigma_II,
# which means that lode angle = 30deg.
# The allows yield surface in meridional plane to be mapped out
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[./all]
add_variables = true
incremental = true
generate_output = 'stress_xx stress_xy stress_xz stress_yy stress_yz stress_zz'
[../]
[]
[BCs]
[./x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'front back'
function = '1E-6*x*t'
[../]
[./y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'front back'
function = '-1.7E-6*y*t'
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = 'front back'
function = '1E-6*z*t'
[../]
[]
[AuxVariables]
[./mc_int]
order = CONSTANT
family = MONOMIAL
[../]
[./yield_fcn]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./mc_int_auxk]
type = MaterialStdVectorAux
index = 0
property = plastic_internal_parameter
variable = mc_int
[../]
[./yield_fcn_auxk]
type = MaterialStdVectorAux
index = 0
property = plastic_yield_function
variable = yield_fcn
[../]
[]
[Postprocessors]
[./s_xx]
type = PointValue
point = '0 0 0'
variable = stress_xx
[../]
[./s_xy]
type = PointValue
point = '0 0 0'
variable = stress_xy
[../]
[./s_xz]
type = PointValue
point = '0 0 0'
variable = stress_xz
[../]
[./s_yy]
type = PointValue
point = '0 0 0'
variable = stress_yy
[../]
[./s_yz]
type = PointValue
point = '0 0 0'
variable = stress_yz
[../]
[./s_zz]
type = PointValue
point = '0 0 0'
variable = stress_zz
[../]
[./internal]
type = PointValue
point = '0 0 0'
variable = mc_int
[../]
[./f]
type = PointValue
point = '0 0 0'
variable = yield_fcn
[../]
[]
[UserObjects]
[./ts]
type = SolidMechanicsHardeningConstant
value = 1E5
[../]
[./cs]
type = SolidMechanicsHardeningConstant
value = 1E5
[../]
[./mc_coh]
type = SolidMechanicsHardeningConstant
value = 10
[../]
[./mc_phi]
type = SolidMechanicsHardeningConstant
value = 35
convert_to_radians = true
[../]
[./mc_psi]
type = SolidMechanicsHardeningConstant
value = 5
convert_to_radians = true
[../]
[./dp]
type = SolidMechanicsPlasticDruckerPrager
mc_cohesion = mc_coh
mc_friction_angle = mc_phi
mc_dilation_angle = mc_psi
mc_interpolation_scheme = inner_edge
yield_function_tolerance = 1 # irrelevant here
internal_constraint_tolerance = 1 # irrelevant here
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '0 1E7'
[../]
[./admissible]
type = ComputeMultipleInelasticStress
inelastic_models = mc
perform_finite_strain_rotations = false
[../]
[./mc]
type = CappedDruckerPragerStressUpdate
DP_model = dp
tensile_strength = ts
compressive_strength = cs
yield_function_tol = 1E-8
tip_smoother = 8
smoothing_tol = 1E-7
[../]
[]
[Executioner]
end_time = 10
dt = 1
type = Transient
[]
[Outputs]
file_base = small_deform3_inner_edge
exodus = false
[./csv]
type = CSV
[../]
[]
(modules/solid_mechanics/test/tests/capped_drucker_prager/small_deform2_native.i)
# apply repeated stretches in x, y and z directions, so that mean_stress = 0
# This maps out the yield surface in the octahedral plane for zero mean stress
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[./all]
add_variables = true
incremental = true
generate_output = 'stress_xx stress_xy stress_xz stress_yy stress_yz stress_zz'
[../]
[]
[BCs]
[./x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'front back'
function = '-1.5E-6*x+2E-6*x*sin(t)'
[../]
[./y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'front back'
function = '2E-6*y*sin(2*t)'
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = 'front back'
function = '-2E-6*z*(sin(t)+sin(2*t))'
[../]
[]
[AuxVariables]
[./yield_fcn]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./yield_fcn_auxk]
type = MaterialStdVectorAux
index = 0
property = plastic_yield_function
variable = yield_fcn
[../]
[]
[Postprocessors]
[./s_xx]
type = PointValue
point = '0 0 0'
variable = stress_xx
[../]
[./s_xy]
type = PointValue
point = '0 0 0'
variable = stress_xy
[../]
[./s_xz]
type = PointValue
point = '0 0 0'
variable = stress_xz
[../]
[./s_yy]
type = PointValue
point = '0 0 0'
variable = stress_yy
[../]
[./s_yz]
type = PointValue
point = '0 0 0'
variable = stress_yz
[../]
[./s_zz]
type = PointValue
point = '0 0 0'
variable = stress_zz
[../]
[./f]
type = PointValue
point = '0 0 0'
variable = yield_fcn
[../]
[./f0]
type = PointValue
point = '0 0 0'
variable = yield_fcn
[../]
[./f1]
type = PointValue
point = '0 0 0'
variable = yield_fcn
[../]
[]
[UserObjects]
[./ts]
type = SolidMechanicsHardeningConstant
value = 1000
[../]
[./cs]
type = SolidMechanicsHardeningConstant
value = 1000
[../]
[./mc_coh]
type = SolidMechanicsHardeningConstant
value = 10
[../]
[./mc_phi]
type = SolidMechanicsHardeningConstant
value = 20
convert_to_radians = true
[../]
[./mc_psi]
type = SolidMechanicsHardeningConstant
value = 0
[../]
[./dp]
type = SolidMechanicsPlasticDruckerPrager
mc_cohesion = mc_coh
mc_friction_angle = mc_phi
mc_dilation_angle = mc_psi
mc_interpolation_scheme = native
internal_constraint_tolerance = 1 # irrelevant here
yield_function_tolerance = 1 # irrelevant here
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '0 1E7'
[../]
[./admissible]
type = ComputeMultipleInelasticStress
inelastic_models = cdp
perform_finite_strain_rotations = false
[../]
[./cdp]
type = CappedDruckerPragerStressUpdate
DP_model = dp
tensile_strength = ts
compressive_strength = cs
yield_function_tol = 1E-8
tip_smoother = 4
smoothing_tol = 1E-5
[../]
[]
[Executioner]
end_time = 100
dt = 1
type = Transient
[]
[Outputs]
file_base = small_deform2_native
exodus = false
[./csv]
type = CSV
[../]
[]
(modules/solid_mechanics/test/tests/capped_drucker_prager/small_deform2_outer_tip.i)
# apply repeated stretches in x, y and z directions, so that mean_stress = 0
# This maps out the yield surface in the octahedral plane for zero mean stress
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[./all]
add_variables = true
incremental = true
generate_output = 'stress_xx stress_xy stress_xz stress_yy stress_yz stress_zz'
[../]
[]
[BCs]
[./x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'front back'
function = '-1.5E-6*x+2E-6*x*sin(t)'
[../]
[./y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'front back'
function = '2E-6*y*sin(2*t)'
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = 'front back'
function = '-2E-6*z*(sin(t)+sin(2*t))'
[../]
[]
[AuxVariables]
[./yield_fcn]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./yield_fcn_auxk]
type = MaterialStdVectorAux
index = 0
property = plastic_yield_function
variable = yield_fcn
[../]
[]
[Postprocessors]
[./s_xx]
type = PointValue
point = '0 0 0'
variable = stress_xx
[../]
[./s_xy]
type = PointValue
point = '0 0 0'
variable = stress_xy
[../]
[./s_xz]
type = PointValue
point = '0 0 0'
variable = stress_xz
[../]
[./s_yy]
type = PointValue
point = '0 0 0'
variable = stress_yy
[../]
[./s_yz]
type = PointValue
point = '0 0 0'
variable = stress_yz
[../]
[./s_zz]
type = PointValue
point = '0 0 0'
variable = stress_zz
[../]
[./f]
type = PointValue
point = '0 0 0'
variable = yield_fcn
[../]
[./f0]
type = PointValue
point = '0 0 0'
variable = yield_fcn
[../]
[./f1]
type = PointValue
point = '0 0 0'
variable = yield_fcn
[../]
[]
[UserObjects]
[./ts]
type = SolidMechanicsHardeningConstant
value = 1000
[../]
[./cs]
type = SolidMechanicsHardeningConstant
value = 1000
[../]
[./mc_coh]
type = SolidMechanicsHardeningConstant
value = 10
[../]
[./mc_phi]
type = SolidMechanicsHardeningConstant
value = 20
convert_to_radians = true
[../]
[./mc_psi]
type = SolidMechanicsHardeningConstant
value = 0
[../]
[./dp]
type = SolidMechanicsPlasticDruckerPrager
mc_cohesion = mc_coh
mc_friction_angle = mc_phi
mc_dilation_angle = mc_psi
mc_interpolation_scheme = outer_tip
internal_constraint_tolerance = 1 # irrelevant here
yield_function_tolerance = 1 # irrelevant here
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '0 1E7'
[../]
[./admissible]
type = ComputeMultipleInelasticStress
inelastic_models = cdp
perform_finite_strain_rotations = false
[../]
[./cdp]
type = CappedDruckerPragerStressUpdate
DP_model = dp
tensile_strength = ts
compressive_strength = cs
yield_function_tol = 1E-8
tip_smoother = 4
smoothing_tol = 1E-5
[../]
[]
[Executioner]
end_time = 100
dt = 1
type = Transient
[]
[Outputs]
file_base = small_deform2_outer_tip
exodus = false
[./csv]
type = CSV
[../]
[]
(modules/solid_mechanics/test/tests/jacobian/cto24.i)
# CappedDruckerPrager
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
block = 0
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[Kernels]
[SolidMechanics]
displacements = 'disp_x disp_y disp_z'
[../]
[]
[UserObjects]
[./ts]
type = SolidMechanicsHardeningConstant
value = 10
[../]
[./cs]
type = SolidMechanicsHardeningConstant
value = 10
[../]
[./mc_coh]
type = SolidMechanicsHardeningConstant
value = 10
[../]
[./phi]
type = SolidMechanicsHardeningConstant
value = 0.8
[../]
[./psi]
type = SolidMechanicsHardeningConstant
value = 0.4
[../]
[./dp]
type = SolidMechanicsPlasticDruckerPragerHyperbolic
mc_cohesion = mc_coh
mc_friction_angle = phi
mc_dilation_angle = psi
yield_function_tolerance = 1E-11 # irrelevant here
internal_constraint_tolerance = 1E-9 # irrelevant here
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = 0
lambda = 0.7
shear_modulus = 1.0
[../]
[./strain]
type = ComputeIncrementalSmallStrain
displacements = 'disp_x disp_y disp_z'
eigenstrain_names = ini_stress
[../]
[./ini_stress]
type = ComputeEigenstrainFromInitialStress
initial_stress = '10 0 0 0 10 0 0 0 10'
eigenstrain_name = ini_stress
[../]
[./admissible]
type = ComputeMultipleInelasticStress
inelastic_models = dp
[../]
[./dp]
type = CappedDruckerPragerStressUpdate
DP_model = dp
tensile_strength = ts
compressive_strength = cs
yield_function_tol = 1E-11
tip_smoother = 1
smoothing_tol = 1
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
[]
(modules/solid_mechanics/test/tests/capped_drucker_prager/small_deform3_lode_zero.i)
# apply repeated stretches in x z directions, and smaller stretches along the y direction,
# so that sigma_I = sigma_II,
# which means that lode angle = 30deg.
# The allows yield surface in meridional plane to be mapped out
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[./all]
add_variables = true
incremental = true
generate_output = 'stress_xx stress_xy stress_xz stress_yy stress_yz stress_zz'
[../]
[]
[BCs]
[./x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'front back'
function = '1E-6*x*t'
[../]
[./y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'front back'
function = '-1.7E-6*y*t'
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = 'front back'
function = '1E-6*z*t'
[../]
[]
[AuxVariables]
[./mc_int]
order = CONSTANT
family = MONOMIAL
[../]
[./yield_fcn]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./mc_int_auxk]
type = MaterialStdVectorAux
index = 0
property = plastic_internal_parameter
variable = mc_int
[../]
[./yield_fcn_auxk]
type = MaterialStdVectorAux
index = 0
property = plastic_yield_function
variable = yield_fcn
[../]
[]
[Postprocessors]
[./s_xx]
type = PointValue
point = '0 0 0'
variable = stress_xx
[../]
[./s_xy]
type = PointValue
point = '0 0 0'
variable = stress_xy
[../]
[./s_xz]
type = PointValue
point = '0 0 0'
variable = stress_xz
[../]
[./s_yy]
type = PointValue
point = '0 0 0'
variable = stress_yy
[../]
[./s_yz]
type = PointValue
point = '0 0 0'
variable = stress_yz
[../]
[./s_zz]
type = PointValue
point = '0 0 0'
variable = stress_zz
[../]
[./internal]
type = PointValue
point = '0 0 0'
variable = mc_int
[../]
[./f]
type = PointValue
point = '0 0 0'
variable = yield_fcn
[../]
[]
[UserObjects]
[./ts]
type = SolidMechanicsHardeningConstant
value = 1E5
[../]
[./cs]
type = SolidMechanicsHardeningConstant
value = 1E5
[../]
[./mc_coh]
type = SolidMechanicsHardeningConstant
value = 10
[../]
[./mc_phi]
type = SolidMechanicsHardeningConstant
value = 35
convert_to_radians = true
[../]
[./mc_psi]
type = SolidMechanicsHardeningConstant
value = 5
convert_to_radians = true
[../]
[./dp]
type = SolidMechanicsPlasticDruckerPrager
mc_cohesion = mc_coh
mc_friction_angle = mc_phi
mc_dilation_angle = mc_psi
mc_interpolation_scheme = lode_zero
yield_function_tolerance = 1 # irrelevant here
internal_constraint_tolerance = 1 # irrelevant here
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '0 1E7'
[../]
[./admissible]
type = ComputeMultipleInelasticStress
inelastic_models = mc
perform_finite_strain_rotations = false
[../]
[./mc]
type = CappedDruckerPragerStressUpdate
DP_model = dp
tensile_strength = ts
compressive_strength = cs
yield_function_tol = 1E-8
tip_smoother = 8
smoothing_tol = 1E-7
[../]
[]
[Executioner]
end_time = 10
dt = 1
type = Transient
[]
[Outputs]
file_base = small_deform3_lode_zero
exodus = false
[./csv]
type = CSV
[../]
[]
(modules/porous_flow/test/tests/dirackernels/injection_with_plasticity.i)
# Example: Injection into a uniform aquifer 10 x 10 x 5 km
# Drucker-Prager deformation
# Darcy flow
gravity = -9.81
solid_density = 2350
fluid_density = 1000
porosity0 = 0.1
[Mesh]
type = GeneratedMesh
dim = 3
xmin = 0
xmax = 1e4
ymin = 0
ymax = 1e4
zmax = 0
zmin = -5e3
nx = 2
ny = 2
nz = 2
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 ${gravity}'
displacements = 'disp_x disp_y disp_z'
strain_at_nearest_qp = true
[]
[FluidProperties]
[simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0 # Not doing a thermal simulation
bulk_modulus = 2E9
density0 = ${fluid_density}
viscosity = 5E-4
[]
[]
[PorousFlowFullySaturated]
coupling_type = HydroMechanical
porepressure = pp
dictator_name = dictator
fp = simple_fluid
add_darcy_aux = false
add_stress_aux = false
stabilization = none
[]
[Variables]
[disp_x]
[]
[disp_y]
[]
[disp_z]
[]
[pp]
scaling = 1E6
[InitialCondition]
type = FunctionIC
function = ini_pp
[]
[]
[]
[Functions]
[ini_stress]
type = ParsedFunction
expression = '-${gravity} * z * (${solid_density} - ${fluid_density}) * (1.0 - ${porosity0})' # initial effective stress that should result from weight force
[]
[ini_pp]
type = ParsedFunction
expression = '${gravity} * z * ${fluid_density} + 1E5'
[]
[]
[BCs]
[p_top]
type = FunctionDirichletBC
variable = pp
boundary = front
function = ini_pp
[]
[x_roller]
type = DirichletBC
variable = disp_x
boundary = 'left right'
value = 0
[]
[y_roller]
type = DirichletBC
variable = disp_y
boundary = 'top bottom'
value = 0
[]
[z_confined]
type = DirichletBC
variable = disp_z
boundary = 'back front'
value = 0
[]
[]
[UserObjects]
[pls_total_outflow_mass]
type = PorousFlowSumQuantity
[]
# Cohesion
[mc_coh]
type = TensorMechanicsHardeningConstant
value = 6.0E6
[]
# Friction angle
[mc_phi]
type = TensorMechanicsHardeningConstant
value = 35.0
convert_to_radians = true
[]
# Dilation angle
[mc_psi]
type = TensorMechanicsHardeningConstant
value = 2
convert_to_radians = true
[]
# Drucker-Prager objects
[dp]
type = TensorMechanicsPlasticDruckerPragerHyperbolic
mc_cohesion = mc_coh
mc_friction_angle = mc_phi
mc_dilation_angle = mc_psi
yield_function_tolerance = 1E-3
internal_constraint_tolerance = 1E-6
[]
# Tensile strength
[tens]
type = TensorMechanicsHardeningConstant
value = 3.0E6
[]
# Compressive strength (cap on yield envelope)
[compr_all]
type = TensorMechanicsHardeningConstant
value = 1E10
[]
[]
[Materials]
[strain]
type = ComputeIncrementalSmallStrain
eigenstrain_names = eigenstrain_all
[]
[eigenstrain_all]
type = ComputeEigenstrainFromInitialStress
initial_stress = 'ini_stress 0 0 0 ini_stress 0 0 0 ini_stress'
eigenstrain_name = eigenstrain_all
[]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
bulk_modulus = 3.3333E9
shear_modulus = 2.5E9
[]
[dp_mat]
type = CappedDruckerPragerStressUpdate
DP_model = dp
tensile_strength = tens
compressive_strength = compr_all
smoothing_tol = 1E5
yield_function_tol = 1E-3
tip_smoother = 0
[]
[stress]
type = ComputeMultipleInelasticStress
inelastic_models = dp_mat
[]
# Permeability
[permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-13 0 0 0 1E-13 0 0 0 1E-13'
[]
# Porosity
[porosity]
type = PorousFlowPorosity
porosity_zero = ${porosity0}
biot_coefficient = 1.0
solid_bulk = 1.0 # Required but irrelevant when biot_coefficient is unity
mechanical = true
fluid = true
[]
# Density of saturated rock
[density]
type = PorousFlowTotalGravitationalDensityFullySaturatedFromPorosity
rho_s = ${solid_density}
[]
[]
[DiracKernels]
[pls]
type = PorousFlowPolyLineSink
variable = pp
SumQuantityUO = pls_total_outflow_mass
point_file = two_nodes.bh
function_of = pressure
fluid_phase = 0
p_or_t_vals = '0 1E7'
fluxes = '-1.59 -1.59'
[]
[]
[Preconditioning]
[usual]
type = SMP
full = true
[]
[]
[Executioner]
solve_type = Newton
type = Transient
dt = 1E6
end_time = 1E6
nl_rel_tol = 1E-7
[]
[Outputs]
exodus = true
[]
(modules/solid_mechanics/test/tests/capped_drucker_prager/small_deform3_native.i)
# apply repeated stretches in x z directions, and smaller stretches along the y direction,
# so that sigma_I = sigma_II,
# which means that lode angle = 30deg.
# The allows yield surface in meridional plane to be mapped out
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[./all]
add_variables = true
incremental = true
generate_output = 'stress_xx stress_xy stress_xz stress_yy stress_yz stress_zz'
[../]
[]
[BCs]
[./x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'front back'
function = '1E-6*x*t'
[../]
[./y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'front back'
function = '-1.35E-6*y*t'
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = 'front back'
function = '1E-6*z*t'
[../]
[]
[AuxVariables]
[./mc_int]
order = CONSTANT
family = MONOMIAL
[../]
[./yield_fcn]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./mc_int_auxk]
type = MaterialStdVectorAux
index = 0
property = plastic_internal_parameter
variable = mc_int
[../]
[./yield_fcn_auxk]
type = MaterialStdVectorAux
index = 0
property = plastic_yield_function
variable = yield_fcn
[../]
[]
[Postprocessors]
[./s_xx]
type = PointValue
point = '0 0 0'
variable = stress_xx
[../]
[./s_xy]
type = PointValue
point = '0 0 0'
variable = stress_xy
[../]
[./s_xz]
type = PointValue
point = '0 0 0'
variable = stress_xz
[../]
[./s_yy]
type = PointValue
point = '0 0 0'
variable = stress_yy
[../]
[./s_yz]
type = PointValue
point = '0 0 0'
variable = stress_yz
[../]
[./s_zz]
type = PointValue
point = '0 0 0'
variable = stress_zz
[../]
[./internal]
type = PointValue
point = '0 0 0'
variable = mc_int
[../]
[./f]
type = PointValue
point = '0 0 0'
variable = yield_fcn
[../]
[]
[UserObjects]
[./ts]
type = SolidMechanicsHardeningConstant
value = 1E5
[../]
[./cs]
type = SolidMechanicsHardeningConstant
value = 1E5
[../]
[./mc_coh]
type = SolidMechanicsHardeningConstant
value = 10
[../]
[./mc_phi]
type = SolidMechanicsHardeningConstant
value = 35
convert_to_radians = true
[../]
[./mc_psi]
type = SolidMechanicsHardeningConstant
value = 5
convert_to_radians = true
[../]
[./dp]
type = SolidMechanicsPlasticDruckerPrager
mc_cohesion = mc_coh
mc_friction_angle = mc_phi
mc_dilation_angle = mc_psi
mc_interpolation_scheme = native
yield_function_tolerance = 1 # irrelevant here
internal_constraint_tolerance = 1 # irrelevant here
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '0 1E7'
[../]
[./admissible]
type = ComputeMultipleInelasticStress
inelastic_models = mc
perform_finite_strain_rotations = false
[../]
[./mc]
type = CappedDruckerPragerStressUpdate
DP_model = dp
tensile_strength = ts
compressive_strength = cs
yield_function_tol = 1E-8
tip_smoother = 8
smoothing_tol = 1E-7
[../]
[]
[Executioner]
end_time = 10
dt = 1
type = Transient
[]
[Outputs]
file_base = small_deform3_native
exodus = false
[./csv]
type = CSV
[../]
[]
(modules/solid_mechanics/test/tests/jacobian/cto28.i)
#Cosserat capped weak plane and capped drucker prager
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[Kernels]
[./cx_elastic]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./cy_elastic]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./cz_elastic]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[]
[UserObjects]
[./ts]
type = SolidMechanicsHardeningConstant
value = 10
[../]
[./cs]
type = SolidMechanicsHardeningConstant
value = 10
[../]
[./mc_coh]
type = SolidMechanicsHardeningConstant
value = 10
[../]
[./phi]
type = SolidMechanicsHardeningConstant
value = 0.8
[../]
[./psi]
type = SolidMechanicsHardeningConstant
value = 0.4
[../]
[./dp]
type = SolidMechanicsPlasticDruckerPragerHyperbolic
mc_cohesion = mc_coh
mc_friction_angle = phi
mc_dilation_angle = psi
yield_function_tolerance = 1E-11 # irrelevant here
internal_constraint_tolerance = 1E-9 # irrelevant here
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 10.0
poissons_ratio = 0.25
[../]
[./strain]
type = ComputeIncrementalSmallStrain
eigenstrain_names = ini_stress
[../]
[./ini_stress]
type = ComputeEigenstrainFromInitialStress
initial_stress = '10 0 0 0 10 0 0 0 10'
eigenstrain_name = ini_stress
[../]
[./admissible]
type = ComputeMultipleInelasticStress
inelastic_models = 'dp'
relative_tolerance = 2.0
absolute_tolerance = 1E6
max_iterations = 1
[../]
[./dp]
type = CappedDruckerPragerStressUpdate
base_name = dp
DP_model = dp
tensile_strength = ts
compressive_strength = cs
yield_function_tol = 1E-11
tip_smoother = 1
smoothing_tol = 1
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
solve_type = 'NEWTON'
end_time = 1
dt = 1
type = Transient
[]
(modules/solid_mechanics/test/tests/multiple_two_parameter_plasticity/cycled_dp_then_wp.i)
# Use ComputeMultipleInelasticStress with two inelastic models: CappedDruckerPrager and CappedWeakPlane.
# The relative_tolerance and absolute_tolerance parameters are set very large so that
# only one iteration is performed. This is the algorithm that FLAC uses to model
# jointed rocks, only Capped-Mohr-Coulomb is used instead of CappedDruckerPrager
#
# In this test "cycle_models=true" so that in the first timestep only
# CappedDruckerPrager is used, while in the second timestep only
# CappedWeakPlane is used.
#
# initial_stress = diag(1E3, 1E3, 1E3)
# The CappedDruckerPrager has tensile strength 3E2 and large cohesion,
# so the stress initially returns to diag(1E2, 1E2, 1E2)
# The CappedWeakPlane has tensile strength zero and large cohesion,
# so the stress returns to diag(1E2 - v/(1-v)*1E2, 1E2 - v/(1-v)*1E2, 0)
# where v=0.2 is the Poisson's ratio
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[./all]
add_variables = true
incremental = true
eigenstrain_names = ini_stress
generate_output = 'stress_xx stress_xy stress_xz stress_yy stress_yz stress_zz'
[../]
[]
[BCs]
[./x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'front back'
function = 0
[../]
[./y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'front back'
function = 0
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = 'front back'
function = 0
[../]
[]
[AuxVariables]
[./yield_fcn_dp]
order = CONSTANT
family = MONOMIAL
[../]
[./yield_fcn_wp]
order = CONSTANT
family = MONOMIAL
[../]
[./tensile_cdp]
order = CONSTANT
family = MONOMIAL
[../]
[./tensile_cwp]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./yield_fcn_dp_auxk]
type = MaterialStdVectorAux
index = 1 # this is the tensile yield function - it should be zero
property = cdp_plastic_yield_function
variable = yield_fcn_dp
[../]
[./yield_fcn_wp_auxk]
type = MaterialStdVectorAux
index = 1 # this is the tensile yield function - it should be zero
property = cwp_plastic_yield_function
variable = yield_fcn_wp
[../]
[./tensile_cdp]
type = MaterialStdVectorAux
index = 1
property = cdp_plastic_internal_parameter
variable = tensile_cdp
[../]
[./tensile_cwp]
type = MaterialStdVectorAux
index = 1
property = cwp_plastic_internal_parameter
variable = tensile_cwp
[../]
[]
[Postprocessors]
[./s_xx]
type = PointValue
point = '0 0 0'
variable = stress_xx
[../]
[./s_xy]
type = PointValue
point = '0 0 0'
variable = stress_xy
[../]
[./s_xz]
type = PointValue
point = '0 0 0'
variable = stress_xz
[../]
[./s_yy]
type = PointValue
point = '0 0 0'
variable = stress_yy
[../]
[./s_yz]
type = PointValue
point = '0 0 0'
variable = stress_yz
[../]
[./s_zz]
type = PointValue
point = '0 0 0'
variable = stress_zz
[../]
[./i_cdp]
type = PointValue
point = '0 0 0'
variable = tensile_cdp
[../]
[./i_cwp]
type = PointValue
point = '0 0 0'
variable = tensile_cwp
[../]
[]
[UserObjects]
[./ts]
type = SolidMechanicsHardeningConstant
value = 300
[../]
[./cs]
type = SolidMechanicsHardeningConstant
value = 1E4
[../]
[./mc_coh]
type = SolidMechanicsHardeningConstant
value = 1E4
[../]
[./mc_phi]
type = SolidMechanicsHardeningConstant
value = 20
convert_to_radians = true
[../]
[./mc_psi]
type = SolidMechanicsHardeningConstant
value = 0
[../]
[./dp]
type = SolidMechanicsPlasticDruckerPrager
mc_cohesion = mc_coh
mc_friction_angle = mc_phi
mc_dilation_angle = mc_psi
internal_constraint_tolerance = 1 # irrelevant here
yield_function_tolerance = 1 # irrelevant here
[../]
[./wp_coh]
type = SolidMechanicsHardeningConstant
value = 1E4
[../]
[./wp_tanphi]
type = SolidMechanicsHardeningConstant
value = 0.5
[../]
[./wp_tanpsi]
type = SolidMechanicsHardeningConstant
value = 0.1111077
[../]
[./wp_t_strength]
type = SolidMechanicsHardeningConstant
value = 0
[../]
[./wp_c_strength]
type = SolidMechanicsHardeningConstant
value = 1E4
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
poissons_ratio = 0.2
youngs_modulus = 1.0
[../]
[./ini_stress]
type = ComputeEigenstrainFromInitialStress
initial_stress = '1E3 0 0 0 1E3 0 0 0 1E3'
eigenstrain_name = ini_stress
[../]
[./admissible]
type = ComputeMultipleInelasticStress
relative_tolerance = 1E4
absolute_tolerance = 2
inelastic_models = 'cdp cwp'
perform_finite_strain_rotations = false
cycle_models = true
[../]
[./cdp]
type = CappedDruckerPragerStressUpdate
base_name = cdp
DP_model = dp
tensile_strength = ts
compressive_strength = cs
yield_function_tol = 1E-5
tip_smoother = 1E3
smoothing_tol = 1E3
[../]
[./cwp]
type = CappedWeakPlaneStressUpdate
base_name = cwp
cohesion = wp_coh
tan_friction_angle = wp_tanphi
tan_dilation_angle = wp_tanpsi
tensile_strength = wp_t_strength
compressive_strength = wp_c_strength
tip_smoother = 1E3
smoothing_tol = 1E3
yield_function_tol = 1E-5
[../]
[]
[Executioner]
end_time = 2
dt = 1
type = Transient
[]
[Outputs]
file_base = cycled_dp_then_wp
csv = true
[]
(modules/solid_mechanics/test/tests/capped_drucker_prager/small_deform3_inner_tip.i)
# apply repeated stretches in x z directions, and smaller stretches along the y direction,
# so that sigma_I = sigma_II,
# which means that lode angle = 30deg.
# The allows yield surface in meridional plane to be mapped out
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[./all]
add_variables = true
incremental = true
generate_output = 'stress_xx stress_xy stress_xz stress_yy stress_yz stress_zz'
[../]
[]
[BCs]
[./x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'front back'
function = '1E-6*x*t'
[../]
[./y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'front back'
function = '-1.7E-6*y*t'
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = 'front back'
function = '1E-6*z*t'
[../]
[]
[AuxVariables]
[./mc_int]
order = CONSTANT
family = MONOMIAL
[../]
[./yield_fcn]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./mc_int_auxk]
type = MaterialStdVectorAux
index = 0
property = plastic_internal_parameter
variable = mc_int
[../]
[./yield_fcn_auxk]
type = MaterialStdVectorAux
index = 0
property = plastic_yield_function
variable = yield_fcn
[../]
[]
[Postprocessors]
[./s_xx]
type = PointValue
point = '0 0 0'
variable = stress_xx
[../]
[./s_xy]
type = PointValue
point = '0 0 0'
variable = stress_xy
[../]
[./s_xz]
type = PointValue
point = '0 0 0'
variable = stress_xz
[../]
[./s_yy]
type = PointValue
point = '0 0 0'
variable = stress_yy
[../]
[./s_yz]
type = PointValue
point = '0 0 0'
variable = stress_yz
[../]
[./s_zz]
type = PointValue
point = '0 0 0'
variable = stress_zz
[../]
[./internal]
type = PointValue
point = '0 0 0'
variable = mc_int
[../]
[./f]
type = PointValue
point = '0 0 0'
variable = yield_fcn
[../]
[]
[UserObjects]
[./ts]
type = SolidMechanicsHardeningConstant
value = 1E5
[../]
[./cs]
type = SolidMechanicsHardeningConstant
value = 1E5
[../]
[./mc_coh]
type = SolidMechanicsHardeningConstant
value = 10
[../]
[./mc_phi]
type = SolidMechanicsHardeningConstant
value = 35
convert_to_radians = true
[../]
[./mc_psi]
type = SolidMechanicsHardeningConstant
value = 5
convert_to_radians = true
[../]
[./dp]
type = SolidMechanicsPlasticDruckerPrager
mc_cohesion = mc_coh
mc_friction_angle = mc_phi
mc_dilation_angle = mc_psi
mc_interpolation_scheme = inner_tip
yield_function_tolerance = 1 # irrelevant here
internal_constraint_tolerance = 1 # irrelevant here
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '0 1E7'
[../]
[./admissible]
type = ComputeMultipleInelasticStress
inelastic_models = mc
perform_finite_strain_rotations = false
[../]
[./mc]
type = CappedDruckerPragerStressUpdate
DP_model = dp
tensile_strength = ts
compressive_strength = cs
yield_function_tol = 1E-8
tip_smoother = 8
smoothing_tol = 1E-7
[../]
[]
[Executioner]
end_time = 10
dt = 1
type = Transient
[]
[Outputs]
file_base = small_deform3_inner_tip
exodus = false
[./csv]
type = CSV
[../]
[]
(modules/solid_mechanics/test/tests/jacobian/cto26.i)
# CappedDruckerPrager
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
block = 0
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[Kernels]
[SolidMechanics]
displacements = 'disp_x disp_y disp_z'
[../]
[]
[UserObjects]
[./ts]
type = SolidMechanicsHardeningCubic
value_0 = 1
value_residual = 2
internal_limit = 100
[../]
[./cs]
type = SolidMechanicsHardeningCubic
value_0 = 5
value_residual = 3
internal_limit = 100
[../]
[./mc_coh]
type = SolidMechanicsHardeningCubic
value_0 = 10
value_residual = 1
internal_limit = 100
[../]
[./phi]
type = SolidMechanicsHardeningCubic
value_0 = 0.8
value_residual = 0.4
internal_limit = 50
[../]
[./psi]
type = SolidMechanicsHardeningCubic
value_0 = 0.4
value_residual = 0
internal_limit = 10
[../]
[./dp]
type = SolidMechanicsPlasticDruckerPragerHyperbolic
mc_cohesion = mc_coh
mc_friction_angle = phi
mc_dilation_angle = psi
yield_function_tolerance = 1E-11 # irrelevant here
internal_constraint_tolerance = 1E-9 # irrelevant here
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = 0
lambda = 0.1
shear_modulus = 1.0
[../]
[./strain]
type = ComputeIncrementalSmallStrain
displacements = 'disp_x disp_y disp_z'
eigenstrain_names = ini_stress
[../]
[./ini_stress]
type = ComputeEigenstrainFromInitialStress
initial_stress = '6 5 4 5 7 2 4 2 2'
eigenstrain_name = ini_stress
[../]
[./admissible]
type = ComputeMultipleInelasticStress
inelastic_models = dp
[../]
[./dp]
type = CappedDruckerPragerStressUpdate
DP_model = dp
tensile_strength = ts
compressive_strength = cs
yield_function_tol = 1E-11
tip_smoother = 1
smoothing_tol = 1
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
[]
(modules/solid_mechanics/test/tests/multiple_two_parameter_plasticity/dp_and_wp.i)
# Use ComputeMultipleInelasticStress with two inelastic models: CappedDruckerPrager and CappedWeakPlane.
# The relative_tolerance and absolute_tolerance parameters are set small so that many
# Picard iterations need to be performed.
#
# The CappedDruckerPrager has tensile strength 3E2 and large cohesion,
# and the return-map sets stress = trial_stress - diag(d, d, d), for
# some d to be determined
# The CappedWeakPlane has tensile strength zero and large cohesion,
# and the return-map sets stress = diag(t - v*w/(1-v), t - v*w/(1-v), t - w)
# where t is trial stress, v is Poisson's ratio, and w is to be determined
#
# d and w are determined by demanding that the final stress shouldn't depend
# on the order of return-mapping (DP first then WP, or WP first then DP).
#
# Let the initial_stress = diag(I, I, I).
# The returned stress is diag(I - d - v*w/(1-v), I - d - v*w/(1-v), I - d - w). This
# must obey Tr(stress) <= dp_tensile_strength, and I-d-w <= wp_tensile_strength.
#
# For I = 1E3, and v = 0.2, the solution is d = 800 and w = 200, with
# stress = diag(150, 150, 0)
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[./all]
add_variables = true
incremental = true
eigenstrain_names = ini_stress
generate_output = 'stress_xx stress_xy stress_xz stress_yy stress_yz stress_zz'
[../]
[]
[BCs]
[./x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'front back'
function = 0
[../]
[./y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'front back'
function = 0
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = 'front back'
function = 0
[../]
[]
[AuxVariables]
[./yield_fcn_dp]
order = CONSTANT
family = MONOMIAL
[../]
[./yield_fcn_wp]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./yield_fcn_dp_auxk]
type = MaterialStdVectorAux
index = 1 # this is the tensile yield function - it should be zero
property = cdp_plastic_yield_function
variable = yield_fcn_dp
[../]
[./yield_fcn_wp_auxk]
type = MaterialStdVectorAux
index = 1 # this is the tensile yield function - it should be zero
property = cwp_plastic_yield_function
variable = yield_fcn_wp
[../]
[]
[Postprocessors]
[./s_xx]
type = PointValue
point = '0 0 0'
variable = stress_xx
[../]
[./s_xy]
type = PointValue
point = '0 0 0'
variable = stress_xy
[../]
[./s_xz]
type = PointValue
point = '0 0 0'
variable = stress_xz
[../]
[./s_yy]
type = PointValue
point = '0 0 0'
variable = stress_yy
[../]
[./s_yz]
type = PointValue
point = '0 0 0'
variable = stress_yz
[../]
[./s_zz]
type = PointValue
point = '0 0 0'
variable = stress_zz
[../]
[./f_dp]
type = PointValue
point = '0 0 0'
variable = yield_fcn_dp
[../]
[./f_wp]
type = PointValue
point = '0 0 0'
variable = yield_fcn_wp
[../]
[]
[UserObjects]
[./ts]
type = SolidMechanicsHardeningConstant
value = 300
[../]
[./cs]
type = SolidMechanicsHardeningConstant
value = 1E4
[../]
[./mc_coh]
type = SolidMechanicsHardeningConstant
value = 1E4
[../]
[./mc_phi]
type = SolidMechanicsHardeningConstant
value = 20
convert_to_radians = true
[../]
[./mc_psi]
type = SolidMechanicsHardeningConstant
value = 0
[../]
[./dp]
type = SolidMechanicsPlasticDruckerPrager
mc_cohesion = mc_coh
mc_friction_angle = mc_phi
mc_dilation_angle = mc_psi
internal_constraint_tolerance = 1 # irrelevant here
yield_function_tolerance = 1 # irrelevant here
[../]
[./wp_coh]
type = SolidMechanicsHardeningConstant
value = 1E4
[../]
[./wp_tanphi]
type = SolidMechanicsHardeningConstant
value = 0.5
[../]
[./wp_tanpsi]
type = SolidMechanicsHardeningConstant
value = 0.1111077
[../]
[./wp_t_strength]
type = SolidMechanicsHardeningConstant
value = 0
[../]
[./wp_c_strength]
type = SolidMechanicsHardeningConstant
value = 1E4
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
poissons_ratio = 0.2
youngs_modulus = 1E7
[../]
[./ini_stress]
type = ComputeEigenstrainFromInitialStress
initial_stress = '1E3 0 0 0 1E3 0 0 0 1E3'
eigenstrain_name = ini_stress
[../]
[./admissible]
type = ComputeMultipleInelasticStress
relative_tolerance = 1E-8
inelastic_models = 'cdp cwp'
perform_finite_strain_rotations = false
[../]
[./cdp]
type = CappedDruckerPragerStressUpdate
base_name = cdp
DP_model = dp
tensile_strength = ts
compressive_strength = cs
yield_function_tol = 1E-5
tip_smoother = 1E3
smoothing_tol = 1E3
[../]
[./cwp]
type = CappedWeakPlaneStressUpdate
base_name = cwp
cohesion = wp_coh
tan_friction_angle = wp_tanphi
tan_dilation_angle = wp_tanpsi
tensile_strength = wp_t_strength
compressive_strength = wp_c_strength
tip_smoother = 1E3
smoothing_tol = 1E3
yield_function_tol = 1E-5
[../]
[]
[Executioner]
end_time = 1
dt = 1
type = Transient
[]
[Outputs]
file_base = dp_and_wp
csv = true
[]
(modules/solid_mechanics/test/tests/capped_drucker_prager/small_deform3_outer_tip.i)
# apply repeated stretches in x z directions, and smaller stretches along the y direction,
# so that sigma_I = sigma_II,
# which means that lode angle = 30deg.
# The allows yield surface in meridional plane to be mapped out
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[./all]
add_variables = true
incremental = true
generate_output = 'stress_xx stress_xy stress_xz stress_yy stress_yz stress_zz'
[../]
[]
[BCs]
[./x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'front back'
function = '1E-6*x*t'
[../]
[./y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'front back'
function = '-1.7E-6*y*t'
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = 'front back'
function = '1E-6*z*t'
[../]
[]
[AuxVariables]
[./mc_int]
order = CONSTANT
family = MONOMIAL
[../]
[./yield_fcn]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./mc_int_auxk]
type = MaterialStdVectorAux
index = 0
property = plastic_internal_parameter
variable = mc_int
[../]
[./yield_fcn_auxk]
type = MaterialStdVectorAux
index = 0
property = plastic_yield_function
variable = yield_fcn
[../]
[]
[Postprocessors]
[./s_xx]
type = PointValue
point = '0 0 0'
variable = stress_xx
[../]
[./s_xy]
type = PointValue
point = '0 0 0'
variable = stress_xy
[../]
[./s_xz]
type = PointValue
point = '0 0 0'
variable = stress_xz
[../]
[./s_yy]
type = PointValue
point = '0 0 0'
variable = stress_yy
[../]
[./s_yz]
type = PointValue
point = '0 0 0'
variable = stress_yz
[../]
[./s_zz]
type = PointValue
point = '0 0 0'
variable = stress_zz
[../]
[./internal]
type = PointValue
point = '0 0 0'
variable = mc_int
[../]
[./f]
type = PointValue
point = '0 0 0'
variable = yield_fcn
[../]
[]
[UserObjects]
[./ts]
type = SolidMechanicsHardeningConstant
value = 1E5
[../]
[./cs]
type = SolidMechanicsHardeningConstant
value = 1E5
[../]
[./mc_coh]
type = SolidMechanicsHardeningConstant
value = 10
[../]
[./mc_phi]
type = SolidMechanicsHardeningConstant
value = 35
convert_to_radians = true
[../]
[./mc_psi]
type = SolidMechanicsHardeningConstant
value = 5
convert_to_radians = true
[../]
[./dp]
type = SolidMechanicsPlasticDruckerPrager
mc_cohesion = mc_coh
mc_friction_angle = mc_phi
mc_dilation_angle = mc_psi
mc_interpolation_scheme = outer_tip
yield_function_tolerance = 1 # irrelevant here
internal_constraint_tolerance = 1 # irrelevant here
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '0 1E7'
[../]
[./admissible]
type = ComputeMultipleInelasticStress
inelastic_models = mc
perform_finite_strain_rotations = false
[../]
[./mc]
type = CappedDruckerPragerStressUpdate
DP_model = dp
tensile_strength = ts
compressive_strength = cs
yield_function_tol = 1E-8
tip_smoother = 8
smoothing_tol = 1E-7
[../]
[]
[Executioner]
end_time = 10
dt = 1
type = Transient
[]
[Outputs]
file_base = small_deform3_outer_tip
exodus = false
[./csv]
type = CSV
[../]
[]
(modules/solid_mechanics/test/tests/jacobian/cto27.i)
# CappedDruckerPrager and CappedWeakPlane, both with all parameters softening/hardening.
# With large tolerance in ComputeMultipleInelasticStress so that only 1 iteration is performed
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
block = 0
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[Kernels]
[SolidMechanics]
displacements = 'disp_x disp_y disp_z'
[../]
[]
[UserObjects]
[./ts]
type = SolidMechanicsHardeningCubic
value_0 = 1
value_residual = 2
internal_limit = 100
[../]
[./cs]
type = SolidMechanicsHardeningCubic
value_0 = 5
value_residual = 3
internal_limit = 100
[../]
[./mc_coh]
type = SolidMechanicsHardeningCubic
value_0 = 10
value_residual = 1
internal_limit = 100
[../]
[./phi]
type = SolidMechanicsHardeningCubic
value_0 = 0.8
value_residual = 0.4
internal_limit = 50
[../]
[./psi]
type = SolidMechanicsHardeningCubic
value_0 = 0.4
value_residual = 0
internal_limit = 10
[../]
[./dp]
type = SolidMechanicsPlasticDruckerPragerHyperbolic
mc_cohesion = mc_coh
mc_friction_angle = phi
mc_dilation_angle = psi
yield_function_tolerance = 1E-11 # irrelevant here
internal_constraint_tolerance = 1E-9 # irrelevant here
[../]
[./wp_ts]
type = SolidMechanicsHardeningExponential
value_0 = 100
value_residual = 100
rate = 1
[../]
[./wp_cs]
type = SolidMechanicsHardeningCubic
value_0 = 1
value_residual = 0
internal_0 = -2
internal_limit = 0
[../]
[./wp_coh]
type = SolidMechanicsHardeningExponential
value_0 = 1
value_residual = 2
rate = 1
[../]
[./wp_tanphi]
type = SolidMechanicsHardeningExponential
value_0 = 1.0
value_residual = 0.5
rate = 2
[../]
[./wp_tanpsi]
type = SolidMechanicsHardeningExponential
value_0 = 0.1
value_residual = 0.05
rate = 3
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = 0
lambda = 0.1
shear_modulus = 1.0
[../]
[./strain]
type = ComputeIncrementalSmallStrain
displacements = 'disp_x disp_y disp_z'
eigenstrain_names = ini_stress
[../]
[./ini_stress]
type = ComputeEigenstrainFromInitialStress
initial_stress = '6 5 4 5 7 2 4 2 2'
eigenstrain_name = ini_stress
[../]
[./admissible]
type = ComputeMultipleInelasticStress
inelastic_models = 'dp wp'
relative_tolerance = 1E4
absolute_tolerance = 2
tangent_operator = nonlinear
[../]
[./dp]
type = CappedDruckerPragerStressUpdate
base_name = cdp
DP_model = dp
tensile_strength = ts
compressive_strength = cs
yield_function_tol = 1E-11
tip_smoother = 1
smoothing_tol = 1
[../]
[./wp]
type = CappedWeakPlaneStressUpdate
base_name = cwp
cohesion = wp_coh
tan_friction_angle = wp_tanphi
tan_dilation_angle = wp_tanpsi
tensile_strength = wp_ts
compressive_strength = wp_cs
tip_smoother = 0
smoothing_tol = 1
yield_function_tol = 1E-11
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
[]
(modules/solid_mechanics/test/tests/jacobian/cto25.i)
# CappedDruckerPrager
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
block = 0
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[Kernels]
[SolidMechanics]
displacements = 'disp_x disp_y disp_z'
[../]
[]
[UserObjects]
[./ts]
type = SolidMechanicsHardeningConstant
value = 10
[../]
[./cs]
type = SolidMechanicsHardeningConstant
value = 10
[../]
[./mc_coh]
type = SolidMechanicsHardeningConstant
value = 10
[../]
[./phi]
type = SolidMechanicsHardeningConstant
value = 0.8
[../]
[./psi]
type = SolidMechanicsHardeningConstant
value = 0.4
[../]
[./dp]
type = SolidMechanicsPlasticDruckerPragerHyperbolic
mc_cohesion = mc_coh
mc_friction_angle = phi
mc_dilation_angle = psi
yield_function_tolerance = 1E-11 # irrelevant here
internal_constraint_tolerance = 1E-9 # irrelevant here
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = 0
lambda = 0.0
shear_modulus = 1.0
[../]
[./strain]
type = ComputeIncrementalSmallStrain
displacements = 'disp_x disp_y disp_z'
eigenstrain_names = ini_stress
[../]
[./ini_stress]
type = ComputeEigenstrainFromInitialStress
initial_stress = '6 5 4 5 7 2 4 2 2'
eigenstrain_name = ini_stress
[../]
[./admissible]
type = ComputeMultipleInelasticStress
inelastic_models = dp
[../]
[./dp]
type = CappedDruckerPragerStressUpdate
DP_model = dp
tensile_strength = ts
compressive_strength = cs
yield_function_tol = 1E-11
tip_smoother = 1
smoothing_tol = 1
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
[]
(modules/solid_mechanics/test/tests/multiple_two_parameter_plasticity/dp_then_wp.i)
# Use ComputeMultipleInelasticStress with two inelastic models: CappedDruckerPrager and CappedWeakPlane.
# The relative_tolerance and absolute_tolerance parameters are set very large so that
# only one iteration is performed. This is the algorithm that FLAC uses to model
# jointed rocks, only Capped-Mohr-Coulomb is used instead of CappedDruckerPrager
#
# initial_stress = diag(1E3, 1E3, 1E3)
# The CappedDruckerPrager has tensile strength 3E2 and large cohesion,
# so the stress initially returns to diag(1E2, 1E2, 1E2)
# The CappedWeakPlane has tensile strength zero and large cohesion,
# so the stress returns to diag(1E2 - v/(1-v)*1E2, 1E2 - v/(1-v)*1E2, 0)
# where v=0.2 is the Poisson's ratio
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[./all]
add_variables = true
incremental = true
eigenstrain_names = ini_stress
generate_output = 'stress_xx stress_xy stress_xz stress_yy stress_yz stress_zz'
[../]
[]
[BCs]
[./x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'front back'
function = 0
[../]
[./y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'front back'
function = 0
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = 'front back'
function = 0
[../]
[]
[AuxVariables]
[./yield_fcn_dp]
order = CONSTANT
family = MONOMIAL
[../]
[./yield_fcn_wp]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./yield_fcn_dp_auxk]
type = MaterialStdVectorAux
index = 1 # this is the tensile yield function - it should be zero
property = cdp_plastic_yield_function
variable = yield_fcn_dp
[../]
[./yield_fcn_wp_auxk]
type = MaterialStdVectorAux
index = 1 # this is the tensile yield function - it should be zero
property = cwp_plastic_yield_function
variable = yield_fcn_wp
[../]
[]
[Postprocessors]
[./s_xx]
type = PointValue
point = '0 0 0'
variable = stress_xx
[../]
[./s_xy]
type = PointValue
point = '0 0 0'
variable = stress_xy
[../]
[./s_xz]
type = PointValue
point = '0 0 0'
variable = stress_xz
[../]
[./s_yy]
type = PointValue
point = '0 0 0'
variable = stress_yy
[../]
[./s_yz]
type = PointValue
point = '0 0 0'
variable = stress_yz
[../]
[./s_zz]
type = PointValue
point = '0 0 0'
variable = stress_zz
[../]
[./f_dp]
type = PointValue
point = '0 0 0'
variable = yield_fcn_dp
[../]
[./f_wp]
type = PointValue
point = '0 0 0'
variable = yield_fcn_wp
[../]
[]
[UserObjects]
[./ts]
type = SolidMechanicsHardeningConstant
value = 300
[../]
[./cs]
type = SolidMechanicsHardeningConstant
value = 1E4
[../]
[./mc_coh]
type = SolidMechanicsHardeningConstant
value = 1E4
[../]
[./mc_phi]
type = SolidMechanicsHardeningConstant
value = 20
convert_to_radians = true
[../]
[./mc_psi]
type = SolidMechanicsHardeningConstant
value = 0
[../]
[./dp]
type = SolidMechanicsPlasticDruckerPrager
mc_cohesion = mc_coh
mc_friction_angle = mc_phi
mc_dilation_angle = mc_psi
internal_constraint_tolerance = 1 # irrelevant here
yield_function_tolerance = 1 # irrelevant here
[../]
[./wp_coh]
type = SolidMechanicsHardeningConstant
value = 1E4
[../]
[./wp_tanphi]
type = SolidMechanicsHardeningConstant
value = 0.5
[../]
[./wp_tanpsi]
type = SolidMechanicsHardeningConstant
value = 0.1111077
[../]
[./wp_t_strength]
type = SolidMechanicsHardeningConstant
value = 0
[../]
[./wp_c_strength]
type = SolidMechanicsHardeningConstant
value = 1E4
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
poissons_ratio = 0.2
youngs_modulus = 1E7
[../]
[./ini_stress]
type = ComputeEigenstrainFromInitialStress
initial_stress = '1E3 0 0 0 1E3 0 0 0 1E3'
eigenstrain_name = ini_stress
[../]
[./admissible]
type = ComputeMultipleInelasticStress
relative_tolerance = 1E4
absolute_tolerance = 2
inelastic_models = 'cdp cwp'
perform_finite_strain_rotations = false
[../]
[./cdp]
type = CappedDruckerPragerStressUpdate
base_name = cdp
DP_model = dp
tensile_strength = ts
compressive_strength = cs
yield_function_tol = 1E-5
tip_smoother = 1E3
smoothing_tol = 1E3
[../]
[./cwp]
type = CappedWeakPlaneStressUpdate
base_name = cwp
cohesion = wp_coh
tan_friction_angle = wp_tanphi
tan_dilation_angle = wp_tanpsi
tensile_strength = wp_t_strength
compressive_strength = wp_c_strength
tip_smoother = 1E3
smoothing_tol = 1E3
yield_function_tol = 1E-5
[../]
[]
[Executioner]
end_time = 1
dt = 1
type = Transient
[]
[Outputs]
file_base = dp_then_wp
csv = true
[]
(modules/solid_mechanics/test/tests/capped_drucker_prager/small_deform2_lode_zero.i)
# apply repeated stretches in x, y and z directions, so that mean_stress = 0
# This maps out the yield surface in the octahedral plane for zero mean stress
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[./all]
add_variables = true
incremental = true
generate_output = 'stress_xx stress_xy stress_xz stress_yy stress_yz stress_zz'
[../]
[]
[BCs]
[./x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'front back'
function = '-1.5E-6*x+2E-6*x*sin(t)'
[../]
[./y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'front back'
function = '2E-6*y*sin(2*t)'
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = 'front back'
function = '-2E-6*z*(sin(t)+sin(2*t))'
[../]
[]
[AuxVariables]
[./yield_fcn]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./yield_fcn_auxk]
type = MaterialStdVectorAux
index = 0
property = plastic_yield_function
variable = yield_fcn
[../]
[]
[Postprocessors]
[./s_xx]
type = PointValue
point = '0 0 0'
variable = stress_xx
[../]
[./s_xy]
type = PointValue
point = '0 0 0'
variable = stress_xy
[../]
[./s_xz]
type = PointValue
point = '0 0 0'
variable = stress_xz
[../]
[./s_yy]
type = PointValue
point = '0 0 0'
variable = stress_yy
[../]
[./s_yz]
type = PointValue
point = '0 0 0'
variable = stress_yz
[../]
[./s_zz]
type = PointValue
point = '0 0 0'
variable = stress_zz
[../]
[./f]
type = PointValue
point = '0 0 0'
variable = yield_fcn
[../]
[./f0]
type = PointValue
point = '0 0 0'
variable = yield_fcn
[../]
[./f1]
type = PointValue
point = '0 0 0'
variable = yield_fcn
[../]
[]
[UserObjects]
[./ts]
type = SolidMechanicsHardeningConstant
value = 1000
[../]
[./cs]
type = SolidMechanicsHardeningConstant
value = 1000
[../]
[./mc_coh]
type = SolidMechanicsHardeningConstant
value = 10
[../]
[./mc_phi]
type = SolidMechanicsHardeningConstant
value = 20
convert_to_radians = true
[../]
[./mc_psi]
type = SolidMechanicsHardeningConstant
value = 0
[../]
[./dp]
type = SolidMechanicsPlasticDruckerPrager
mc_cohesion = mc_coh
mc_friction_angle = mc_phi
mc_dilation_angle = mc_psi
mc_interpolation_scheme = lode_zero
internal_constraint_tolerance = 1 # irrelevant here
yield_function_tolerance = 1 # irrelevant here
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = 0
lambda = 0.0
shear_modulus = 1.0e7
[../]
[./admissible]
type = ComputeMultipleInelasticStress
inelastic_models = cdp
perform_finite_strain_rotations = false
[../]
[./cdp]
type = CappedDruckerPragerStressUpdate
DP_model = dp
tensile_strength = ts
compressive_strength = cs
yield_function_tol = 1E-8
tip_smoother = 4
smoothing_tol = 1E-5
[../]
[]
[Executioner]
end_time = 100
dt = 1
type = Transient
[]
[Outputs]
file_base = small_deform2_lode_zero
exodus = false
[./csv]
type = CSV
[../]
[]
(modules/solid_mechanics/test/tests/capped_drucker_prager/small_deform2_inner_tip.i)
# apply repeated stretches in x, y and z directions, so that mean_stress = 0
# This maps out the yield surface in the octahedral plane for zero mean stress
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[./all]
add_variables = true
incremental = true
generate_output = 'stress_xx stress_xy stress_xz stress_yy stress_yz stress_zz'
[../]
[]
[BCs]
[./x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'front back'
function = '-1.5E-6*x+2E-6*x*sin(t)'
[../]
[./y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'front back'
function = '2E-6*y*sin(2*t)'
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = 'front back'
function = '-2E-6*z*(sin(t)+sin(2*t))'
[../]
[]
[AuxVariables]
[./yield_fcn]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./yield_fcn_auxk]
type = MaterialStdVectorAux
index = 0
property = plastic_yield_function
variable = yield_fcn
[../]
[]
[Postprocessors]
[./s_xx]
type = PointValue
point = '0 0 0'
variable = stress_xx
[../]
[./s_xy]
type = PointValue
point = '0 0 0'
variable = stress_xy
[../]
[./s_xz]
type = PointValue
point = '0 0 0'
variable = stress_xz
[../]
[./s_yy]
type = PointValue
point = '0 0 0'
variable = stress_yy
[../]
[./s_yz]
type = PointValue
point = '0 0 0'
variable = stress_yz
[../]
[./s_zz]
type = PointValue
point = '0 0 0'
variable = stress_zz
[../]
[./f]
type = PointValue
point = '0 0 0'
variable = yield_fcn
[../]
[./f0]
type = PointValue
point = '0 0 0'
variable = yield_fcn
[../]
[./f1]
type = PointValue
point = '0 0 0'
variable = yield_fcn
[../]
[]
[UserObjects]
[./ts]
type = SolidMechanicsHardeningConstant
value = 1000
[../]
[./cs]
type = SolidMechanicsHardeningConstant
value = 1000
[../]
[./mc_coh]
type = SolidMechanicsHardeningConstant
value = 10
[../]
[./mc_phi]
type = SolidMechanicsHardeningConstant
value = 20
convert_to_radians = true
[../]
[./mc_psi]
type = SolidMechanicsHardeningConstant
value = 0
[../]
[./dp]
type = SolidMechanicsPlasticDruckerPrager
mc_cohesion = mc_coh
mc_friction_angle = mc_phi
mc_dilation_angle = mc_psi
mc_interpolation_scheme = inner_tip
internal_constraint_tolerance = 1 # irrelevant here
yield_function_tolerance = 1 # irrelevant here
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '0 1E7'
[../]
[./admissible]
type = ComputeMultipleInelasticStress
inelastic_models = cdp
perform_finite_strain_rotations = false
[../]
[./cdp]
type = CappedDruckerPragerStressUpdate
DP_model = dp
tensile_strength = ts
compressive_strength = cs
yield_function_tol = 1E-8
tip_smoother = 4
smoothing_tol = 1E-5
[../]
[]
[Executioner]
end_time = 100
dt = 1
type = Transient
[]
[Outputs]
file_base = small_deform2_inner_tip
exodus = false
[./csv]
type = CSV
[../]
[]
(modules/solid_mechanics/test/tests/capped_drucker_prager/small_deform2_inner_edge.i)
# apply repeated stretches in x, y and z directions, so that mean_stress = 0
# This maps out the yield surface in the octahedral plane for zero mean stress
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[./all]
add_variables = true
incremental = true
generate_output = 'stress_xx stress_xy stress_xz stress_yy stress_yz stress_zz'
[../]
[]
[BCs]
[./x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'front back'
function = '-1.5E-6*x+2E-6*x*sin(t)'
[../]
[./y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'front back'
function = '2E-6*y*sin(2*t)'
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = 'front back'
function = '-2E-6*z*(sin(t)+sin(2*t))'
[../]
[]
[AuxVariables]
[./yield_fcn]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./yield_fcn_auxk]
type = MaterialStdVectorAux
index = 0
property = plastic_yield_function
variable = yield_fcn
[../]
[]
[Postprocessors]
[./s_xx]
type = PointValue
point = '0 0 0'
variable = stress_xx
[../]
[./s_xy]
type = PointValue
point = '0 0 0'
variable = stress_xy
[../]
[./s_xz]
type = PointValue
point = '0 0 0'
variable = stress_xz
[../]
[./s_yy]
type = PointValue
point = '0 0 0'
variable = stress_yy
[../]
[./s_yz]
type = PointValue
point = '0 0 0'
variable = stress_yz
[../]
[./s_zz]
type = PointValue
point = '0 0 0'
variable = stress_zz
[../]
[./f]
type = PointValue
point = '0 0 0'
variable = yield_fcn
[../]
[./f0]
type = PointValue
point = '0 0 0'
variable = yield_fcn
[../]
[./f1]
type = PointValue
point = '0 0 0'
variable = yield_fcn
[../]
[]
[UserObjects]
[./ts]
type = SolidMechanicsHardeningConstant
value = 1000
[../]
[./cs]
type = SolidMechanicsHardeningConstant
value = 1000
[../]
[./mc_coh]
type = SolidMechanicsHardeningConstant
value = 10
[../]
[./mc_phi]
type = SolidMechanicsHardeningConstant
value = 20
convert_to_radians = true
[../]
[./mc_psi]
type = SolidMechanicsHardeningConstant
value = 0
[../]
[./dp]
type = SolidMechanicsPlasticDruckerPrager
mc_cohesion = mc_coh
mc_friction_angle = mc_phi
mc_dilation_angle = mc_psi
mc_interpolation_scheme = inner_edge
internal_constraint_tolerance = 1 # irrelevant here
yield_function_tolerance = 1 # irrelevant here
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = 0
lambda = 0.0
shear_modulus = 1.0e7
[../]
[./admissible]
type = ComputeMultipleInelasticStress
inelastic_models = cdp
perform_finite_strain_rotations = false
[../]
[./cdp]
type = CappedDruckerPragerStressUpdate
DP_model = dp
tensile_strength = ts
compressive_strength = cs
yield_function_tol = 1E-8
tip_smoother = 4
smoothing_tol = 1E-5
[../]
[]
[Executioner]
end_time = 100
dt = 1
type = Transient
[]
[Outputs]
file_base = small_deform2_inner_edge
exodus = false
[./csv]
type = CSV
[../]
[]
(modules/solid_mechanics/test/tests/capped_drucker_prager/random.i)
# capped drucker-prager
# apply many random large deformations, checking that the algorithm returns correctly to
# the yield surface each time.
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1000
ny = 125
nz = 1
xmin = 0
xmax = 1000
ymin = 0
ymax = 125
zmin = 0
zmax = 1
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Physics/SolidMechanics/QuasiStatic]
[./all]
add_variables = true
incremental = true
strain = finite
[../]
[]
[ICs]
[./x]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_x
[../]
[./y]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_y
[../]
[./z]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_z
[../]
[]
[BCs]
[./x]
type = FunctionDirichletBC
variable = disp_x
boundary = 'front back'
function = '0'
[../]
[./y]
type = FunctionDirichletBC
variable = disp_y
boundary = 'front back'
function = '0'
[../]
[./z]
type = FunctionDirichletBC
variable = disp_z
boundary = 'front back'
function = '0'
[../]
[]
[AuxVariables]
[./shear_yield_fcn]
order = CONSTANT
family = MONOMIAL
[../]
[./tensile_yield_fcn]
order = CONSTANT
family = MONOMIAL
[../]
[./compressive_yield_fcn]
order = CONSTANT
family = MONOMIAL
[../]
[./iter]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./shear_yield_fcn_auxk]
type = MaterialStdVectorAux
index = 0
property = plastic_yield_function
variable = shear_yield_fcn
[../]
[./tensile_fcn_auxk]
type = MaterialStdVectorAux
index = 1
property = plastic_yield_function
variable = tensile_yield_fcn
[../]
[./compressive_yield_fcn_auxk]
type = MaterialStdVectorAux
index = 2
property = plastic_yield_function
variable = compressive_yield_fcn
[../]
[./iter]
type = MaterialRealAux
property = plastic_NR_iterations
variable = iter
[../]
[]
[Postprocessors]
[./shear_max]
type = ElementExtremeValue
variable = shear_yield_fcn
outputs = 'console'
[../]
[./tensile_max]
type = ElementExtremeValue
variable = tensile_yield_fcn
outputs = 'console'
[../]
[./compressive_max]
type = ElementExtremeValue
variable = compressive_yield_fcn
outputs = 'console'
[../]
[./should_be_zero_shear]
type = FunctionValuePostprocessor
function = shear_should_be_zero_fcn
[../]
[./should_be_zero_compressive]
type = FunctionValuePostprocessor
function = compressive_should_be_zero_fcn
[../]
[./should_be_zero_tensile]
type = FunctionValuePostprocessor
function = tensile_should_be_zero_fcn
[../]
[./av_iter]
type = ElementAverageValue
variable = iter
outputs = 'console'
[../]
[]
[Functions]
[./shear_should_be_zero_fcn]
type = ParsedFunction
expression = 'if(a<1E-3,0,a)'
symbol_names = 'a'
symbol_values = 'shear_max'
[../]
[./tensile_should_be_zero_fcn]
type = ParsedFunction
expression = 'if(a<1E-3,0,a)'
symbol_names = 'a'
symbol_values = 'tensile_max'
[../]
[./compressive_should_be_zero_fcn]
type = ParsedFunction
expression = 'if(a<1E-3,0,a)'
symbol_names = 'a'
symbol_values = 'compressive_max'
[../]
[]
[UserObjects]
[./ts]
type = SolidMechanicsHardeningConstant
value = 1000
[../]
[./cs]
type = SolidMechanicsHardeningConstant
value = 1000
[../]
[./mc_coh]
type = SolidMechanicsHardeningConstant
value = 1E3
[../]
[./mc_phi]
type = SolidMechanicsHardeningConstant
value = 30
convert_to_radians = true
[../]
[./mc_psi]
type = SolidMechanicsHardeningConstant
value = 5
convert_to_radians = true
[../]
[./dp]
type = SolidMechanicsPlasticDruckerPrager
mc_cohesion = mc_coh
mc_friction_angle = mc_phi
mc_dilation_angle = mc_psi
yield_function_tolerance = 1 # irrelevant here
internal_constraint_tolerance = 1 # irrelevant here
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
block = 0
fill_method = symmetric_isotropic
C_ijkl = '0.7E7 1E7'
[../]
[./admissible]
type = ComputeMultipleInelasticStress
inelastic_models = dp
perform_finite_strain_rotations = false
[../]
[./dp]
type = CappedDruckerPragerStressUpdate
DP_model = dp
tensile_strength = ts
compressive_strength = cs
yield_function_tol = 1E-3
tip_smoother = 0.1E3
smoothing_tol = 0.1E3
max_NR_iterations = 1000
small_dilation = false
[../]
[]
[Executioner]
end_time = 1
dt = 1
type = Transient
[]
[Outputs]
file_base = random
exodus = false
[./csv]
type = CSV
[../]
[]
(modules/solid_mechanics/include/materials/CappedDruckerPragerCosseratStressUpdate.h)
// This file is part of the MOOSE framework
// https://www.mooseframework.org
//
// All rights reserved, see COPYRIGHT for full restrictions
// https://github.com/idaholab/moose/blob/master/COPYRIGHT
//
// Licensed under LGPL 2.1, please see LICENSE for details
// https://www.gnu.org/licenses/lgpl-2.1.html
#pragma once
#include "CappedDruckerPragerStressUpdate.h"
/**
* CappedDruckerPragerCosseratStressUpdate performs the return-map
* algorithm and associated stress updates for plastic
* models that describe capped Drucker-Prager plasticity in the
* layered Cosserat setting
*
* This plastic model is ideally suited to a material (eg rock)
* that has different compressive, tensile and shear
* strengths. Any of these strengths may be set large to
* accommodate special situations. For instance, setting
* the compressive strength large is appropriate if there
* is no chance of compressive failure in a model.
*
* This plastic model has two internal parameters:
* - a "shear" internal parameter which parameterises the
* amount of shear plastic strain. The cohesion, friction
* angle, and dilation angle are assumed to be functions
* of this internal parameter.
* - a "tensile" internal parameter which parameterises the
* amount of tensile plastic strain. The tensile strength
* and compressive strength are assumed to be functions of
* this internal parameter. This means, for instance, that
* failure in tension can cause the compressive strenght
* to soften, as would be expected in rock-mechanics
* scenarios.
*
* This plasticity model assumes that the flow rule involves an
* isotropic built from the user-supplied Young and Poisson.
* That is, the return-map process does NOT flow using the
* elasticity tensor in the stress-strain law, which is unsymmetric
* in general (in the Cosserat setting). Physically this corresponds
* to the notion that the "host" medium for the Cosserat grains/layers
* is failing via Drucker-Prager, and not the Cosserat grains/layers
* themselves.
*/
class CappedDruckerPragerCosseratStressUpdate : public CappedDruckerPragerStressUpdate
{
public:
static InputParameters validParams();
CappedDruckerPragerCosseratStressUpdate(const InputParameters & parameters);
/**
* Does the model require the elasticity tensor to be isotropic?
*/
bool requiresIsotropicTensor() override { return false; }
protected:
/// Shear modulus for the host medium
const Real _shear;
/// Isotropic elasticity tensor for the host medium
RankFourTensor _Ehost;
virtual void setEppEqq(const RankFourTensor & Eijkl, Real & Epp, Real & Eqq) const override;
virtual void setStressAfterReturn(const RankTwoTensor & stress_trial,
Real p_ok,
Real q_ok,
Real gaE,
const std::vector<Real> & intnl,
const yieldAndFlow & smoothed_q,
const RankFourTensor & Eijkl,
RankTwoTensor & stress) const override;
virtual void consistentTangentOperator(const RankTwoTensor & stress_trial,
Real p_trial,
Real q_trial,
const RankTwoTensor & stress,
Real p,
Real q,
Real gaE,
const yieldAndFlow & smoothed_q,
const RankFourTensor & Eijkl,
bool compute_full_tangent_operator,
RankFourTensor & cto) const override;
};