1@Parser PleiadesModel;
2@Model  SiCSwellingModelTest;
3@Author Helfer Thomas;
4@Date   05 Déc. 2007;
5
6@Output s;
7s.setGlossaryName("SolidSwelling");
8s.setDepth(1);
9
10@Input f;
11f.setGlossaryName("Fluence");
12f.setDepth(1);
13
14@Input T;
15T.setGlossaryName("Temperature");
16T.setDepth(1);
17
18@LoadingVariable n;
19n.setEntryName("NeutronFlux");
20n.setDepth(1);
21
22@Function compute
23{
24  const real Phi0 = 0.3396e25;
25  const real theta = 0.5*(T_1+T)-273.15;
26  const real Phi   = 0.5*(f_1+f);
27  real swellingSaturation;
28  real incr;
29  // the original law is given in %,
30  // so values of swellingSaturation are here divided by 100.
31  if((25<=theta)&&(theta<=800.)){
32    swellingSaturation = -3.3283e-5*theta+3.1133e-2;
33  } else if ((800.<theta)&&(theta<=1000.)){
34    swellingSaturation = -1.3528e-5*theta+1.5329e-2;
35  } else if ((1000.<theta)&&(theta<=1500.)){
36    swellingSaturation = 0.18e-2;
37  } else {
38    ostringstream msg;
39    msg << "SICSolidSwellingModel::computeSolidSwellingIncrement : ";
40    msg << "temperature is out of bounds (" << theta << ")";
41    throw(runtime_error(msg.str()));
42  }
43  incr  = swellingSaturation/Phi0;
44  incr *= exp(-Phi/Phi0);
45  // terme supplémentaire à plus haute température
46  if((1000.<theta)&&(theta<=1250.)){
47    incr+=1.297e-28*((theta-1000.)/250.);
48  }
49  if(theta>=1250.){
50    incr+=1.297e-28;
51  }
52  incr *= 0.5*(n+n_1)*dt;
53  s = s_1 + incr;
54} // end of function compute
55