L'équipe projet Pomdapi s'intéresse à la construction et à l'analyse d'outils de simulation pour la modélisation de problèmes environnementaux et énergétiques. Ces outils incluent des schémas d'approximation numérique pour les équations aux dérivées partielles, des solveurs non-linéaires, et des techniques numériques pour l'optimisation et les problèmes de complémentarité. Nous nous intéressons également aux méthodes de programmation sûre et correcte pour l'implémentation de ces outils.

1. Modélisation numérique pour l'environnement

1.1. Modèles couplés

La plupart des situations dans la simulation du sous-sol font intervenir plusieurs modèles physiques. Dans ces cas, on a besoin de codes de calculs pour les différents modèles, ainsi que d'un modèle décrivant les intéractions entre eux.

Couplage transport-chimie

Les phénomènes geochimiques résultent de l'intéraction entre le transport des solutés et les réactions chimiques dans le sous-sol. Ces phénomènes jouent un rôle important dans la simulation des sites de stockage de déchets nucléaires, dans la séquestration du gaz carbonique (CO2) ou pour la biorémédiation de sites pollués.

Le modèle mathématique couple la description du transport de différents composants dans un écoulement, éventuellement multiphasique, avec celle des réactions chimiques entre ces composants et la roche. Le couplage intervient dans les termes sources des équations de conservation de la masse des différents composants.

Nous avons développé un algorithme de couplage basé sur la méthode de Newton-Krylov. Il combine les avantages des méthodes de séparation d'opérateur (facilité de mise en œuvre, séparation des modules de transport et de chimie) avec ceux de la méthode de Newton (robustesse, vitesse de convergence).

2. Optimisation et problèmes de complémentarité

3. Modèles de programmation

Le développement de programmes de calcul scientifique corrects et efficaces est un défit majeur des prochaines années.

Nous abordons l'aspect de l'efficacité par le développement de nouveaux algorithmes, et par l'utilisation de techniques de parallélisation. Nous traitons la dimension de la correction au niveau de la programmation par l'emploi de jeux fixés de templates ou objets métier, et au niveau théorique par l'exploration de la preuve formelle de programmes numériques.

3.1. Calcul haute performance

Décomposition de domaines en espace et en temps

Il est maintenant établi que les méthodes de décomposition de domaines en espace donnent des algorithmes qui passent à l'échelle pour les problèmes stationnaires. Elles peuvent également être utilisées pour les problèmes de transport. Dans certaines applications, telles que le stockage de déchets radioactifs, les propriétés physiques des différentes couches du domaines varient sur plusieurs ordres de grandeur, ce qui nécessite des paramètres de discrétisation (maillage, pas de temps) différents. Les méthodes de décomposition de domaines en espace et en temps fournissent un cadre naturel pour utiliser des pas de temps différents dans les sous-domaines qui ont des caractéristiques physiques différentes.

Parallélisation

La façon la plus simple de paralléliser un code de calcul passe par l'utilisation d'une bibliothèque parallèle, telle que par exemple PETSc ou Trilinos pour des méthodes itératives, ou MUMPS pour les méthodes directes. Ces méthodes sont très efficaces, et passent à l'échelle. Cependant, l'approche algébrique n'est pas toujours appropriée. Comme indiqué ci-dessus, les méthodes de décomposition de domaines peuvent conduire à des méthodes efficaces pour une large gamme de problèmes. Elles peuvent être facilement mises en œuvre sur les architectures à mémoire distribuées.

Une caractéristique commune des modèles physiques et des architectures informatiques est leur nature hiérarchique : un modèle couplé (comme le transport réactif) comprend plusieurs équations, et la décomposition de domaine donne un niveau supplémentaire de parallélisme. Dans de nombreux cas, les sous-domaines restent suffisamment grands pour qu'une méthode de résolution parallèle soit encore efficace.

3.2. Programmation sûre et correcte pour le calcul scientifique

Les outils disponibles actuellement pour la parallélisation, bien qu'apportant une flexibilité maximum, rendent difficile le développement de programmes parallèles corrects. Au contraire, l'approche de programmation par squelettes de parallélisme fonctionnels offre un jeu limité de constructions de haut niveau pour définir le comportement parallèle des programmes. Nous implémentons Sklml, un tel système de compilation et de programmation par squelettes de parallélisme fonctionnel.

En calcul scientifique, le besoin d'implémentation d'algorithmes de plus en plus complexes est croissant. Par exemple, l'équipe-projet travaille entre autres sur deux types de problèmes complexes : (i) le couplage de codes, en particulier par des algorithmes de décomposition de domaine, et (ii) les problèmes inverses, en particulier la paramétrisation adaptative optimale par indicateurs de raffinement. Les applications qui résolvent ces problèmes se décomposent en une partie algorithmique générique et une partie calculatoire spécifique. L'idée est de fournir une fois pour toutes la partie générique sous la forme d'un programme exécutable pilote (l'objet métier numérique) ; l'utilisateur de la plateforme n'ayant plus qu'à apporter les programmes travailleurs spécifiques à l'application.

Notre but à long terme concernant la correction de programmes numériques est d'obtenir des codes numériques qui soient entièrement vérifiés par la machine. Cette activité de recherche prospective est une collaboration étroite avec l'Epi Proval de l'Inria Saclay et le LIPN de l'Université de Paris 13, dans le cadre de l'ANR Fost. Nous avons déjà prouvé formellement un programme C qui implémente un schéma numérique simple pour la résolution de l'équation des ondes acoustiques mono-dimensionnelle. Nous envisageons maintenant de nous attaquer à la preuve formelle de programmes numériques beaucoup plus complexes dont des programmes de pointe utilisant la méthode des éléments finis.