RankFourTensor TensorMechanicsPlasticOrthotropic::dflowPotential_dstress(const RankTwoTensor & stress, Real /*intnl*/) const { if (_associative) { const RankTwoTensor j2prime = _l1 * stress; const RankTwoTensor j3prime = _l2 * stress; const RankTwoTensor dj2 = dj2_dSkl(j2prime); const RankTwoTensor dj3 = j3prime.ddet(); const Real j2 = -j2prime.generalSecondInvariant(); const Real j3 = j3prime.det(); const RankFourTensor dr = dfj2_dj2(j2, j3) * _l1.innerProductTranspose(dj2).outerProduct(_l1.innerProductTranspose(dj2)) + dfj2_dj3(j2, j3) * _l1.innerProductTranspose(dj2).outerProduct(_l2.innerProductTranspose(dj3)) + dfj3_dj2(j2, j3) * _l2.innerProductTranspose(dj3).outerProduct(_l1.innerProductTranspose(dj2)) + dfj3_dj3(j2, j3) * _l2.innerProductTranspose(dj3).outerProduct(_l2.innerProductTranspose(dj3)); const RankTwoTensor r = _b * dI_sigma() + dphi_dj2(j2, j3) * _l1.innerProductTranspose(dj2_dSkl(j2prime)) + dphi_dj3(j2, j3) * _l2.innerProductTranspose(j3prime.ddet()); const Real norm = r.L2norm(); return dr / norm - (r / Utility::pow<3>(norm)).outerProduct(dr.innerProductTranspose(r)); } else return TensorMechanicsPlasticJ2::dflowPotential_dstress(stress, 0); }
Real TensorMechanicsPlasticOrthotropic::yieldFunction(const RankTwoTensor & stress, Real intnl) const { const RankTwoTensor j2prime = _l1 * stress; const RankTwoTensor j3prime = _l2 * stress; return _b * stress.trace() + std::pow(std::pow(-j2prime.generalSecondInvariant(), 3.0 / 2.0) - j3prime.det(), 1.0 / 3.0) - yieldStrength(intnl); }
RankTwoTensor TensorMechanicsPlasticOrthotropic::dyieldFunction_dstress(const RankTwoTensor & stress, Real /*intnl*/) const { const RankTwoTensor j2prime = _l1 * stress; const RankTwoTensor j3prime = _l2 * stress; const Real j2 = -j2prime.generalSecondInvariant(); const Real j3 = j3prime.det(); return _b * dI_sigma() + dphi_dj2(j2, j3) * _l1.innerProductTranspose(dj2_dSkl(j2prime)) + dphi_dj3(j2, j3) * _l2.innerProductTranspose(j3prime.ddet()); }