27 juin 2002
Les recherches dans le domaine de l'analyse numérique en France sont souvent très spécialisées dans un domaine de la physique. On commence depuis quelques années à modéliser des phénomènes de fluides complexes ou multi-phasiques. Mais de nombreux projets visent à modéliser des phénomènes très précis, donc utiliser dans des industries très pointues. Peu de projets englobent des modèles radicalement différents (comme l'hydrodynamique et la mécanique des milieux continus, ou l'électromagnétisme, par exemple), sur des grands ensembles.
Un fait d'actualité est très parlant : Le crash en novembre 2001 (pour perte de dérive arrière) d'un avion sur New-York, dont on ne connaît toujours pas les causes officielles est un évènement très problématique pour les constructeurs et les compagnies (ainsi que pour les voyageurs !).
Depuis plus de vingt années, on construit des avions avec des matériaux composites en testant des éprouvettes pour la résistance et le vieillissement de ces matériaux. Par contre on ne savait et on ne sait toujours pas considérer (calculer) l'avion comme une entité globale (aérodynamisme, structure, thermique, électronique, dans un vol complet). On calcule simplement l'aérodynamisme d'une aile ou son vieillissement. Or il est évident que les matériaux, insérés dans une structure globale, soumis à des vols réguliers, ne subissent pas les mêmes contraintes à long terme que celles imposées à une seule partie.
C'est une avancée majeure dans le domaine de la sécurité des passagers qui doit se jouer : comme pour les véhicules terrestres, les avions de lignes doivent être testés globalement avant leur mise sur le marché. Le problème est la taille des calculs. Les avancées en informatique, et plus particulièrement les grappes de PC et le réseau VTHD (Vraiment Très Haut Débit, réseau à plus de 2 Go/s), permettent d'envisager de tels calculs dans un avenir proche. En effet, non seulement cette grille de grappes de PC, mise en place sur trois sites éloignés de l'INRIA, forme une machine parallèle très concurrentielle (classée environ 300ème en 2001), mais elle permet surtout de faire du calcul réparti sur plusieurs grappes de PC et couplés. La cohérence entre le couplage de code (calcul réparti) et le couplage de modélisation (couplage par décomposition de domaines) est totale. Cela améliore les performances et la taille des calculs.
Il est donc important de construire un code de modélisation numérique complet (fluide, thermique, structure, électromagnétisme) adapté à la grille de grappes. Il s'agit dans un premier temps de construire une application distribuée, basée sur un module de couplage parallélisé (client) et un ou plusieurs solveurs fluides VF (VF : solveur Volumes Finis) et SPH (SPH : solveur particulaire - Smooth Particle Hydrodynamics, voir [Lac97 ] ou [Lan00 ]).
Dans la figure qui suit, on a représenté un calcul global de l'aérodynamisme d'un avion et les interactions entre les différents codes gérés par CAST.
Le couplage est parallélisé grâce à des zones de couplage déterminées par l'utilisateur. Celles-ci fournissent la géométrie et les conditions initiales et définissent des zones de solveur (fixes ou mobile, fixes par rapport à un bord) et les zones de couplage entre les solveurs. On utilisera des objets ``zone'' (CORBA-tisé, c'est-à-dire encapsulés dans un objet CORBA, pour permettre les communications entre objets sur grappes distantes) pour chaque résolution numérique et un objet ``couplage'' (CORBA-tisé lui aussi) qui communiqueront entre eux par l'intermédiaire de CAST. Le couplage pourra être VF-VF et VF-SPH.
Les codes de calcul stockeront les éléments (particules ou mailles, modèle, solveur) qu'ils possèdent et qui sont situés sur la zone. Ils seront retournés au code de couplage, qui calculera le couplage de manière parallèle et renverra ces éléments aux codes.
On a donc besoin de créer trois codes parallélisés :
On pourra donner deux versions du calcul des flux dans ce code pour construire les résolutions d'Euler et de Navier-Stokes.
Comme le démontrent Denis Trustram et Pierre-Eric Bernard, dans
la thèse [Ber97
], la répartition des tâches de calcul et celles de communication
d'un code est importante pour l'optimisation d'un code de calcul parallèle.
Le but de la librairie ATHAPASCAN (B. Plateau, projet APACHE - INRIA) est
de construire et d'analyser cette optimisation (concept de multiprogrammation
par processus légers communicants). Dans ce travail, nous avons utilisé
librairie de communication parallèle MPI. Nous avons tenu compte des
conclusions de cette thèse en construisant notre parallélisation
avec une notion de découpage en boites recouvrantes (voir section
3.1
). La position et la taille de ces boites sont optimisées pour égaler
la charge de calcul des processus parallèles. La future transformation
MPI
ATHAPASCAN oblige à ne pas utiliser directement les fonctions d'échange
MPI. On a donc créé un objet ``parallele'' les appelant. Ainsi,
on pourra facilement modifier la bibliothèque et en utiliser une autre.
Plan du rapport
Dans un premier chapitre, nous présentons l'algorithme de couplage complet, ainsi que les tests connus que l'on pourra faire subir au programme distribué.
Quant au second chapitre, il contient les informations sur la programmation et l'utilisation du code FluideGlobal. On a mis l'accent sur la manière dont le solveur parallèle a été programmé, afin d'optimiser les recouvrements des communications par des calculs.
Nous allons présenter une nouvelle méthode de couplage de schémas pour les lois de conservation. Les lois de conservation interviennent dans de nombreux problèmes industriels, notamment pour l'hydrodynamique (avec le modèle d'Euler) et l'électromagnétique (modèle de Maxwell). Le couplage de schémas permet non seulement de faire une décomposition de domaines, mais il permet en plus d'utiliser localement des schémas adaptés aux problèmes physiques.
Les méthodes de couplage par recouvrement de domaine existent depuis de nombreuses années ([Sta77 ], [Kre83 ], [BD83 ] et récemment [PS94 ]). Ces méthodes de couplage de schémas numériques pour la résolution des systèmes hyperboliques non-linéaires possèdent actuellement d'importants défauts de stabilité et de précision (voir la thèse d'Eva Pärt-Enander [ Pär95 ]). Cette constatation que nous avons faite avec Jean-Paul Vila (voir ma thèse [Man01 ]), nous a poussés à construire un algorithme de couplage par recouvrement de domaine très novateur. En effet, on fait se chevaucher les domaines sur une zone déterminée, afin de passer d'une méthode numérique à une autre. C'est ce qu'on appelle le couplage par recouvrement de maillage. Le point important concernant cette méthode est qu'il n'y a pas de condition aux limites du domaine de couplage.
Dans le cas scalaire, par exemple, la solution
d'un modèle hyperbolique non-linéaire vérifie :
où la jacobienne du flux
est diagonalisable et à valeurs propres réelles.
De plus, nous avons montré théoriquement que dans ce cas scalaire, cet algorithme est stable et convergeant. L'estimation de l'erreur de couplage est négligeable devant celles des schémas Volumes Finis utilisés. (voir [Man01 ], )
On définit donc deux sous-domaines (notés
et
) du domaine complet
qui se recouvrent sur une zone (que l'on appellera zone de couplage) notée
. Ils sont donc tels que :
Cette zone de couplage
doit surtout être de mesure non négligeable par rapport au
support de la condition initiale
.
Sur ces deux sous-domaines, on utilise des maillages quelconques de type Éléments Finis. On ne peut pas avoir l'un des nœuds d'une maille à l'intérieur de l'une des arêtes d'une autre maille. De plus, la triangulation n'est pas dégénérée (aucun triangle n'est aplati).
La solution approchée du schéma Volumes Finis numéro
'
' (
) est obtenue au temps
de la manière suivante;
:
avec
.
où
désigne le flux numérique qui calcule la solution élémentaire
1D du système hyperbolique.
La projection pour des solutions approchées constantes par morceau,
dans la zone de recouvrement (zone de couplage) est
Avec
Le calcul de cette projection est alors réduit, dans le cas de deux maillages fixes, au calcul préliminaire des intersections des mailles de ces maillages, dans la zone de couplage. A chaque pas de temps, on aura une simple multiplication matrice-vecteur à calculer, où la matrice est la matrice des mesures des intersections et le vecteur, le champ à projeter.
On définit la fonction de couplage
à l'aide d'une fonction que l'on prolonge par continuité à
tout
de la façon suivante :
Une représentation possible de cette fonction
est donnée dans la figure 2.1
.
On définit les deux sous-domaines (vitaux pour la convergence) de
où la fonction de couplage vaut vraiment :
Les résultats théoriques montrent que ces ensembles sont vitaux pour la stabilité de l'algorithme.
On approche alors cette fonction de couplage de la même manière
que pour les Volumes Finis :
|
|
|
|
Le principe global de l'algorithme est le suivant : on part des solutions
approchées à un instant
donné. On utilise les deux schémas numériques séparément
(opération que l'on note alors respectivement
et
), puis on effectue la correction par le couplage (projection
et
), pour obtenir les solutions à l'instant suivant
. On a représenté schématiquement ces étapes
dans la figure 2.2
.
Dans cette figure, les étapes
et
correspondent aux deux schémas numériques et les étapes
et
représentent les projections et le couplage.
Enfin, on définit la solution approchée moyennée :
qui est la solution du problème, valable dans tout le domaine.
En dimension 3, le système d'Euler (dont la solution
est dans
) est tel que :
|
|
avec
|
|
désigne la densité,
désigne le vecteur vitesse,
désigne l'énergie totale et
désigne la pression du fluide. Il s'agit bien d'une loi de conservation
non linéaire où
désigne le flux.
On fait alors des hypothèses de comportement sur le fluide, qui
entraînent des lois de comportement :
|
|
où l'on définit le paramètre adimensionné
et la vitesse du son :
|
|
|
|
|
|
|
|
Nous disposons d'un certain nombre de cas tests sévères en mécanique des fluides compressibles. Le cas test d'école est le tube à choc de Sod. Il s'agit d'un tube, en théorie infiniment long, qui contient deux gaz aux repos, dont on connaît les conditions initiales.
Lorsqu'on enlève la séparation initiale entre les deux zones, on obtient différentes ondes que l'on sait calculer exactement, du fait de la symétrie centrale du problème :
Le cas test de l'injection d'un gaz dans un autre est un exemple développé dans ma thèse.
Nous pourrons ré-étudier ce cas au travers de ce code multi-fluide, en utilisant les différentes grappes de PC pour les deux schémas Volumes Finis et l'algorithme de couplage. C'est le cas dans les deux figures suivantes :
Dans la figure 2.7 , le jet est déjà formé et l'onde de choc qui le précède va frapper contre la cible.
Enfin dans la figure suivante, on présente le même calcul, avec une modélisation VF-SPH (la méthode particulaire étant utilisée pour la chambre de droite). On a mis la zone de couplage en évidence, dans la figure inférieure droite.
À l'heure où nous rédigeons ce rapport, nous n'avons malheureusement pas encore pu lancer des cas-tests, du fait de la grande complexité de la programmation de ce code de couplage parallélisé, en 3D et en C++. Néanmoins nous présentons la construction de ce code dans le chapitre suivant.
Le code est organisé comme ceci : il y a une phase d'initialisation
et une phase de calcul. La phase de déclaration comprend les points
suivants :
1
définir la géométrie de base (dimension, forme des objets, bords externes),
2
Déclaration des zones globales
a
modèle parmi une boite
solveur,
b
définitions des conditions aux limites,
3
Validation des zones de couplages (qui ne sont pas forcément au bords des zones de calcul). Appel à CAST pour la réservation des solveurs,
4
Calcul des fonctions de couplage et des matrices d'intersections des mailles, si les deux maillages n'évoluent pas dans le temps.
Puis il y une phase de calcul, qui nécessite d'effectuer les points suivants :
5
calcul des schémas au pas de temps,
6
retour des valeurs dans les zones de couplage,
7
phase de couplage : correction sur ces valeurs,
8
renvoie des données corrigées au solveur,
9
mise à jour de l'affichage et sauvegarde globale.
Les codes de calcul stockent les éléments (particules ou mailles, solveurs, maillage) qu'ils possèdent et qui sont situés sur la zone. Les éléments contenus dans une zone de couplage et les valeurs calculées seront retournés au code de couplage. Celui-ci calculera le couplage de manière parallèle et renverra les valeurs modifiées aux codes solveurs.
Les objets couplages sont chargés des tâches suivantes :
Dans le cas du couplage de deux solveurs VF, on a deux codes principaux :
Boites,
Couplage ou FluideGlobal.
Le code ``Boite'', parallélisé, contient (par exemple au nœud 0), un processus spécial, chargé de la gestion du calcul, que nous nommerons ``Maître'' par la suite.
La phase d'initialisations comporte alors les points suivants :
Maître :
ouverture des fichiers de maillage, allocation et lecture,
Maître :
lecture des paramètres du cas test, des CI et des zones de couplage,
Maître :
envoie les zones de couplage
Maître :
calcul des boites et sous-boites,
Maître :
envoie les résultats boites et sous-boites,
Boites :
attendre l'envoie du maître.
La boucle temporelle contient les actions suivantes :
Boites :
calcul des schémas au pas de temps,
Boites :
retour des valeurs dans les zones de couplage,
Couplage :
phase de couplage : correction sur ces valeurs,
Couplage :
renvoie des données corrigées aux boites,
Maître :
mise à jour de l'affichage et sauvegarde globale.
Maître :
re-calcul des boites et sous-boites, si besoin
Maître :
envoie les résultats boites et sous-boites,
Boites :
calcul le nouveau pas de temps.
On créé des objets - boites parallélisées. Ces boites recouvrent le domaine et se recouvrent mutuellement sur leurs bords. Pour plus de compréhension sur cette notion de boite, on utilise un cas test de choc carré, dont on utilise les deux symétries pour obtenir un choc de coin :
au bout d'un certain temps
, la ligne de choc se déplace et s'arrondit :
On doit donc imposer un rangement des boites non régulier, le long des fortes discontinuités initiales. Et on doit aussi savoir le faire avancer. Mais l'onde de choc traverse cette zone en un temps fini. On a donc pas à la modifier à chaque pas de temps.
Au bout d'un temps
, on devra recalculer les positions et les tailles des boites :
Dans le cas d'un maillage lagrangien (particulaire), le rangement est optimisé le long du choc, pour permettre de respecter les propriétés suivantes
Ces propriétés garantissent que chaque processus a une charge de calculs à peu près égale. On obtient alors les résultats suivants :
|
Figure : onde déformée et schéma |
Les intersections des boites forment des objets sous-boites :
Pour la boite ci-dessous, les intersections avec ses boites voisines sont multiples :
Une fois les sous-boites calculées, on peut placer les éléments dans l'arbre, en remontant des feuilles aux branches par exclusions des éléments des listes (i.e. : l'intérieur d'une (sous-)boite est obtenu en recopiant la liste de ses éléments, puis en supprimant de cette nouvelle liste, les éléments appartenant à ses sous-boites). Ce qui veut dire que les feuilles n'ont que des intérieurs (égalité entre la liste des éléments et celle de l'intérieur).
Parallélisation : on a trois types de sous-boites (et leur intérieur)
Les bandes et coin diffèrent à cause de la normale au bord ou au coin pour déterminer qui effectue le calcul du flux de l'arête.
On a programmé la résolution du système d'Euler dans chaque zone, à l'aide d'un solveur VF standard appelé solveur de Roe.
On utilise la notion de boite pour la parallélisation. Le découpage par recouvrements de boites n'est calculé qu'une seule fois car le maillage fixe au cours du temps. Pour égaliser la charge de calcul, il suffit que les mailles contiennent un nombre de mailles à peu près identique.
On tient compte des remarques de P.-E. Bernard pour l'ordonnancement des tâches de calcul numérique et de communication :
Les calculs de flux aux bords et aux coins sont relativement rapides. On peut alors lancer les communications, tout en calculant le gros du schéma (les interactions à l'intérieur des boites).
Quant au SPH, pour le rendre parallèle, on décide de le remanier. Nous pourrons alors remplacer le schéma Volumes Finis calculant le jet par cette méthode lagrangienne pour notre test d'injection.
La notion de boites mobiles entraîne l'implémentation d'un algorithme d'optimisation linéaire.
·
La spline (
) des nombres de particules :
·
Les splines des cut-offs min et max :
Le cut-off est le paramètre de recherche des voisins pour le calcul des flux dans ces méthodes particulaires. Cette variable évolue au cours du temps et influence beaucoup la taille des calculs.
Le problème des méthodes sans grille est cette recherche
de voisins dans la zone définie par le cut-off. Elle est coûteuse
en temps de calcul et ne tient ni compte de la physique, ni de la forme du
nuage de points (zones de compression et de détente). Nous nous proposons
de tester un nouvel algorithme SPH, basé sur le tri. Les boites parallélisées
sont quadrillées de telle manière que l'on puisse avoir au plus
une particule par case. En fonction des quadrillages possibles et de la valeur
du cut-off de la particule, on applique un masque prédéfini
(localement admissible) pour trouver ses voisins. Ces masques potentiels sont
calculés une fois au début
soit du calcul : ils sont
stockés dans le processus maître du code MPI. Une fois la boite
modifiée, le processus maître envoie les formes de cut-off correspondantes
(
beaucoup d'échanges de petites données).
soit du pas de temps : ils sont alors calculés localement par la boite, pour être réutilisés par toutes les particules possédant la même taille de cut-off (optimisation des cut-offs calculés, mais beaucoup de mémoire utilisée).
CAST permet de coupler des codes d'origines diverses en les encapsulant dans des objets CORBA. En utilisant la technologie CORBA, CAST peut interagir avec l'ensemble de ces codes de manière générique et sur des systèmes hétérogènes.
CAST se base sur l'implémentation de CORBA PaCO (qui est une extension de l'ORB Mico développée à l'IRISA pour des objets parallélisés) pour exécuter ces différentes tâches. CORBA est une norme de fait définissant l'implémentation et la communication entre des objets répartis. CORBA permet de s'abstraire complètement des couches réseaux et des systèmes d'exploitation utilisés et d'obtenir une transparence totale dans les appels des requêtes grâce aux invocations dynamiques. CAST utilise les atouts de la technologie CORBA (l'interface de squelettes dynamiques DSI et l'interface d'invocation DII) pour permettre son utilisation sur plusieurs grappes d'ordinateurs simultanément.
Ces fonctionnalités de CAST nous ont poussés à utiliser le langage C++, comme langage de programmation, de manière à rendre plus naturelle cette encapsulation.
Ensemble des classes qui seront utilisées dans le code (avec l'ordre
de programmation) :
Gestion : il permet la gestion de la mémoire et des exceptions de tous les objets définis dans chaque code,
Parallele,
Maillage,
MaillageVF hérite de Maillage,
Boite,
Sousboites intersections entre les boites voisines,
Couplage,
CouplageVFVF hérite du couplage,
Modele,
ModeleEuler hérite de la classe Modele,
Solveur,
SolveurVF hérite de la classe Solveur (Classe mère des solveurs VF),
SolveurVFEuler hérite de la classe SolveurVF (contient le solveur de Roe pour le système d'équation d'Euler),
SolveurVFEulerGodunov hérite de la classe SolveurVFEuler (contient le calcul des flux de type Godunov),
Zone CORBA englobante,
Lorsque le couplage VF-VF aura été testé, on rajoutera
:
SolveurSPH hérite de la classe Solveur (Classe mère des solveurs SPH),
MaillageSPH hérite de Maillage.
CouplageVFSPH hérite du couplage,
CouplageSPHSPH hérite du couplage.
La figure suivante présente l'organisation des classes des codes solveurs parallélisés :
On a créé ici une classe de communication : ``Parallele''. Il s'agit des communications de type solveur parallèle (à l'intérieur d'une Zone) et non de celles effectuées entre ces Zones (et remplacées par des objets CORBA).
Description des maillages : variables communes aux VF et SPH
Extrait Maillage : Variables protégées:
$•#bullet;$
dimension du maillage
1
Données maillage -> la lecture est faite par les enfants
· nombre de mailles
· Nombre de nœuds
· Nombre de nœuds pour chaque maille
· Indice des nœuds de chaque maille
· centre des mailles (maillage mobile)
· Coordonnées des nœuds
· Surface des éléments
· Taille des mailles (dx projeté sur les axes)
2
Voisins des mailles
· Nombre d'éléments voisins des mailles
· Indices des mailles voisines pour chaque Maille
3
Arêtes
· Nombre d'arêtes
· Nombre d'arêtes par maille
· Indices des Arêtes pour chaque Maille
· Type de CL d'une arête (valeurs dépendant du solveur)
· Normale à l'arête
· Nombre de mailles voisines de l'arête et leurs indices. En MODULEF, on a toujours le même nombre de voisins que d'arêtes dans les mailles, mais on a des éléments voisins nuls, qui donnent les mailles de bord.
· Nombre de nœuds par arêtes et leurs indices
· Longueur (surface en 3D) de l'arête
· Coordonnées des centres des arêtes
Variables privées:
Fonctions publiques :
Fonctions protégées
Fonctions privées
hérite de Maillage
Description des maillages
Variables protégées:
Fonctions publiques
Fonction protégées :
Fonctions privées :
objet des éléments par zones réparties et superposables
Variables protégées:
Variables privées:
Fonctions publiques :
Fonctions protégées :
Fonctions privées
Décrit un modèle type
Méthodes :
Modèle d'Euler : hérite de la classe Modele
Parmètres Euler :
!c Rapport de chaleurs spécifique (pour l'air = 1,4)
F REAL(DD), PARAMETER :: GAMA = 1.4_DD
!c Vaut simplement GAMA-1
R(KHI) REAL(DD), PARAMETER :: GAMA_1 = 0.4_DD
!c Pression de sortie constante égale à 1 bar
F REAL(DD), PARAMETER :: PA = 105000._DD
Méthodes :
solveur type
Variables protégées :
Variable privée :
Méthodes :
On doit tout d'abord créer le maillage, le modèle, le solveur, avant de créer la boite. On doit ensuite appeler cette fonction pour attacher la boite au solveur.
On ne peut pas exécuter la procédure Calcul_Un_Pas sans avoir exécuter la méthode Attache_Boite qui modifie cet indicateur
· Calcul de schéma numérique type :
o Calcul du pas de temps
o
appel
de la fonction de calcul du schéma Solveur, sans paramètre
la dernière fonction (de l'arbre « SolveurQqChose »)
de calcul, sans paramètre.
o mise à jour des variables : on écrit le temps présent dans le temps passé et le temps futur dans le temps présent
o test des valeurs : grandeurs positives, intervalles de vraissemblance ... (suivant Modele)
o appel sauvegarde/affichage
Fonctions privées :
Variables protégées
Variable privée
Méthodes :
Fonctions protégées :
Fonctions privées :
Solveur VF spécifique au modèle d'Euler
Paramètres CL Euler :
!c Débit imposé en entrée
REAL(DD), PARAMETER :: Q0 = 450._DD
!c Enthalpie imposé en entrée
REAL(DD), PARAMETER :: H0 = 450000._DD
! Valeur de la normalisation de la pression dans cherche_pm
REAL(DD), PARAMETER :: VALP = 128.5714285714286_DD
Variables protégées
Méthodes :
Fonctions protégées :
Fonctions privées :
hérite de la classe SolveurVFEuler.
Utilise un solveur de type Godunov
Solveur VF spécifique au modèle d'Euler
Variables protégées
Méthodes :
Fonctions privées :
Classe de la zone de calcul (distribuée sur une grappe de PC) Elle encapsule le programme Boite et est CORBAtisée. Elle permet l'échange des données avec le couplage (méthode données - couplage avec structure de zone de couplage). Elle sauvegarde ses données.
Variables protégées :
· identificateurs des zones de couplage recouvrant la boite int* idZonesCpl;
Méthodes
Fonctions privées :
Plusieurs zones de couplage.
Principe du couplage :
! base : couplage
! COUPLAGE : fonction alpha sur la zone de couplage (qui va du
! maillage 1 au maillage 2). Cette fonction passe de 1 à 0, de
! Th1 à Th2.
! ~u1(i,n+1) = alpha1(i) *u1(i,n+1) + (1-alpha1)(i)*Proj21(u2)(i,n+1)
! ~u2(i,n+1) = (1-alpha2)(i)*u2(i,n+1) + alpha2(i) *Proj12(u1)(i,n+1)
! SOLUTION APPROCHEE :
! u( C , n+1) = alpha(i) ~u(C , n) + (1-alpha(j))) ~u(C , n)
! ij 1i 2j
! Projection L1 de la solution calculee 1 sur le maillage 2 (par exemple)
! PI12 (u1) (j.h2) = SOMME(i) MU12(i,j)*u1(i)
! ou :
! MU12(i,j) = M(i,j)/h2
Ces objets contiennent :
Variables protégées :
Fonctions :
On prend le max de la fonction de couplage, pour les intersections entre les zones de couplage.
hérite de la classe Couplage.
Cette classe sert à calculer la fonction de couplage pour des VF, les intersections entre deux maillages VF et la modification des valeurs.
Fonctions :
Cet objet est utilisé pour le deboggage et l'application à de gros calculs. Ils gèrent la mémoire et les exceptions utilisées par les processus. A chaque allocation de tableau important, on ajoute le pointeur sur ce tableau, ainsi que la mémoire qu'il utilise. Lorsque l'on désalloue ce tableau, l'objet vérifie qu'il a bien été répertorié dans le tableau de pointeurs mémoire.
De même, à chaque construction d'un nouvel objet quelconque, on déclare la liste de ses exceptions à l'objet de gestion associé au processus. Cela permet en cas d'erreur de renvoyer une exception dans la variable publique Exception et d'afficher l'erreur ainsi déclarée à l'aide de la fonction d'affichage. Surtout, cette erreur est spécifique à l'objet qui la déclenche. Le nom de cet objet est déclaré lui aussi et affiché en cas d'erreur.
Dans chaque classe, on place :
L'objet de Gestion gère lui-même ses propres exceptions.
On pourra rajouter :
Fonctions :
En-tête spécifique à cette classe et valable pour toutes les autres : voir EGlobal.hh
Classe des sous-boites des intersections des boites,
Règle les problèmes d'intersections entre les boites. Pour tenir compte des recouvrements, on ne calcule que les flux rentrant dans la sous-boites, par rapport à la boite. La sous-boite est dupliquée pour chacune des boites qui la définie.
Variables protégées:
Variables privées:
Fonctions publiques :
Fonctions protégées Fonctions privées
Communications entre les boites et entre les zones de couplage :
Un objet parallèle pour chaque boite. Gère toutes les communications MPI entre les sous-boites
Dans parallèle, on construit
Variables protégées :
Constructeurs
Méthodes
Fonctions privées :
L'utilisation de la programmation objet (c++), qui a entraîné une transformation complète de mon code de couplage FORTRAN 90, ainsi que la construction d'un code fluide en 3 dimensions (et non pas en 2D) ont été des freins sévères pour la réalisation de cas test sur la grille de grappe pendant la durée du stage post-doctoral (dont la durée n'était que de six mois). Je continue néanmoins à implémenter le code et espère lancer ces calculs avec l'aide de Toan Nguyen prochainement.
Nous avons beaucoup insisté, dans ce travail, sur la nécessité, pour un code de calcul parallélisé généraliste optimum, de contrôler le recouvrement des phases de communication par celles de calcul. Cette optimisation n'est pas anodine : un code permettant d'effectuer des calculs de couplage doit non seulement être réfléchi en terme d'analyse numérique, mais aussi d'informatique, à cause de la taille toujours croissante des modélisations auxquelles on le destine.
Enfin, nous avons construit un mécanisme de contrôle dynamique à l'exécution par l'intermédiaire de l'objet de Gestion. Il reste cependant à implémenter la visualisation du calcul en temps réel (avec le logiciel AVS utilisé dans d'autres projets INRIA). La réalisation ces fonctionnalités est impérative pour le numéricien qui teste le code, ou le scientifique qui l'utilise. Il semble important de réfléchir - dans ces deux domaines - sur une hiérarchisation respectivement des paramètres à modifier ou des grandeurs à afficher, en fonction de leurs impacts en espace (très locaux, locaux ou globaux).
Steger J.L. Bernek J.A. and Dougherty F.C.
``A flexible grid embedding technique with application to the Euler equations''.
AIAA
, (831944), 1983.
Bernard Pierre-Eric.
``Parallélisation et multiprogrammation pour une application
irrégulière de dynamique moléculaire opérationnelle''
.
PhD thesis, Lab.
Modélisation et Calcul de l'Institut d'Informatique et de Mathématique
Appliquées, 1997.
Kreiss H.-O.
``Construction
of a curvilinear grid''.
SIAM J. Sci.
Stat. Comput., 4(2):270-279, 1983.
Lacôme J.L.
``Analyse de la méthode Particulaire; Application à la
détonique''.
PhD thesis, INSA Toulouse, Nov. 1997.
Lanson N.
``Etude des Méthodes Particulaires Renormalisées. Application
aux problèmes de dynamique rapide''.
PhD thesis, INSA Toulouse, Dec. 2000.
Mancip M.
Couplage de méthodes numériques pour les lois de conservation.
Application au calcul de l'injection.
PhD thesis, INSA - Lab.
MIP, 2001.
Pärt-Enander E.
``Overlapping
Grids and Applications in Gaz Dynamics''
.
PhD thesis, Dep. of Scientific Computing, Uppsala Univ., 1995.
Pärt-Enander E. and Sjögreen B.
``Conservative and non-conservative interpollation between overlapping
grids for finite volume solutions of hyperbolic problems''.
Comp. Fluid, 23(3):551-574, 1994.
Starius G.
``Composite mesh difference methods for elliptic boundary value problems''.
Numerical Mathematics, 28:243-258, 1977.