1@DSL DefaultDSL; 2@Behaviour IsotropicLinearHardeningPlasticity; 3@Author Thomas Helfer; 4@Date 14/10/2016; 5@Description{ 6 An implicit implementation of a simple 7 isotropic plasticity behaviour with 8 isotropic linear hardening. 9 10 The yield surface is defined by: 11 "\[" 12 " f(\sigmaeq,p) = \sigmaeq-s_{0}-H\,p" 13 "\]" 14} 15 16@StateVariable StrainStensor eel; 17eel.setGlossaryName("ElasticStrain"); 18@StateVariable strain p; 19p.setGlossaryName("EquivalentPlasticStrain"); 20 21@Parameter young = 70.e9; 22young.setGlossaryName("YoungModulus"); 23@Parameter nu = 0.34; 24nu.setGlossaryName("PoissonRatio"); 25@Parameter H = 10.e9; 26H.setEntryName("HardeningSlope"); 27@Parameter s0 = 300.e6; 28s0.setGlossaryName("YieldStress"); 29 30/*! 31 * computation of the prediction operator: we only provide the elastic 32 * operator. 33 * 34 * We could also provide a tangent operator, but this would mean 35 * saving an auxiliary state variable stating if a plastic loading 36 * occured at the previous time step. 37 */ 38@PredictionOperator{ 39 const auto lambda = computeLambda(young,nu); 40 const auto mu = computeMu(young,nu); 41 Dt = lambda*Stensor4::IxI()+2*mu*Stensor4::Id(); 42} 43 44/*! 45 * behaviour integration using a fully implicit Euler-backwark scheme. 46 */ 47@ProvidesSymmetricTangentOperator; 48@Integrator{ 49 const auto lambda = computeLambda(young,nu); 50 const auto mu = computeMu(young,nu); 51 eel += deto; 52 const auto se = 2*mu*deviator(eel); 53 const auto seq_e = sigmaeq(se); 54 const auto b = seq_e-s0-H*p>stress{0}; 55 if(b){ 56 const auto iseq_e = 1/seq_e; 57 const auto n = eval(3*se/(2*seq_e)); 58 const auto cste = 1/(H+3*mu); 59 dp = (seq_e-s0-H*p)*cste; 60 eel -= dp*n; 61 if(computeTangentOperator_){ 62 if(smt==CONSISTENTTANGENTOPERATOR){ 63 Dt = (lambda*Stensor4::IxI()+2*mu*Stensor4::Id() 64 -4*mu*mu*(dp*iseq_e*(Stensor4::M()-(n^n))+cste*(n^n))); 65 } else { 66 Dt = lambda*Stensor4::IxI()+2*mu*Stensor4::Id(); 67 } 68 } 69 } else { 70 if(computeTangentOperator_){ 71 Dt = lambda*Stensor4::IxI()+2*mu*Stensor4::Id(); 72 } 73 } 74 sig = lambda*trace(eel)*Stensor::Id()+2*mu*eel; 75} 76