Models describe the evolution of some state variables of the material during a time step.

To illustrate how a model can be implemented using MFront, let us consider a simple solid swelling model which describes the evolution of the swelling \(s\) as a function of the porosity \(f\) and the burn-up \(\tau\):

\[ {\frac{\partial s}{\partial \tau}}=C_{1}\,\exp{\left(C_{2}-f\right)} \]

A simple semi-implicit scheme can be used to integrate this equation upon a time step:

\[ \Delta\,s=C_{1}\,\exp{\left(C_{2}-{\left.f\right|_{t+\theta\,\Delta\,t}}\right)}\,\Delta\,\tau \]

which can be also written as:

\[ {\left.s\right|_{t+\Delta\,t}}={\left.s\right|_{t}}+C_{1}\,\exp{\left(C_{2}-{\left.f\right|_{t+\theta\,\Delta\,t}}\right)}\,{\left({\left.\tau\right|_{t+\Delta\,t}}-{\left.\tau\right|_{t}}\right)} \]

This equation is the basis of the MFront implementation of the model:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@Parser   Model;
@Model    SolidSwellingModel;
@Material UPuC;
@Author   Helfer Thomas;
@Date     06 december 2007;

@Output s;
s.setGlossaryName("SolidSwelling");
s.setDefaultInitialValue(0.);
s.setDepth(1);

@Input Bu;
Bu.setGlossaryName("BurnUp");
Bu.setDepth(1);

@Input f;
f.setGlossaryName("Porosity");
f.setDepth(1);

@Function compute
{
  const real coef1 = 8.e-3;
  const real coef2 = 4.e-2;
  const real f_    = 0.5*(f+f_1);
  s = s_1 + coef1*exp(coef2-f_)*(Bu-Bu_1);
} // end of function compute