1@Parser Implicit; 2@Behaviour Chaboche; 3@Algorithm NewtonRaphson_NumericalJacobian; 4@Theta 1. ; 5 6@MaterialProperty real young; 7young.setGlossaryName("YoungModulus"); 8@MaterialProperty real nu; 9young.setGlossaryName("PoissonRatio"); 10@MaterialProperty real R_inf; 11@MaterialProperty real R_0; 12@MaterialProperty real b; 13@MaterialProperty real C[2]; 14@MaterialProperty real g[2]; 15 16@StateVariable real p; 17@StateVariable Stensor a[2]; 18 19@LocalVariable stress lambda; 20@LocalVariable stress mu; 21@LocalVariable stress Fel; 22 23/* Initialize Lame coefficients */ 24@InitLocalVariables{ 25 lambda = computeLambda(young,nu); 26 mu = computeMu(young,nu); 27 // prediction elastique 28 StresssStensor sigel(lambda*trace(eel+deto)*Stensor::Id()+2*mu*(eel+deto)); 29 for(unsigned short i=0;i!=2;++i){ 30 sigel -= C[i]*a[i]/1.5 ; 31 } 32 const stress seqel = sigmaeq(sigel); 33 const stress Rpel = R_inf + (R_0-R_inf)*exp(-b*p) ; 34 Fel = seqel - Rpel ; 35} 36 37@ComputeStress{ 38 sig = lambda*trace(eel)*Stensor::Id()+2*mu*eel; 39} 40 41@Integrator{ 42 if(Fel > 0){ 43 // solution plastique 44 // Les variables suivies de _ sont en t+theta*dt 45 const real p_ = p +theta*dp ; 46 const real Rp_ = R_inf + (R_0-R_inf)*exp(-b*p_) ; 47 Stensor a_[2]; 48 // calcul du tenseur Sigma-X 49 Stensor sr = deviator(sig); 50 for(unsigned short i=0;i!=2;++i){ 51 a_[i] = a[i]+theta*da[i]; 52 sr -= C[i]*a_[i]/1.5; 53 } 54 const stress seq = sigmaeq(sr); 55 Stensor n = 1.5*sr/seq; 56 feel = deel - deto + dp*n ; 57 fp = (seq-Rp_)/young; 58 for(unsigned short i=0;i!=2;++i){ 59 fa[i] = da[i] - dp*(n-g[i]*a_[i]); 60 } 61 } else { 62 // solution elastique 63 feel = deel - deto; 64 } 65} 66 67@TangentOperator{ 68 if((smt==ELASTIC)||(smt==SECANTOPERATOR)){ 69 computeElasticStiffness<N,Type>::exe(Dt,lambda,mu); 70 } else if (smt==CONSISTENTTANGENTOPERATOR){ 71 StiffnessTensor De; 72 Stensor4 Je; 73 computeElasticStiffness<N,Type>::exe(De,lambda,mu); 74 getPartialJacobianInvert(Je); 75 Dt = De*Je; 76 } else { 77 return false; 78 } 79} 80