1@Parser Implicit; 2@Behaviour Chaboche; 3@Algorithm NewtonRaphson_NumericalJacobian; 4 5@Theta 1. ; 6@Epsilon 1.e-12; 7 8@MaterialProperty real young; /* mandatory for castem */ 9young.setGlossaryName("YoungModulus"); 10@MaterialProperty real nu; /* mandatory for castem */ 11nu.setGlossaryName("PoissonRatio"); 12 13@MaterialProperty stress R_inf; 14@MaterialProperty stress R_0; 15@MaterialProperty real b; 16@MaterialProperty real k; 17@MaterialProperty real w; 18@MaterialProperty stress C_inf[2]; 19@MaterialProperty real g_0[2]; 20@MaterialProperty real a_inf; 21 22@Includes{ 23#include"TFEL/Material/Lame.hxx" 24} 25 26@StateVariable strain p; 27@StateVariable StrainStensor a[2]; 28 29@LocalVariable stress lambda; 30@LocalVariable stress mu; 31@LocalVariable stress Fel; 32 33/* Initialize Lame coefficients */ 34@InitLocalVars{ 35 using namespace tfel::material::lame; 36 lambda = computeLambda(young,nu); 37 mu = computeMu(young,nu); 38 // elastic prediction 39 StressStensor sigel(lambda*trace(eel+deto)*Stensor::Id()+2*mu*(eel+deto)); 40 const real tmpC0 = (1.+(k-1.)*exp(-w*p)); 41 for(unsigned short i=0;i!=2;++i){ 42 const stress Cel = C_inf[i]*tmpC0; 43 sigel -= 2*Cel*a[i]/3; 44 } 45 const real seqel = sigmaeq(sigel); 46 const real Rpel = R_inf + (R_0-R_inf)*exp(-b*p) ; 47 Fel = seqel - Rpel ; 48} 49 50@ComputeStress{ 51 sig = lambda*trace(eel)*Stensor::Id()+2*mu*eel; 52} 53 54@Integrator{ 55 if(Fel > 0){ 56 const real eps = 1.e-12; 57 // Les variables post-fixee par un _ sont exprimees les valeurs en 58 // t+theta*dt 59 const strain p_ = p +theta*dp ; 60 const stress Rp_ = R_inf + (R_0-R_inf)*exp(-b*p_) ; 61 // ces exponentielles sont communes aux deux ecrouissages 62 const real tmpC = (1.+(k-1.)*exp(-w*p_)); 63 const real tmpG = (a_inf+(1-a_inf)*exp(-b*p_)); 64 StressStensor sr_ = deviator(sig); 65 StrainStensor a_[2]; 66 real g_[2]; 67 for(unsigned short i=0;i!=2;++i){ 68 const stress C_ = C_inf[i]*tmpC; 69 g_[i] = g_0[i]*tmpG; 70 a_[i] = a[i]+theta*da[i]; 71 const StressStensor X_ = 2*C_*a_[i]/3; 72 sr_ -= X_; 73 } 74 Stensor n_(real(0)); 75 const stress seq_ = sigmaeq(sr_); 76 if(seq_>eps*young){ 77 n_ = 1.5*sr_/seq_; 78 } 79 feel += dp*n_; 80 fp = (seq_-Rp_)/young; 81 for(unsigned short i=0;i!=2;++i){ 82 fa[i] -= dp*(n_-g_[i]*a_[i]); 83 } 84 } 85 feel -= deto; 86} 87 88@TangentOperator{ 89 using namespace tfel::material::lame; 90 if((smt==ELASTIC)||(smt==SECANTOPERATOR)){ 91 computeElasticStiffness<N,Type>::exe(Dt,lambda,mu); 92 } else if (smt==CONSISTENTTANGENTOPERATOR){ 93 StiffnessTensor De; 94 Stensor4 Je; 95 computeElasticStiffness<N,Type>::exe(De,lambda,mu); 96 getPartialJacobianInvert(Je); 97 Dt = De*Je; 98 } else { 99 return false; 100 } 101} 102