# FESh++, une nouvelle approche orientée objet pour la simulation par éléments finis des problèmes multiphysiques

Daniel Marceau, Patrice Goulet, Daniel Richard, Mario Fafard

► To cite this version:

Daniel Marceau, Patrice Goulet, Daniel Richard, Mario Fafard. FESh++, une nouvelle approche orientée objet pour la simulation par éléments finis des problèmes multiphysiques. 7e colloque national en calcul des structures, CSMA, May 2005, Giens, France. hal-01813058

HAL Id: hal-01813058

https://hal.science/hal-01813058v1

Submitted on 12 Jun 2018

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_1.png" /></figure>

Distributed under a Creative Commons CC0 1.0 - Universal - International License
FESh++, une nouvelle approche orientée
objet pour la simulation par éléments finis
des problèmes multiphysiques

Daniel Marceau* — Patrice Goulet** — Daniel Richard*** — Mario Fafard**

*Département des sciences appliquées, Université du Québec à Chicoutimi
Québec, Canada, G7H 2B1
dmarceau@uqac.ca

**Département de génie civil, Université Laval, Québec, Canada, G1K 7P4
{pgoulet,mfafard}@gci.ulaval.ca

***Hatch, Sheridan Science and Technology Park, Mississauga
Ontario, Canada, L5K 2R5
DRichard@hatch.ca

RÉSUMÉ. Cet article présente une toute nouvelle approche pour la conception orientée objet d'un noyau de calcul par éléments finis pour la résolution des problèmes multiphysiques. Cet outil, appelé FESh++, tire son originalité de la classification particulière des objets associés à la méthode des éléments finis ainsi que du développement d'objets génériques permettant ainsi l'atteinte d'une grande flexibilité d'implémentation. L'approche objet a permis la définition d'une hiérarchie très versatile et extensible des lois de comportement basées sur la thermodynamique des processus irréversibles. À ce jour, FESh++ fut largement utilisé dans le cadre de applications numériques industrielles telles que la simulation du préchauffage des cuves d'électrolyse, la cuisson de blocs cathodiques ainsi que le séchage du bois.

ABSTRACT. This paper presents a new approach based on the object-oriented concept for the design of a multi-physics finite element analysis toolbox. This toolbox, called FESh++, provides originality coming from the object-oriented definition of the finite element objects and the development of new generic objects providing a very large flexibility during implementation. In particular, a very expandable hierarchy of constitutive laws has been developed according to the thermodynamic of irreversible processes. At this day, FESh++ has been used to solve several multi-physics industrial applications such as simulation of electrolytic cell preheating, baking of carbon block and wood drying.

MOTS-CLÉS : méthode des éléments finis, programmation orienté-objet, multiphysique, couplage.

KEYWORDS: finite element method, object-oriented programming, multi-physics, coupling.
# 1. Introduction

Traditionnellement, la structure de la grande majorité des logiciels d'analyse par la méthode des éléments finis fut héritée de l'ère du FORTRAN, encore aujourd'hui, utilisé par la communauté scientifique. Language très efficace, le FORTRAN ne possède cependant aucune structure de données de haut niveau, ce qui rend ardu le développement de codes de calcul pour la résolution de problèmes complexes nécessitant la gestion de plusieurs champs de calcul. En contrepartie, la conception orientée objet, a permis le développement de nouvelles approches pour la gestion des applications complexes [LIP 98]. L'outil FESh++ (Finite Element Shell in C++) fut développé pour la simulation du préchauffage en régime transitoire d'une cuve de Hall-Héroult [Dés 03]. Les besoins inhérents à la résolution de ce problème à trois champs (thermoelectro-mécanique) avec interfaces de contact multiphysiques entre matériaux complexe et fortement non linéaire ont menés à la conception d'une structure orienté-objet originale. Une revue exhaustive des codes de calcul disponibles nous a rapidement menés à la conclusion que ces derniers ne possédaient pas la flexibilité nécessaire à la réalisation de ce projet.

# 2. Définition des exigences

La conception du code est basée sur l'obtention d'un noyau de calcul par éléments finis permettant la création d'applications diverses pour la résolution de problèmes quelconques dans un contexte mono ou multiphysiques. L'outil se devait d'être efficace en temps de calcul, très flexible et extensible à divers niveaux afin de permettre l'ajout de nouvelles formulations, lois constitutives et méthodes de résolution tout en permettant un interfaçage générique vers les logiciels de pré- et post-traitement. Ce noyau se doit également de regrouper les fonctionnalités nécessaires à l'écriture d'une application spécifique. De nombreux outils numériques étant disponibles dans le domaine publique, nous avons concentré les développements sur les aspects essentiels en exploitant certains de ces outils à l'aide d'interfaces génériques. Le développement d'une application est donc obtenue par l'utilisation exclusive de fonctionnalités présentes dans FESh++. La Figure 1, présente l'interrelation du noyau de calcul FESh++ avec les outils externes considérés. FESh++ utilise la librairie numérique PETSc [BAL 04] pour la résolution du système linéarisé, Parser [OLL 01], pour la résolution d'expressions algébriques, Contacta [MAR 01, GOU 04], pour la résolution des interfaces de contact multiphysiques ainsi que Metis [BAL 04], pour la sous-structuration par sous-domaine.

# 3. Architecture proposée

Nous avons opté pour le développement d'un noyau de calcul orienté-objet en langage C++. Ce choix fut dicté par les grandes possibilités qu'offre ce langage ainsi que
par notre vaste expérience dans le domaine du développement d'applications numériques dans ce langage.

## 3.1. Concepts de base

Les exigences établies ont mené à un design de FESh++ favorisant l'indépendance entre l'élément et la physique. L'élément (**FEShElement**) est donc un objet purement géométrique constitué d'un certain nombre de nœuds (**FEShNode**). Dans le but de permettre l'assignation d'informations diverses (tables de localisation, variables internes, degré de liberté, etc.) aux éléments et aux nœuds, ces derniers se doivent de faire office de porteurs génériques d'informations. Pour ce faire, un porteur générique (**FEShDataKeeper**) a été développé permettant de conserver une information assisegnée à une clé spécifique. Il suffit alors de faire hériter un objet de l'objet **FEShData-Keeper** pour en faire indirectement un porteur générique. Afin de bénéficier du maximum de souplesse de l'étape de pré-traitement, un ensemble d'étiquettes (**FEShTag**) fournis par le logiciel de pré-traitement, peuvent être attachées à un élément ou un nœd dans un conteneur d'étiquettes (**FEShTagSet**). Ces étiquettes servent à regrouper les objets dans un contexte particulier. Les éléments sont conservés dans un maillage (**FEShMesh**) constitué d'un gestionnaire de nœuds (**FEShNodeManager**) et d'éléments (**FEShElemManager**). Dans un contexte multiphysiques, il devient nécessaire de subdiviser le maillage en sous-maillages afin de regrouper les éléments affectés par une physique ou se retrouvant sur une frontière de contact. Pour se faire, un sous-maillage (**FEShSubMesh**), héritant du maillage, conserve une trace mémoire des éléments et nœuds nécessaires afin d'éviter la duplication.

<figure><img src="image_2.png" /><figcaption>**Figure 1.** Description du noyau de calcul FESh++</figcaption></figure>
## 3.2. Définition de la physique

La physique du problème est définie sur la base des champs (FESHField). Ceux-ci se subdivisent en deux catégories soient les champs géométriques (FESHGeoField) et de calcul (FESHDOFField). Ce sont les champs qui gèrent la nature des degrés de liberté associés aux nœuds par l'intermédiaire des porteurs génériques. Le champ est construit directement sur un maillage. Plusieurs champs peuvent être définis sur différentes régions du maillage. Le champ doit répondre aux requêtes relatives à son évaluation ainsi qu'aux gradient spatiaux et temporels. Pour ce dernier, un schéma d'intégration (FESHTimeIntegrator) doit être assigné au champ. Quant à l'interpolation, elle est définie de façon indépendante dans un groupe d'interpolation (FESH-InterpGroup) pour chaque type d'élément présent dans le maillage. Le groupe d'interpolation est par la suite assigné au champ.

### 3.2.1. Formulation et terme de formulation

La création du système linéarisé implique l'assemblage des contributions de chacune des intégrales (termes de formulation) qui composent les formulations [GOU 04]. La formulation est donc responsable d'assembler les contributions de ses termes de formulation pour chacun des éléments du maillage. La formulation générique (FESH-Formulation) contient, en plus du maillage, une liste de termes de formulation qui sera interrogée pour obtenir les contributions élémentaires. Elle contient les gestionnaires relatives aux matériaux ainsi qu'aux variables internes et d'état [RIC 04]. Pour une formulation spécifique, celle-ci connaît les champs dont ses termes de formulation ont besoin pour faire les calculs élémentaires. Il est possible de spécialiser une formulation en ajoutant des termes de formulation par la méthode *addFormTerm*. Par exemple, une formulation thermique enthalpique qui dérive de la formulation thermique et à laquelle on ajoute un terme de formulation de chaleur latente. Chacun des termes de formulation possède un ou plusieurs objets de type (FESHCoupling) qui regroupent un champ de pondération et un champ de solution. Les termes de formulation sont responsables de remplir les différents blocs de couplage de la matrice et du vecteur élémentaires. De nouvelles formulations peuvent donc être rapidement développées en récupérant le maximum de code. Il suffit d'ajouter les termes de formulation nécessaires ou de réutiliser les termes existants avec une loi constitutive différente.

### 3.2.2. Définition du problème et résolution

La solution d'un problème peut être régie par plusieurs formulations. Pour la résolution de problèmes multiphysiques, on peut vouloir résoudre selon différents ensembles de couplage. Il faut donc être en mesure de regrouper les formulations qui influencent les différentes variables stockées sous forme de champs pour construire les systèmes d'équations correspondants. Ainsi, il est intéressant de définir un problème d'éléments finis en le divisant en sous-problèmes selon les couplages à considérer dans le système matriciel. Le problème éléments finis est donc géré par une classe (FESHProblem). Le problème permet de créer un ou plusieurs sous-problèmes (FESHSubProblem) qui sont conservés dans une liste. Le sous-problème est chargé
de construire le système d'équations pour un ensemble de couplages (FEShCoupling-Set) et regroupe les formulations qui doivent être résolues ensembles. Quant à la résolution d'un problème dans FESh++, celle-ci demande la résolution successive des sous-problèmes qui le composent. Chaque sous-problème est résolu séparément mais il faut tout de même s'assurer de la convergence globale du problème. Il est possible de choisir pour chaque sous-problème un résoluteur différent. Ceux-ci possèdent une interface commune FEShSolver qui contient le système matriciel et une méthode solve. Finalement, la Figure 2 présente la structure complète d'un problème dans FESh++.

<figure><img src="image_3.png" /><figcaption>Figure 2. Description UML d'un problème éléments finis dans FESh++</figcaption></figure>

## 4. Exemple d'utilisation

L'exemple suivant présente quelques étapes relatives à la résolution d'un problème thermo-mécanique couplé. Considérant un maillage quelconque, une des premières étape consiste à définir le niveau d'interpolation. Par la suite, les champs géométrique (Geo) et de calcul (T,U) sont créés avec assignation de l'interpolation. La physique est alors définie en utilisant une formulation thermo-mécanique avec tenseur des déformations de Green-Lagrange. Les champs sont ensuite assignés. Le problème est ensuite construit en considérant un seul sous-problème incluant la formulation définie. Le sous-problème est ensuite résolu à l'aide d'une méthode de Newton-Raphson classique.

```cpp
/**Create the interpolation group on triangular elements
FEShInterpGroup lInterpGroup;
lInterpGroup.asgnInterpolation(FEShInterpLagrange(FEShElemT6()));
/**Create the geometric field and calculation fields
FEShGeoField lGeometry("Geo",lMesh);
lGeometry.asgnInterpGroup(lInterpGroup);
FEShDOFFieldVect3D1Displacement("U",lMesh);
lDisplacement.asgnInterpGroup(lInterpGroup);
FEShDOFFieldScalar lTemperature("T",lMesh);
lTemperature.asgnInterpGroup(lInterpGroup);
/**Create the Thermal - Lagrangian Mechanics formulation
FEShFThermoMechLagrange lFormulation;
lFormulation.asgnMesh(lMesh);
lFormulation.asgnFields(lGeometry,lTemperature,lTemperature,1Displacement,1Displacement);
```
```cpp
/**Create a problem and a thermo-mechanical sub-problem
FEShProblem lProblem;
FEShSubProblem* lSubProblem = lProblem.addSubProblem("ThermoMechLagrange");
/**Add the mechanical formulation to the sub-problem
lSubProblem->addFormulation(lFormulation);
/**Initialize the problem
lProblem.initialize();
/**Create a Newton-Raphson solver and assign to the sub-problem
FEShSolverNR lSolver(1e-8,100);
lSubProblem->asgnSolver(lSolver);
/**Solve the problem
lSubProblem->solve();
```

## 5. Conclusion

Les principes de base de la conception orienté-objet ont permis le développement d'un noyau de calcul par éléments finis pour la résolution des problèmes multiphysiques. En particulier, l'utilisation de la notion de sous-problème regroupant l'ensemble des formulations associées à la résolution d'un système linéarisé ainsi qu'un résoluteur spécifique a permis d'obtenir une structure à la fois flexible et extensible. Un court exemple à permis d'illustrer la simplicité associée au développement d'une application thermo-mécanique. Des développements actuellement en cours dans FESh++ permettront prochainement la résolution des sous-problèmes par des techniques de sous domaine.

## 6. Bibliographie

[BAL 04] BALAY S., BUSCHELMAN K., EIJKHOUT V., GROPP W. D., KAUSHIK D., KNEPLEY M. G., MCINNES L. C., SMITH B. F., ZHANG H., « PETSc Users Manual », rapport n° ANL-95/11 - Revision 2.1.5, 2004, Argonne National Laboratory.

[Dés 03] DÉSILETS M., MARCEAU D., FAFARD M., « START-Cuve : Thermo-electromechanical transient simulation applied to electrical preheating of a Hall-Héroult cell. », CREPEAU E., Ed., *Light Metals 2003, proceeding of the 132nd TMS Annual Meeting*, 2003, p. 247-254, San Diego, California.

[GOU 04] GOULET P., « Modélisation du comportement thermo-électro-mécanique des interfaces de contact d'une cuve de Hall-Héroult », PhD thesis, Université Laval, Québec, Canada, 2004.

[LIP 98] LIPPMAN S. B., LAJOIE J., C++ Primer, Addison-Wesley, Massachusetts, third édition, 1998.

[MAR 01] MARCEAU D., « Modélisation du contact tridimensionnel avec frottement en grandes transformations et son application à l'étude des dispositifs d'ancrages multitonrons », PhD thesis, Université Laval, Québec, Canada, 2001.

[OLL 01] OLLMANN I., « Mathematical Expression Parser, Users Manual », rapport n° Revision 1.3, 1997 – 2001.

[RIC 04] RICHARD D., « Aspects thermomécaniques de la modélisation par éléments finis du préchauffage électrique d'une cuve de Hall-Héroult : Lois constitutives, conception orientée-objet et validation. », PhD thesis, Université Laval, Québec, Canada, 2004.