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