15 TensorMechanicsPlasticJ2,
25 "A SolidMechanicsHardening UserObject that defines hardening of the yield strength");
27 "max_iterations", 10,
"max_iterations>0",
"Maximum iterations for custom J2 return map");
28 params.
addParam<
bool>(
"use_custom_returnMap",
30 "Whether to use the custom returnMap "
31 "algorithm. Set to true if you are using "
32 "isotropic elasticity.");
33 params.
addParam<
bool>(
"use_custom_cto",
35 "Whether to use the custom consistent tangent "
36 "operator computations. Set to true if you are "
37 "using isotropic elasticity.");
46 _max_iters(getParam<unsigned>(
"max_iterations")),
47 _use_custom_returnMap(getParam<bool>(
"use_custom_returnMap")),
48 _use_custom_cto(getParam<bool>(
"use_custom_cto"))
88 Real pre = -0.25 * std::sqrt(3.0) * std::pow(sII, -1.5);
90 for (
unsigned i = 0; i < 3; ++i)
91 for (
unsigned j = 0; j < 3; ++j)
92 for (
unsigned k = 0; k < 3; ++k)
93 for (
unsigned l = 0; l < 3; ++l)
94 dfp(i, j, k, l) += pre * dII(i, j) * dII(k, l);
127 Real ep_plastic_tolerance,
129 Real & returned_intnl,
130 std::vector<Real> & dpm,
132 std::vector<Real> & yf,
133 bool & trial_stress_inadmissible)
const
139 ep_plastic_tolerance,
145 trial_stress_inadmissible);
156 trial_stress_inadmissible =
false;
160 trial_stress_inadmissible =
true;
161 Real
mu = E_ijkl(0, 1, 0, 1);
165 Real trial_equivalent_stress = yf_orig +
yieldStrength(intnl_old);
169 unsigned int iter = 0;
172 residual = 3.0 *
mu * dpm[0] - trial_equivalent_stress +
yieldStrength(intnl_old + dpm[0]);
174 dpm[0] += -residual / jac;
182 returned_intnl = intnl_old + dpm[0];
184 trial_equivalent_stress;
187 returned_stress = 2.0 / 3.0 * nn *
yieldStrength(returned_intnl);
188 returned_stress.
addIa(1.0 / 3.0 * trial_stress.
trace());
189 delta_dp = nn * dpm[0];
200 const std::vector<Real> & cumulative_pm)
const
204 trial_stress, intnl_old, stress, intnl, E_ijkl, cumulative_pm);
206 Real
mu = E_ijkl(0, 1, 0, 1);
211 Real equivalent_stress = std::sqrt(3.0 * sII);
212 Real zeta = cumulative_pm[0] / (1.0 + 3.0 *
mu * cumulative_pm[0] / equivalent_stress);
registerMooseObject("SolidMechanicsApp", SolidMechanicsPlasticJ2)
registerMooseObjectRenamed("SolidMechanicsApp", TensorMechanicsPlasticJ2, "01/01/2025 00:00", SolidMechanicsPlasticJ2)
RankFourTensorTempl< T > outerProduct(const RankTwoTensorTempl< T > &b) const
T secondInvariant() const
RankTwoTensorTempl< T > dsecondInvariant() const
RankTwoTensorTempl< T > deviatoric() const
RankFourTensorTempl< T > d2secondInvariant() const
Hardening Model base class.
virtual Real derivative(Real intnl) const
virtual Real value(Real intnl) const
J2 plasticity, associative, with hardning.
RankTwoTensor dflowPotential_dintnl(const RankTwoTensor &stress, Real intnl) const override
The derivative of the flow potential with respect to the internal parameter.
virtual RankTwoTensor dyieldFunction_dstress(const RankTwoTensor &stress, Real intnl) const override
The derivative of yield function 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...
const bool _use_custom_returnMap
Whether to use the custom return-map algorithm.
const bool _use_custom_cto
Whether to use the custom consistent tangent operator calculation.
virtual RankFourTensor dflowPotential_dstress(const RankTwoTensor &stress, Real intnl) const override
The derivative of the flow potential with respect to stress.
virtual Real dyieldStrength(Real intnl) const
d(yieldStrength)/d(intnl)
SolidMechanicsPlasticJ2(const InputParameters ¶meters)
const SolidMechanicsHardeningModel & _strength
yield strength, from user input
const unsigned _max_iters
max iters for custom return map loop
virtual bool useCustomCTO() const override
Returns false. You will want to override this in your derived class if you write a custom consistent ...
Real dyieldFunction_dintnl(const RankTwoTensor &stress, Real intnl) const override
The derivative of yield function with respect to the internal parameter.
virtual std::string modelName() const override
virtual Real yieldFunction(const RankTwoTensor &stress, Real intnl) const override
The following functions are what you should override when building single-plasticity models.
virtual RankTwoTensor flowPotential(const RankTwoTensor &stress, Real intnl) const override
The flow potential.
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.
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.
virtual Real yieldStrength(Real intnl) const
YieldStrength.
static InputParameters validParams()
Plastic Model base class The virtual functions written below must be over-ridden in derived classes t...
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.
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.
const Real _f_tol
Tolerance on yield function.
static InputParameters validParams()