11 #include "libmesh/utility.h" 22 "Input data as pairs of equivalent plastic strain and yield stress: Should " 23 "start with equivalent plastic strain 0");
24 params.
addParam<
Real>(
"rtol", 1e-8,
"Plastic strain NR tolerance");
25 params.
addParam<
Real>(
"ftol", 1e-4,
"Consistency condition NR tolerance");
26 params.
addParam<
Real>(
"eptol", 1e-7,
"Equivalent plastic strain NR tolerance");
34 _yield_stress_vector(getParam<
std::vector<
Real>>(
"yield_stress")),
35 _plastic_strain(declareProperty<
RankTwoTensor>(_base_name +
"plastic_strain")),
36 _plastic_strain_old(getMaterialPropertyOld<
RankTwoTensor>(_base_name +
"plastic_strain")),
37 _eqv_plastic_strain(declareProperty<
Real>(_base_name +
"eqv_plastic_strain")),
38 _eqv_plastic_strain_old(getMaterialPropertyOld<
Real>(_base_name +
"eqv_plastic_strain")),
39 _stress_old(getMaterialPropertyOld<
RankTwoTensor>(_base_name +
"stress")),
40 _strain_increment(getMaterialProperty<
RankTwoTensor>(_base_name +
"strain_increment")),
41 _rotation_increment(getMaterialProperty<
RankTwoTensor>(_base_name +
"rotation_increment")),
42 _elasticity_tensor_name(_base_name +
"elasticity_tensor"),
43 _elasticity_tensor(getMaterialPropertyByName<
RankFourTensor>(_elasticity_tensor_name)),
44 _rtol(getParam<
Real>(
"rtol")),
45 _ftol(getParam<
Real>(
"ftol")),
46 _eptol(getParam<
Real>(
"eptol")),
150 const Real eqvpstrain_old,
164 Real flow_incr = 0.0;
181 Real dflow_incr = 0.0;
184 Real deqvpstrain = 0.0;
210 Real err1, err2, err3;
213 unsigned int iter = 0;
216 unsigned int maxiter = 100;
223 sig = sig_old + E_ijkl * delta_d;
224 eqvpstrain = eqvpstrain_old;
225 plastic_strain = plastic_strain_old;
235 sig = sig_old + E_ijkl * delta_d;
239 resid = flow_dirn * flow_incr - delta_dp;
253 getJac(sig, E_ijkl, flow_incr, dr_dsig);
267 dr_dsig_inv = dr_dsig.
invSymm();
281 flow_dirn * dflow_incr);
286 flow_incr += dflow_incr;
287 delta_dp -= E_ijkl.
invSymm() * ddsig;
289 eqvpstrain += deqvpstrain;
293 resid = flow_dirn * flow_incr - delta_dp;
297 err1 = resid.L2norm();
305 plastic_strain += delta_dp;
366 f1 = 3.0 / (2.0 * sig_eqv);
368 f3 = 9.0 / (4.0 * Utility::pow<3>(sig_eqv));
373 dresid_dsig = E_ijkl.
invSymm() + dfd_dsig * flow_incr;
385 mooseError(
"Error in yield stress input: Should be a vector with eqv plastic strain and yield " 386 "stress pair values.\n");
388 unsigned int ind = 0;
421 mooseError(
"Error in yield stress input: Should be a vector with eqv plastic strain and yield " 422 "stress pair values.\n");
424 unsigned int ind = 0;
RankFourTensorTempl< Real > outerProduct(const RankTwoTensorTempl< Real > &b) const
MaterialProperty< RankFourTensor > & _Jacobian_mult
derivative of stress w.r.t. strain (_dstress_dstrain)
RankTwoTensorTempl< Real > dsecondInvariant() const
virtual void computeQpStress()
Compute the stress and store it in the _stress material property for the current quadrature point...
std::vector< Real > _yield_stress_vector
FiniteStrainPlasticMaterial implements rate-independent associative J2 plasticity with isotropic hard...
ComputeStressBase is the base class for stress tensors computed from MOOSE's strain calculators...
const MaterialProperty< RankTwoTensor > & _strain_increment
const MaterialProperty< RankTwoTensor > & _mechanical_strain
Mechanical strain material property.
static InputParameters validParams()
MaterialProperty< Real > & _eqv_plastic_strain
virtual Real dyieldFunction_dinternal(const Real equivalent_plastic_strain)
Derivative of yieldFunction with respect to the equivalent plastic strain.
virtual void returnMap(const RankTwoTensor &sig_old, const Real eqvpstrain_old, const RankTwoTensor &plastic_strain_old, const RankTwoTensor &delta_d, const RankFourTensor &E_ijkl, RankTwoTensor &sig, Real &eqvpstrain, RankTwoTensor &plastic_strain)
Implements the return map.
virtual RankTwoTensor flowPotential(const RankTwoTensor &stress)
Flow potential, which in this case is just dyieldFunction_dstress because we are doing associative fl...
Real secondInvariant() const
const MaterialProperty< RankFourTensor > & _elasticity_tensor
Elasticity tensor material property.
ADRealEigenVector< T, D, asd > sqrt(const ADRealEigenVector< T, D, asd > &)
ADRealEigenVector< T, D, asd > abs(const ADRealEigenVector< T, D, asd > &)
RankTwoTensorTempl< Real > deviatoric() const
const MaterialProperty< Real > & _eqv_plastic_strain_old
virtual void initQpStatefulProperties() override
Real deriv(unsigned n, unsigned alpha, unsigned beta, Real x)
Real f(Real x)
Test function for Brents method.
virtual Real yieldFunction(const RankTwoTensor &stress, const Real yield_stress)
Calculates the yield function.
Real getYieldStress(const Real equivalent_plastic_strain)
yield stress as a function of equivalent plastic strain.
Real doubleContraction(const RankTwoTensorTempl< Real > &a) const
RankFourTensor _deltaMixed
FiniteStrainPlasticMaterial(const InputParameters ¶meters)
virtual void initQpStatefulProperties()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
registerMooseObject("SolidMechanicsApp", FiniteStrainPlasticMaterial)
MaterialProperty< RankTwoTensor > & _elastic_strain
Elastic strain material property.
const MaterialProperty< RankTwoTensor > & _plastic_strain_old
Real getSigEqv(const RankTwoTensor &stress)
Equivalent stress.
void mooseError(Args &&... args) const
MaterialProperty< RankTwoTensor > & _stress
Stress material property.
virtual RankTwoTensor dyieldFunction_dstress(const RankTwoTensor &stress)
Derivative of yieldFunction with respect to the stress.
RankFourTensor _deltaOuter
virtual Real internalPotential()
The internal potential.
const MaterialProperty< RankTwoTensor > & _rotation_increment
RankFourTensorTempl< T > invSymm() const
Real getdYieldStressdPlasticStrain(const Real equivalent_plastic_strain)
d(yieldstress)/d(equivalent plastic strain)
MaterialProperty< RankTwoTensor > & _plastic_strain
virtual void getJac(const RankTwoTensor &sig, const RankFourTensor &E_ijkl, Real flow_incr, RankFourTensor &dresid_dsig)
Evaluates the derivative d(resid_ij)/d(sig_kl), where resid_ij = flow_incr*flowPotential_ij - (E^{-1}...
static InputParameters validParams()
const MaterialProperty< RankTwoTensor > & _stress_old
The old stress tensor.