Line data Source code
1 : //* This file is part of the MOOSE framework 2 : //* https://mooseframework.inl.gov 3 : //* 4 : //* All rights reserved, see COPYRIGHT for full restrictions 5 : //* https://github.com/idaholab/moose/blob/master/COPYRIGHT 6 : //* 7 : //* Licensed under LGPL 2.1, please see LICENSE for details 8 : //* https://www.gnu.org/licenses/lgpl-2.1.html 9 : 10 : #pragma once 11 : 12 : #include "CappedMohrCoulombStressUpdate.h" 13 : 14 : /** 15 : * CappedMohrCoulombCosseratStressUpdate implements rate-independent nonassociative 16 : * Mohr-Coulomb plus tensile plus compressive plasticity with hardening/softening 17 : * in the Cosserat setting. The Mohr-Coulomb plasticity considers the symmetric 18 : * part of the stress tensor only, and uses an isotropic elasticity tensor that 19 : * is input by the user (the anti-symmetric parts of the stress tensor and the 20 : * moment-stress tensor are not included in this plastic model, and any non-isometric 21 : * parts of the elasticity tensor are ignored in the flow rule). 22 : */ 23 : class CappedMohrCoulombCosseratStressUpdate : public CappedMohrCoulombStressUpdate 24 : { 25 : public: 26 : static InputParameters validParams(); 27 : 28 : CappedMohrCoulombCosseratStressUpdate(const InputParameters & parameters); 29 : 30 : /** 31 : * The full elasticity tensor may be anisotropic, and usually is in the case 32 : * of layered Cosserat. However, this class only uses the isotropic parts of 33 : * it (corresponding to the "host" material) that are encoded in _host_young 34 : * and _host_poisson 35 : */ 36 198 : bool requiresIsotropicTensor() override { return false; } 37 : 38 : protected: 39 : /// Young's modulus of the host material 40 : const Real _host_young; 41 : 42 : /// Poisson's of the host material 43 : const Real _host_poisson; 44 : 45 : /// E0011 = Lame lambda modulus of the host material 46 : const Real _host_E0011; 47 : 48 : /// E0000 = Lame lambda + 2 * shear modulus of the host material 49 : const Real _host_E0000; 50 : 51 : virtual void setStressAfterReturnV(const RankTwoTensor & stress_trial, 52 : const std::vector<Real> & stress_params, 53 : Real gaE, 54 : const std::vector<Real> & intnl, 55 : const yieldAndFlow & smoothed_q, 56 : const RankFourTensor & Eijkl, 57 : RankTwoTensor & stress) const override; 58 : 59 : virtual void preReturnMapV(const std::vector<Real> & trial_stress_params, 60 : const RankTwoTensor & stress_trial, 61 : const std::vector<Real> & intnl_old, 62 : const std::vector<Real> & yf, 63 : const RankFourTensor & Eijkl) override; 64 : 65 : void setEffectiveElasticity(const RankFourTensor & Eijkl) override; 66 : 67 : virtual void consistentTangentOperatorV(const RankTwoTensor & stress_trial, 68 : const std::vector<Real> & trial_stress_params, 69 : const RankTwoTensor & stress, 70 : const std::vector<Real> & stress_params, 71 : Real gaE, 72 : const yieldAndFlow & smoothed_q, 73 : const RankFourTensor & Eijkl, 74 : bool compute_full_tangent_operator, 75 : const std::vector<std::vector<Real>> & dvar_dtrial, 76 : RankFourTensor & cto) override; 77 : };