Académique Documents
Professionnel Documents
Culture Documents
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.
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.
∂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.