Go to the documentation of this file.
11 #include "RankFourTensor.h"
21 params.addRequiredParam<UserObjectName>(
23 "A TensorMechanicsHardening UserObject that defines hardening of the yield strength");
24 params.addRangeCheckedParam<
unsigned>(
25 "max_iterations", 10,
"max_iterations>0",
"Maximum iterations for custom J2 return map");
26 params.addParam<
bool>(
"use_custom_returnMap",
28 "Whether to use the custom returnMap "
29 "algorithm. Set to true if you are using "
30 "isotropic elasticity.");
31 params.addParam<
bool>(
"use_custom_cto",
33 "Whether to use the custom consistent tangent "
34 "operator computations. Set to true if you are "
35 "using isotropic elasticity.");
36 params.addClassDescription(
"J2 plasticity, associative, with hardening");
44 _max_iters(getParam<unsigned>(
"max_iterations")),
45 _use_custom_returnMap(getParam<bool>(
"use_custom_returnMap")),
46 _use_custom_cto(getParam<bool>(
"use_custom_cto"))
53 return std::sqrt(3.0 * stress.secondInvariant()) -
yieldStrength(intnl);
59 Real sII = stress.secondInvariant();
63 return 0.5 * std::sqrt(3.0 / sII) * stress.dsecondInvariant();
81 Real sII = stress.secondInvariant();
85 RankFourTensor dfp = 0.5 * std::sqrt(3.0 / sII) * stress.d2secondInvariant();
86 Real pre = -0.25 * std::sqrt(3.0) *
std::pow(sII, -1.5);
88 for (
unsigned i = 0; i < 3; ++i)
89 for (
unsigned j = 0; j < 3; ++j)
90 for (
unsigned k = 0; k < 3; ++k)
91 for (
unsigned l = 0; l < 3; ++l)
92 dfp(i, j, k, l) += pre * dII(i, j) * dII(k, l);
125 Real ep_plastic_tolerance,
127 Real & returned_intnl,
128 std::vector<Real> & dpm,
130 std::vector<Real> & yf,
131 bool & trial_stress_inadmissible)
const
137 ep_plastic_tolerance,
143 trial_stress_inadmissible);
154 trial_stress_inadmissible =
false;
158 trial_stress_inadmissible =
true;
159 Real mu = E_ijkl(0, 1, 0, 1);
163 Real trial_equivalent_stress = yf_orig +
yieldStrength(intnl_old);
167 unsigned int iter = 0;
170 residual = 3.0 * mu * dpm[0] - trial_equivalent_stress +
yieldStrength(intnl_old + dpm[0]);
172 dpm[0] += -residual / jac;
180 returned_intnl = intnl_old + dpm[0];
182 trial_equivalent_stress;
185 returned_stress = 2.0 / 3.0 * nn *
yieldStrength(returned_intnl);
186 returned_stress.addIa(1.0 / 3.0 * trial_stress.trace());
187 delta_dp = nn * dpm[0];
198 const std::vector<Real> & cumulative_pm)
const
202 trial_stress, intnl_old, stress, intnl, E_ijkl, cumulative_pm);
204 Real mu = E_ijkl(0, 1, 0, 1);
208 Real sII = stress.secondInvariant();
209 Real equivalent_stress = std::sqrt(3.0 * sII);
210 Real zeta = cumulative_pm[0] / (1.0 + 3.0 * mu * cumulative_pm[0] / equivalent_stress);
212 return E_ijkl - 3.0 * mu * mu / sII / h * sij.outerProduct(sij) -
virtual Real dyieldStrength(Real intnl) const
d(yieldStrength)/d(intnl)
static InputParameters validParams()
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
TensorMechanicsPlasticJ2(const InputParameters ¶meters)
virtual Real yieldStrength(Real intnl) const
YieldStrength.
J2 plasticity, associative, with hardning.
virtual RankTwoTensor dyieldFunction_dstress(const RankTwoTensor &stress, Real intnl) const override
The derivative of yield function with respect to stress.
registerMooseObject("TensorMechanicsApp", TensorMechanicsPlasticJ2)
virtual Real yieldFunction(const RankTwoTensor &stress, Real intnl) const override
The following functions are what you should override when building single-plasticity models.
virtual std::string modelName() const override
Real dyieldFunction_dintnl(const RankTwoTensor &stress, Real intnl) const override
The derivative of yield function with respect to the internal parameter.
virtual RankFourTensor consistentTangentOperator(const RankTwoTensor &trial_stress, Real intnl_old, const RankTwoTensor &stress, Real intnl, const RankFourTensor &E_ijkl, const std::vector< Real > &cumulative_pm) const override
Calculates a custom consistent tangent operator.
const Real _f_tol
Tolerance on yield function.
static InputParameters validParams()
RankTwoTensor dflowPotential_dintnl(const RankTwoTensor &stress, Real intnl) const override
The derivative of the flow potential with respect to the internal parameter.
virtual RankFourTensor dflowPotential_dstress(const RankTwoTensor &stress, Real intnl) const override
The derivative of the flow potential with respect to stress.
virtual bool useCustomReturnMap() const override
Returns false. You will want to override this in your derived class if you write a custom returnMap f...
virtual Real derivative(Real intnl) const
virtual bool useCustomCTO() const override
Returns false. You will want to override this in your derived class if you write a custom consistent ...
const TensorMechanicsHardeningModel & _strength
yield strength, from user input
virtual bool returnMap(const RankTwoTensor &trial_stress, Real intnl_old, const RankFourTensor &E_ijkl, Real ep_plastic_tolerance, RankTwoTensor &returned_stress, Real &returned_intnl, std::vector< Real > &dpm, RankTwoTensor &delta_dp, std::vector< Real > &yf, bool &trial_stress_inadmissible) const
Performs a custom return-map.
virtual Real value(Real intnl) const
RankTwoTensorTempl< Real > RankTwoTensor
virtual RankFourTensor consistentTangentOperator(const RankTwoTensor &trial_stress, Real intnl_old, const RankTwoTensor &stress, Real intnl, const RankFourTensor &E_ijkl, const std::vector< Real > &cumulative_pm) const
Calculates a custom consistent tangent operator.
const bool _use_custom_cto
Whether to use the custom consistent tangent operator calculation.
Plastic Model base class The virtual functions written below must be over-ridden in derived classes t...
const unsigned _max_iters
max iters for custom return map loop
virtual bool returnMap(const RankTwoTensor &trial_stress, Real intnl_old, const RankFourTensor &E_ijkl, Real ep_plastic_tolerance, RankTwoTensor &returned_stress, Real &returned_intnl, std::vector< Real > &dpm, RankTwoTensor &delta_dp, std::vector< Real > &yf, bool &trial_stress_inadmissible) const override
Performs a custom return-map.
const bool _use_custom_returnMap
Whether to use the custom return-map algorithm.
defineLegacyParams(TensorMechanicsPlasticJ2)
virtual RankTwoTensor flowPotential(const RankTwoTensor &stress, Real intnl) const override
The flow potential.
RankFourTensorTempl< Real > RankFourTensor
Hardening Model base class.