Projet de Programmation CHP Parallèlisation de l’équation de chaleur 2021-2022

Projet de Programmation CHP Parallèlisation de l’équation de chaleur 2021-2022 Encadrant : Nicolas BARRAL Étudiants : Yassine OUZAINA Hamza El-Fathi Sommaire 1 Analyse mathématique du problème 4 2 Code séquentiel 7 3 Code parallèle 10 2 Introduction La programmation parallèle est une discipline très importante dans le domaine numérique. En effet, les calculs numériques nécessitent de plus en plus de ressources informatiques robustes pour effectuer certains calculs dans des délai raisonnables. Ainsi, si les tâches sont réparties sur plusieurs machines simultanèment, on peut avoir un gain de temps considérable. Plus particulièrement, les processeurs d’aujourd’hui possèdent plusieurs coeurs (unités de traite- ments), il est donc possible d’utiliser la programmation parallèle sur une seule machine informa- tique. Cette programmation parallèle peut se faire par le bais de deux interfaces : OpenMP sur les architecture à mémoire partagée, et MPI par échange de messages. L’expression "par échange de messages" signifie que chaque processus a une mémoire indépendante et ne sait pas ce qu’il se passe dans les autres, ce qui necessite l’utilisation de communications. Le but de ce projet est de réaliser, en premier lieu, puis de parallèliser un code de résolution de l’équation de Chaleur par différences finies à l’aide de l’interface de programmation parallèle MPI. 3 Chapitre 1 Analyse mathématique du problème Dans un domaine [0,Lx] × [0,Ly] de R2, on se propose de résoudre l’équation de la chaleur : ∂tu(x, y, t) −D∆u(x, y, t) = f(x, y, t) (1.1) u|Γ0 = g(x, y, t) (1.2) u|Γ1 = h(x, y, t) (1.3) Avec f, g et h trois fonctions ayant différentes expressions selon les cas :          1er Cas : f = 2(y −y + x −x2) g = 0 h = 0 2nd Cas : f = sin(x) + cos(y) g = sin(x) + cos(y) h = sin(x) + cos(y) 1er Cas : f = e−(x−Lx 2 )2e−(y−Ly 2 )2cos( π 2t) g = 0 h = 1 On considére la notation suivante : (xi)i=0,Nx+1 avec xi = 0 + i∆x où ∆x = Lx Nx+1. (yj)j=0,Ny+1 avec yj = 0 + j∆y où ∆y = Ly Ny+1. Soient un i,j une approximation numérique de u(xi, yj, tn), f n i,j une approximation numérique de f(xi, yj, tn), gn i,j une approximation numérique de g(xi, yj, tn) et hn i,j une approximation numérique de h(xi, yj, tn). On a : ∆u(xi, yj, tn) = ∂2u(xi, yj, tn) ∂x2 i + ∂2u(xi, yj, tn) ∂y2 j (1.4) 4 En utilisant des différences finies centrées d’ordre 2 en espace, on écrit :    ∂2u(xi,yj,tn) ∂x2 i = ui−1,j−2ui,j+ui+1,j ∆x2 + O(∆x2) ∂2u(xi,yj,tn) ∂y2 j = ui,j−1−2ui,j+ui,j+1 ∆y2 + O(∆y2) (1.5) Le schéma d’Euler implicite s’écrit comme suit : un+1 i,j −un i,j ∆t + Dun+1 i−1,j −2un+1 i,j + un+1 i+1,j ∆x2 + Dun+1 i,j−1 −2un+1 i,j + un+1 i,j+1 ∆y2 = f n+1 i,j (1.6) On note : α = 2 ∆x2 + 2 ∆y2 β = − 1 ∆x2 et γ = − 1 ∆y2 Ainsi, le schéma 1.6 se re-écrit comme suit : (un+1 i,j −un i,j) + D∆t(αun+1 i,j −βun+1 i+1,j + βun+1 i−1,j + γun+1 i,j+1 + γun+1 i,j−1) = ∆tf n+1 i,j (1.7) Ainsi, le schéma final s’écrit sous forme matricielle comme suit : U n+1 −U n + D∆tBU n+1 = ∆tF n+1 (1.8) Que l’on peut re-écrire comme suit : AU n+1 = F (1.9) Avec :    A = In + D∆tB F = U n + ∆tF n+1 (1.10) Pour Nx = 4 et Ny = 3, on essayera ci-dessous d’expliciter le systéme à résoudre. Il faut noter que l’on utilise le principe de numérotation suivant : I = (j −1) ∗Nx + (i −1) j =  I Nx  + 1 i = I mod Nx + 1 On va exprimer la matrice pour voir la répartition des termes α, β et γ. De plus, on va exprimer les vecteur U n+1 et F.                           α β 0 0 γ 0 0 0 0 0 0 0 β α β 0 0 γ 0 0 0 0 0 0 0 β α β 0 0 γ 0 0 0 0 0 0 0 β α 0 0 0 γ 0 0 0 0 γ 0 0 0 α β 0 0 γ 0 0 0 0 γ 0 0 β α β 0 0 γ 0 0 0 0 γ 0 0 β α β 0 0 γ 0 0 0 0 γ 0 0 β α 0 0 0 γ 0 0 0 0 γ 0 0 0 α β 0 0 0 0 0 0 0 γ 0 0 β α β 0 0 0 0 0 0 0 γ 0 0 β α β 0 0 0 0 0 0 0 γ 0 0 β α                           U n+1=                           un+1 0 un+1 1 un+1 2 un+1 3 un+1 4 un+1 5 un+1 6 un+1 7 un+1 8 un+1 9 un+1 10 un+1 11                           et F n+1=                           un 0 + ∆tf n+1 0 + D∆tβgn 1,0 + D∆tγhn 0,1 un 1 + ∆tf n+1 1 + D∆tγgn 2,0 un 2 + ∆tf n+1 2 + D∆tγgn 3,0 un 3 + ∆tf n+1 3 + D∆tβgn 4,0 + D∆tγhn 5,1 un 4 + ∆tf n+1 4 + D∆tγhn 0,2 un 5 + ∆tf n+1 5 un 6 + ∆tf n+1 6 un 7 + ∆tf n+1 7 + D∆tchn 5,2 un 8 + ∆tf n+1 8 + D∆tγhn 0,3 + βgn 1,4 un 9 + ∆tf n+1 9 + D∆tbgn 2,4 un 10 + ∆tf n+1 10 + D∆tbgn 3,4 un 11 + ∆tf n+1 11 + D∆tbgn 4,4 + D∆tchn 5,3                           Chapitre 2 Code séquentiel La compilation du code séquentiel se fait à l’aide d’un Makefile déjà implémenté. Après com- pilation, il faut executer le code, pour le faire, on tape la commande suivante : 1 ./ runme Nx Ny Lx Ly D dt Cdt Avec Nx, Ny, Lx, Ly, D, dt les paramètres définis dans l’énoncé et Cdt un entier permettant de choisir les fonction f, g et h. Il peut prendre les valeus 1, 2 ou 3. Les figures ci-dessous présentent les solutions numériques obtenues avec le code séquentiel, pour chaque choix des fonctions f, g et h. Pour nos simulations numériques, on a utilisé les mêmes valeurs des paramétres que l’énoncé, à svoir : Nx = 100, Ny = 100, Lx = 1.0, Ly = 1.0, D = 1.0, dt = 0.1 Figure 2.1 – Solution numérique pour le premier choix des fonctions f, g et h. Figure 2.2 – Solution numérique pour le deuxième choix des fonctions f, g et h. 7 Figure 2.3 – Solution numérique pour le troisième choix des fonctions f, g et h après 5 itération. Figure 2.4 – Solution numérique pour le deuxième choix des fonctions f, g et h après 20 itération. − →Commentaires : 1. On constate que les solutions numériques obtenues avec le premier et le deuxième choix des fonctions f, g et h sont stationnaires, ce qui est en accord avec les solutions exactes. 2. La solution numérique obtenue avec le troisième choix des fonctions f, g et h est instation- naire périodique. De plus, pour se convaincre que nos solutions numériques sont proches des solution exactes à une erreur près, on superpose ci-dessous les solutions numériques et les solutions exactes pour les deux premiers choix des fonctions f, g et h. Figure 2.5 – Solution numérique et solution exacte pour le premier choix des fonctions f, g et h après 100 itération. Figure 2.6 – Solution numérique et solution exacte pour le deuxième choix des fonctions f, g et h après 100 itération. − →Remarque : On peut aussi calculer l’erreur par norme infinie ou bien l’erreur par norme 2. − →Conclusion : On constate que notre code séquentiel fonctionne parfaitement, procédons maintenant à la parallèlisation. Chapitre 3 Code parallèle − →Procédure de parallèlisation du code : Le but de notre code parallèle est de gagner en uploads/Management/ projet-chp.pdf

  • 18
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Nov 29, 2021
  • Catégorie Management
  • Langue French
  • Taille du fichier 0.5607MB