Overview and main concepts

The NonLinearEvolutionProblem class

The main class of MFEM/MGIS is called NonLinearEvolutionProblem and describes the evolution of the materials of the physical system of interest over a single time step for a given phenomenon.

Currently MFEM/MGIS provides built-in support for mechanics, heat transfer, and micromorphic damage.

The following snippet declares a new nonlinear evolution problem:

mfem_mgis::NonLinearEvolutionProblem problem(
    {{"MeshFileName", "fuel.msh"},
     {"FiniteElementFamily", "H1"},
     {"FiniteElementOrder", 6},
     {"UnknownsSize", 1},
     {"Hypothesis", "Tridimensional"},
     {"Parallel", true}});

As the unknown is scalar (according to the UnknownsSize parameter), this problem can be used to describe heat transfer or micromorphic damage, depending on the behaviour integrators declared, as explained in the next section. The NonLinearEvolutionProblem class supports both sequential and parallel computations and lets the user exploit a large subset of MFEM abilities, including the use of finite elements of arbitrary orders.

A staggered approach for multiphysics simulations can be set up by using several instances of NonLinearEvolutionProblem.

The PeriodicNonLinearEvolutionProblem class

MFEM/MGIS provides a specialized version for the NonLinearEvolutionProblem for periodic computations named PeriodicNonLinearEvolutionProblem.

This class allows managing the evolutions of the macroscopic gradients (strain in small strain analysis, deformation gradient in finite strain analysis, temperature gradient in heat transfer analysis) and pass them to the behaviour integrators.

Note about linear analyses

As implied by its name, the NonLinearEvolutionProblem is focused on nonlinear resolutions. Linear analyses can still be performed by using linear behaviours (generated by MFront), but with a computational overhead compared to linear analysis made with optimised kernels, such as the elastic kernels provided natively by MFEM.

In our experience, this overhead is limited and mostly comes from the extra flexibility allowed by MFEM/MGIS. For instance, MFEM elastic kernels assume that material properties (Young’s modulus, Poisson’s ratio) are uniform on each material.

Behaviour integrators

MFEM/MGIS allows the assignment of distinct behaviours to each material. To achieve this, a special nonlinear formulation has been implemented which delegates the computations of residual and jacobian terms on each material to so-called behaviour integrators.

Behaviour integrators are associated with a physical phenomenon and a modelling hypothesis (plane strain, plane stress).

The following snippet assigns the behaviour integrator named Mechanics to the material named beam to the mechanical non linear evolution problem named Mechanics:

mechanics.addBehaviourIntegrator("Mechanics", "beam",
                                  "src/libBehaviour.so",
                                  "MicromorphicDamageI_SpectralSplit");

The behaviour MicromorphicDamageI_SpectralSplit is loaded from a library named libBehaviour.so which shall have been generated using MFront before running the simulation. The behaviour integrator Mechanics supports arbitrary small strain and finite strain behaviours.

Internally, the addBehaviourIntegrator method calls an abstract factory which instanciates a BehaviourIntegrator dedicated to the kind of behaviour selected by the user (small or finite strain) and the modelling hypothesis declared by the problem (plane strain, plane stress, tridimensional, etc.).

About the definition of material properties

Behaviours may require the user to provide properties, such as the Young’s modulus, Poisson’s ratio, etc.. In MFEM/MGIS, those properties can be uniform on the material or given by a partial quadrature function. The latter case allows the properties to be defined independently on each integration point, which is required if those properties depend on local material properties or the local state of the material (for instance, the local temperature).

User interface

The MFEM/MGIS library is written in C++17 language.

As the application targets mechanical engineers, it provides a high level of abstraction, focused on the physical aspects of the simulation and hiding most numerical details by default.

The API is declarative and mostly based on data structures similar to a python dictionary, hence limiting direct usage of C++. In particular, such data structures are used to instantiate non linear evolution problems, behaviour integrators, post-processings, and boundary conditions.

Note

This data structure can be read from a JSON-file allowing to create domain-specific applications.

Post-processings

Various post-processings are available. Here are some examples of post-processings that were added to MFEM/MGIS:

  • ComputeResultantForceOnBoundary: Compute the resultant of the inner forces on a boundary.

  • ComputeMeanThermodynamicForcesValues: Compute the macroscopic stress and strain for each material.

  • ParaviewExportIntegrationPointResultsAtNodes: Paraview post processing files of partial quadrature functions, like the ones associated with the internal state variables.

See Section Post-processings for a complete description.