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 "CappedDruckerPragerStressUpdate.h" 13 : 14 : /** 15 : * CappedDruckerPragerCosseratStressUpdate performs the return-map 16 : * algorithm and associated stress updates for plastic 17 : * models that describe capped Drucker-Prager plasticity in the 18 : * layered Cosserat setting 19 : * 20 : * This plastic model is ideally suited to a material (eg rock) 21 : * that has different compressive, tensile and shear 22 : * strengths. Any of these strengths may be set large to 23 : * accommodate special situations. For instance, setting 24 : * the compressive strength large is appropriate if there 25 : * is no chance of compressive failure in a model. 26 : * 27 : * This plastic model has two internal parameters: 28 : * - a "shear" internal parameter which parameterises the 29 : * amount of shear plastic strain. The cohesion, friction 30 : * angle, and dilation angle are assumed to be functions 31 : * of this internal parameter. 32 : * - a "tensile" internal parameter which parameterises the 33 : * amount of tensile plastic strain. The tensile strength 34 : * and compressive strength are assumed to be functions of 35 : * this internal parameter. This means, for instance, that 36 : * failure in tension can cause the compressive strenght 37 : * to soften, as would be expected in rock-mechanics 38 : * scenarios. 39 : * 40 : * This plasticity model assumes that the flow rule involves an 41 : * isotropic built from the user-supplied Young and Poisson. 42 : * That is, the return-map process does NOT flow using the 43 : * elasticity tensor in the stress-strain law, which is unsymmetric 44 : * in general (in the Cosserat setting). Physically this corresponds 45 : * to the notion that the "host" medium for the Cosserat grains/layers 46 : * is failing via Drucker-Prager, and not the Cosserat grains/layers 47 : * themselves. 48 : */ 49 : class CappedDruckerPragerCosseratStressUpdate : public CappedDruckerPragerStressUpdate 50 : { 51 : public: 52 : static InputParameters validParams(); 53 : 54 : CappedDruckerPragerCosseratStressUpdate(const InputParameters & parameters); 55 : 56 : /** 57 : * Does the model require the elasticity tensor to be isotropic? 58 : */ 59 90 : bool requiresIsotropicTensor() override { return false; } 60 : 61 : protected: 62 : /// Shear modulus for the host medium 63 : const Real _shear; 64 : 65 : /// Isotropic elasticity tensor for the host medium 66 : RankFourTensor _Ehost; 67 : 68 : virtual void setEppEqq(const RankFourTensor & Eijkl, Real & Epp, Real & Eqq) const override; 69 : 70 : virtual void setStressAfterReturn(const RankTwoTensor & stress_trial, 71 : Real p_ok, 72 : Real q_ok, 73 : Real gaE, 74 : const std::vector<Real> & intnl, 75 : const yieldAndFlow & smoothed_q, 76 : const RankFourTensor & Eijkl, 77 : RankTwoTensor & stress) const override; 78 : 79 : virtual void consistentTangentOperator(const RankTwoTensor & stress_trial, 80 : Real p_trial, 81 : Real q_trial, 82 : const RankTwoTensor & stress, 83 : Real p, 84 : Real q, 85 : Real gaE, 86 : const yieldAndFlow & smoothed_q, 87 : const RankFourTensor & Eijkl, 88 : bool compute_full_tangent_operator, 89 : RankFourTensor & cto) const override; 90 : };