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