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"))
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);
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);
RankFourTensorTempl< Real > outerProduct(const RankTwoTensorTempl< Real > &b) const
RankTwoTensorTempl< Real > dsecondInvariant() const
RankFourTensorTempl< Real > d2secondInvariant() const
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.
registerMooseObject("SolidMechanicsApp", SolidMechanicsPlasticJ2)
registerMooseObjectRenamed("SolidMechanicsApp", TensorMechanicsPlasticJ2, "01/01/2025 00:00", SolidMechanicsPlasticJ2)
const SolidMechanicsHardeningModel & _strength
yield strength, from user input
static InputParameters validParams()
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 unsigned _max_iters
max iters for custom return map loop
Real secondInvariant() const
virtual Real value(Real intnl) const
virtual Real yieldFunction(const RankTwoTensor &stress, Real intnl) const override
The following functions are what you should override when building single-plasticity models...
virtual Real dyieldStrength(Real intnl) const
d(yieldStrength)/d(intnl)
RankTwoTensorTempl< Real > deviatoric() const
J2 plasticity, associative, with hardning.
virtual RankFourTensor dflowPotential_dstress(const RankTwoTensor &stress, Real intnl) const override
The derivative of the flow potential with respect to stress.
static InputParameters validParams()
static const std::string mu
void addIa(const Real &a)
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 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.
Real dyieldFunction_dintnl(const RankTwoTensor &stress, Real intnl) const override
The derivative of yield function with respect to the internal parameter.
SolidMechanicsPlasticJ2(const InputParameters ¶meters)
virtual Real yieldStrength(Real intnl) const
YieldStrength.
const Real _f_tol
Tolerance on yield function.
const bool _use_custom_cto
Whether to use the custom consistent tangent operator calculation.
virtual Real derivative(Real intnl) const
virtual std::string modelName() const override
Hardening Model base class.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const bool _use_custom_returnMap
Whether to use the custom return-map algorithm.
virtual RankTwoTensor dyieldFunction_dstress(const RankTwoTensor &stress, Real intnl) const override
The derivative of yield function with respect to stress.
virtual bool useCustomCTO() const override
Returns false. You will want to override this in your derived class if you write a custom consistent ...
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
Plastic Model base class The virtual functions written below must be over-ridden in derived classes t...
MooseUnits pow(const MooseUnits &, int)
static const std::string k
virtual RankTwoTensor flowPotential(const RankTwoTensor &stress, Real intnl) const override
The flow potential.
RankTwoTensor dflowPotential_dintnl(const RankTwoTensor &stress, Real intnl) const override
The derivative of the flow potential with respect to the internal parameter.
virtual bool useCustomReturnMap() const override
Returns false. You will want to override this in your derived class if you write a custom returnMap f...