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 "CappedWeakPlaneStressUpdate.h" 13 : 14 : /** 15 : * CappedWeakInclinedPlaneStressUpdate performs the return-map 16 : * algorithm and associated stress updates for plastic 17 : * models that describe capped weak-plane plasticity 18 : * 19 : * It assumes various things about the elasticity tensor, viz 20 : * in the frame where the weak-plane's normal direction is the 21 : * "2" direction: 22 : * E(i,i,j,k) = 0 except if k=j 23 : * E(0,0,i,j) = E(1,1,i,j) 24 : */ 25 : class CappedWeakInclinedPlaneStressUpdate : public CappedWeakPlaneStressUpdate 26 : { 27 : public: 28 : static InputParameters validParams(); 29 : 30 : CappedWeakInclinedPlaneStressUpdate(const InputParameters & parameters); 31 : 32 : /** 33 : * Does the model require the elasticity tensor to be isotropic? 34 : */ 35 54 : bool requiresIsotropicTensor() override { return false; } 36 : 37 : protected: 38 : virtual void initQpStatefulProperties() override; 39 : 40 : /// User-input value of the normal vector to the weak plane 41 : RealVectorValue _n_input; 42 : 43 : /// Current value of the normal 44 : MaterialProperty<RealVectorValue> & _n; 45 : 46 : /// Old value of the normal 47 : const MaterialProperty<RealVectorValue> & _n_old; 48 : 49 : /// Rotation matrix that rotates _n to "z" 50 : RealTensorValue _rot_n_to_z; 51 : 52 : /// Rotation matrix that rotates "z" to _n 53 : RealTensorValue _rot_z_to_n; 54 : 55 : /// Trial stress rotated to the frame where _n points along "z" 56 : RankTwoTensor _rotated_trial; 57 : 58 : /// Elasticity tensor rotated to the frame where _n points along "z" 59 : RankFourTensor _rotated_Eijkl; 60 : 61 : virtual void initializeReturnProcess() override; 62 : virtual void finalizeReturnProcess(const RankTwoTensor & rotation_increment) override; 63 : 64 : virtual void preReturnMap(Real p_trial, 65 : Real q_trial, 66 : const RankTwoTensor & stress_trial, 67 : const std::vector<Real> & intnl_old, 68 : const std::vector<Real> & yf, 69 : const RankFourTensor & Eijkl) override; 70 : 71 : virtual void computePQ(const RankTwoTensor & stress, Real & p, Real & q) const override; 72 : 73 : virtual void setEppEqq(const RankFourTensor & Eijkl, Real & Epp, Real & Eqq) const override; 74 : 75 : virtual void setStressAfterReturn(const RankTwoTensor & stress_trial, 76 : Real p_ok, 77 : Real q_ok, 78 : Real gaE, 79 : const std::vector<Real> & intnl, 80 : const yieldAndFlow & smoothed_q, 81 : const RankFourTensor & Eijkl, 82 : RankTwoTensor & stress) const override; 83 : 84 : virtual void consistentTangentOperator(const RankTwoTensor & stress_trial, 85 : Real p_trial, 86 : Real q_trial, 87 : const RankTwoTensor & stress, 88 : Real p, 89 : Real q, 90 : Real gaE, 91 : const yieldAndFlow & smoothed_q, 92 : const RankFourTensor & Eijkl, 93 : bool compute_full_tangent_operator, 94 : RankFourTensor & cto) const override; 95 : 96 : virtual RankTwoTensor dpdstress(const RankTwoTensor & stress) const override; 97 : 98 : virtual RankTwoTensor dqdstress(const RankTwoTensor & stress) const override; 99 : 100 : virtual RankFourTensor d2qdstress2(const RankTwoTensor & stress) const override; 101 : };