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:

@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