TP GMSH et Partitionnement
Transcription
TP GMSH et Partitionnement
A1-1 TP3 Maillage partitionné et éléments finis Nicolas Kielbasiewicz 2 octobre 2012 Modalités de contrôle des connaissances Ce TP sera à rendre avant le lundi 1er octobre 12h30 dernier délai, par mail ([email protected]), sous la forme d’un rapport pdf répondant à l’ensemble des questions du sujet (y compris l’établissement des relations données), ainsi que votre code. La notation tiendra compte du soin apporté à la rédaction, à la clarté de la présentation des résultats, et à la pertinence de vos simulations. 1 Manipulation d’un maillage partitionné généré par gmsh On considère le domaine Ω suivant : (0,2) (0,0) (6,0) Figure 1 – Domaine de calcul On souhaite partitionner ce maillage en deux. 2 solutions possibles : 1. Définir une frontière supplémentaire et donc 2 sous-domaines. 2. Utiliser un algorithme de partitionnement (Chaco, . . . ) Question 1.1. Définir avec Gmsh un maillage correspondant à chacun des 2 cas de figure. On définira un maillage triangulaire régulier en utilisant les commandes Transfinite Line et Transfinite Surface. Question 1.2. Pour chacun des 2 cas de figures, dispose t-on dans le fichier de maillage de la liste des éléments de l’interface ? Si oui, quelle est leur référence ? Question 1.3. À l’aide de la fonction matlab lecmail fournie sur le site web, lire les fichiers de maillages générés et les afficher à l’aide de la fonction trimesh. On devra au préalable récupérer la liste des triangle dans un tableau Numtri à l’aide de la fonction find. Question 1.4. À quoi sert la fonction matlab interfaces fournie sur le site web ? 2 Equation de la chaleur : assemblage de la matrice éléments finis On souhaite résoudre l’équation de la chaleur 2D, à savoir : −divk∇u = f in Ω u=g in ∂Ω La formulation variationnelle de ce problème est : Z Z k∇u · ∇v = Ω f ·v Ω u=g in ∂Ω Question 2.1. En utilisant les matrices élémentaires vues en cours, assembler la matrice divKgrad du système linéaire associé à l’équation de la chaleur. On regardera également son profil à l’aide de la fonction colorspy présentée en annexe. 3 Mise en œuvre de la technique de pseudoélimination On cherche à résoudre l’équation de la chaleur par éléments finis : ( −∇ (k∇u) = f dans Ω u=g sur ∂Ω qui sous forme discrétisée fait apparaı̂tre la matrice de rigidité assemblée dans la question précédente. La technique de pseudo-élimination consiste à prendre en compte la condition de Dirichlet dans un système linéaire sans modifier la taille du 2 système. Prenons par exemple le cas de la différences finies : 2 −1 0 · · · 0 .. −1 . . . . . . . . . . 1 . . . . . . . . . 0 h2 0 .. .. .. .. . . . . −1 0 · · · 0 −1 2 matrice du laplacien 1D en u1 .. . .. . .. . uN = f1 .. . .. . .. . fN avec u1 = α1 et uN = αN . On substitue donc les première et dernière ligne de la matrice pour écrire ces 2 relations : 1 h2 2 0 .. . 0 .. . .. . .. . 0 ··· −1 ··· . −1 . . .. .. . . .. . −1 0 0 0 u1 0 2α1 0 .. .. 0 . . f2 1 .. .. .. = + 0 . . h2 . .. 0 −1 . fN1 2 uN 2αN 0 Question 3.1. Écrire une fonction matlab pseudoelim qui met en œuvre la technique de pseudo-élimination pour un système donné, qui prend en entrée : – le tableau Refneu – la matrice K du système à résoudre. – le vecteur f second membre. – le vecteur g définissant la condition essentielle. – la référence id de la frontière sur laquelle appliquer la condition essentielle. et donne en sortie : – la matrice Kelim – le vecteur f elim Question 3.2. Observer et commenter la mise en œuvre de la technique de pseudo-élimination sur la matrice assemblée dans la question 2.1. On la validera sur la résolution d’un problème avec solution exacte. 3 A Spy de couleur en matlab function c o l o r s p y ( mat , tab , p r e s e t , f i l e n a m e ) i f ( e x i s t ( ’ p r e s e t ’ )==0) p r e s e t ( 1 ) =−1; p r e s e t ( 2 ) =0; end [ ptr , ind , v a l ]= find ( mat ) ; nnz=s i z e ( ptr , 1 ) ; n=s i z e ( mat , 1 ) ; figure ; f o r l =1:nnz i=p t r ( l ) ; j=i n d ( l ) ; s w i t c h tab ( i ) case preset (1) s w i t c h tab ( j ) case preset (1) plot ( j , n−i , ’ k . hold on case preset (2) plot ( j , n−i , ’ g . hold on otherwise plot ( j , n−i , ’m. hold on end case preset (2) s w i t c h tab ( j ) case preset (1) plot ( j , n−i , ’ g . hold on case preset (2) plot ( j , n−i , ’ r . hold on otherwise plot ( j , n−i , ’ c . hold on end otherwise s w i t c h tab ( j ) case preset (1) plot ( j , n−i , ’m. hold on case preset (2) plot ( j , n−i , ’ c . hold on otherwise plot ( j , n−i , ’ b . ’); ’); ’); ’); ’); ’); ’); ’); ’); 4 hold on end end end i f ( exist ( ’ filename ’ ) ) eval ( [ ’ p r i n t −d j p e g −r 2 0 0 ’ , f i l e n a m e , ’ . j p g ’ ] ) ; end end 5