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