Vous êtes sur la page 1sur 3

Projet du cours Méthodes de décomposition de domaine M2AAM 2023-2024

Méthodes de Schwarz pour l’équation de Laplace en 2D

♢ Les programmes seront écrits en Python.


♢ Un compte rendu écrit sera rendu.
♢ La difficulté des exercices est croissante. On ne passera à l’exercice n+1 que si on a complètement
terminé l’exercice n.
♢ Il est autorisé et même recommandé de questionner l’enseignante tout au long du projet.

On s’intéresse ici au problème 2D que l’on veut résoudre par une méthode de décomposition de
domaine: 

 − △u + αu = f dans Ω :=]0, 1[×]0, 1[,

u(x, 0) = g1 (x), x ∈ [0, 1],



u(1, y) = g2 (y), y ∈ [0, 1], (1)

u(x, 1) = g3 (x), x ∈ [0, 1],





u(0, y) = g4 (y), y ∈ [0, 1].

Pour approcher la solution de cette équation, on travaillera sur un maillage uniforme dans les deux
directions: Ω est discrétisé par des mailles carrées de taille h × h.

Exercice 1: Résolution du problème monodomaine


Dans cet exercice on résout l’équation monodomaine. La solution obtenue servira de référence
pour l’algorithme de décomposition de domaine.
a) Cas particulier: ici 5 points sont utilisés pour discrétiser [0, 1] en abscisses et 5 points
sont utilisés pour discrétiser [0, 1] en ordonnées. Ecrire le système linéaire associé à la
discrétisation de (1) par un schéma aux différences finies d’ordre 2. Ce cas particulier
permettra de vérifier le programme que vous allez effectuer dans les questions suivantes.
b) Pour un maillage de taille (N + 2) × (N + 2), écrire sur le papier le schéma aux différences
finies d’ordre 2 pour discrétiser (1). Ecrire le système matriciel correspondant.
c) Construire un maillage uniforme du carré unité grâce à l’instruction meshgrid. Ce maillage
est de taille (N + 2) × (N + 2).
d) Ecrire une fonction mat lap2d qui construit la matrice obtenue par discrétisation de (1)
par différences finies. Elle prend en arguments d’entrée α, N et h, le pas de discrétisation.
On utilisera la fonction kron du package scipy.sparse.
e) Ecrire une fonction lap2d qui prend en arguments d’entrée A (la matrice précédemment
construite), f (une fonction), les données de Dirichlet aux quatre bords (des vecteurs), X,
Y une discrétisation de [0, 1] × [0, 1] et h le pas de discrétisation. Cette fonction renvoie
U (de même dimension que X et Y ) qui est l’approximation de la solution de (1) par
différences finies d’ordre 2.

1
f ) Se donner une valeur de α, f , g1 , g2 , g3 et g4 telles que l’on sache résoudre explicitement
l’équation (1). Vérifier visuellement que la solution obtenue est proche de la solution
exacte. Vérifier ensuite l’ordre du schéma.

Exercice 2: Méthode de Schwarz alternée (conditions de transmission de type Dirichlet)

a) Si x = [x0 , · · · , xN +1 ] (avec xi+1 − xi = h) est une discrétisation de l’intervalle [0, 1] alors


on introduit les deux sous-domaines Ω1 := [0, xm2 ] × [0, 1] et Ω2 := [xm1 , 1] × [0, 1] avec
m1 < m2 deux entiers. On note r = (m2 − m1 )h la taille du recouvrement.
b) S’inspirer des fonctions de l’exercice précédent pour programmer l’algorithme de Schwarz
alterné (conditions de transmission de type Dirichlet).
c) Tracer la solution obtenue à convergence. Vérifier visuellement qu’elle est “proche” de la
solution monodomaine.
d) Tracer le critère de convergence (=saut de la solution à l’interface ou erreur entre la
solution DDM et la solution monodomaine) en fonction des itérations pour vérifier que
l’algorithme converge.
e) Observer l’influence de la taille du recouvrement sur la vitesse de convergence.

Exercice 3: Méthode de Schwarz optimisée (conditions de transmission de type Robin)

a) Reprendre les questions précédentes pour l’agorithme de décomposition de domaine avec


des conditions de Robin (p > 0 donné): pour tout y ∈ [0, 1]:

∂un+1 ∂un2
(− 1
− pun+1
1 )(xm2 , y) = (− − pun2 )(xm2 , y),
∂x ∂x
∂un+1 ∂un
( 2 − pun+12 )(xm1 , y) = ( 1 − pun1 )(xm1 , y).
∂x ∂x
On pourra aussi considérer le cas sans recouvrement.
b) Chercher à résoudre le problème homogène (f = 0, gi = 0) (la solution est identiquement
nulle). On démarrera l’algorithme avec une fonction aléatoire, i.e. on initialise l’algorithme
avec la condition:
∂u1
(− 1 − pu11 )(xm2 , yj ) = gj ,
∂x
où gj est un nombre aléatoire compris entre -1 et 1. Observer la solution.
c) Même question avec g(y) = sin(lπy), l ∈ N.
d) Calculer sur le papier le facteur de convergence de cet algorithme. Utiliser une routine
Python pour optimiser numériquement ce facteur de convergence, et trouver le p ’optimal’.
e) Tester le programme pour plusieurs valeurs de p et observer la qualité du p optimisé.
Considérer les deux exemples b) et c).

2
Exercice 4: Accélération des méthodes de Schwarz

Exercice pour celles et ceux qui ont fait aisément les exercices précédents.
Accélérer les deux méthodes de Schwarz précédentes par une méthode de préconditionnement
par sous-structuration: identifier le système linéaire résolu effectivement par la méthode de
Schwarz. Résoudre ce système par une méthode de Krylov. Pour utiliser la fonction gmres
il n’est pas nécessaire de stocker la matrice. On définit la fonction ’Produit Matrice/vecteur’
grâce à l’instruction scipy.sparse.linalg.LinearOperator.

Vous aimerez peut-être aussi