1 Mode d`emploi de l`interface graphique.

Transcription

1 Mode d`emploi de l`interface graphique.
Université de Montpellier II
Cacul Scientifique
Master 2 de Mathématiques appliquées.
TP Méthode des éléments finis .
Eléments finis en dimension 2.
But :
– Utilisation de la boîte à outils pdetool de MATLAB.
– Résolution numérique d’une equation de diffusion en 2D avec conditions limites mixtes.
– Condition de compatibilité du Problème de neumann.
– Etude de la convergence de la solution approchée vers la solution exacte.
1
Mode d’emploi de l’interface graphique.
1. ouvrir un terminal et lancez Matlab (taper simplement matlab &). Vous
avez maintenant l’invite >>
2. dans Matlab, taper pdetool et suivre les directives. vous voyez apparaître
ce qu’on appelle une GUI (graphical user interface)
3. Resolvez numeriquement le probleme
−∆u = 1
dans un disque D avec la condition limite de Dirichlet u = 0 sur une moitié
du bord et la condition de Neumann ∇u · n = 0 sur l’autre moitié.
Pour cela vous devrez définir le domaine (Draw), l’équation (PDE), les
conditions limites (Boundary), effectuer le maillage (Mesh), enfin resoudre
(Solve)
Interpretation physique : u peut representer la temperature en un point
d’une plaque circulaire homogene chauffee par une source constante. La
fonction c dans les parametres de PDE représente la conductivité de la
plaque. Interprétez physiquement les conditions limites.
4. Visualisez les resultats (Plot) essayez divers mode de visualisation, isothermes, flux de chaleur en reglant les parametres dans le menu Plot (isothermes = contour, flux = arrows). Pourquoi au voisinage de la frontière
de Dirichlet (resp. Neumann) les isothermes sont-elles parallèles (resp.
normales) ?
5. Dans le menu Mesh, faites apparaître le numéro des noeuds, leur nombre
ainsi que le nombre de triangles. Quelle est la taille de la matrice de
rigidité ?
6. Raffinez le maillage et observez la qualité de la solution.
7. Recommencer en prenant
−∆u = 1
dans un disque D avec la condition de Neumann ∇u · n = 0 sur le bord.
Que remarquez vous ?
Nous avons utilisé l’interface graphique (GUI graphical user interface) qui est
très ergonomique, mais pour résoudre des problèmes plus fins, il est nécessaire
de contrôler exactement chaque étape de la résolution en passant en mode ligne
de commande.
2
Utilisation en mode ligne de commande.
Le code matlab qui suit utilise deux fichiers circleg et circleb1 qui décrivent
la géométrie du cercle unité et la condition limite de Dirichlet homogène sous
format convenable. On dispose de la solution exacte u(x, y) = (1 − x2 − y 2 )/4
qui vérifie −∆u = 1 et qui s’annule sur le bord. On va comparer cette solution
à la solution calculée par éléments finis. Dans l’algorithme qui suit, p désigne la
matrice des points, e la matrice des côtés, t la matrice des triangles, u désigne
le vecteur colonne des valeurs aux noeuds de la solution aux noeuds et exact
designe le vecteur ligne des valeurs aux noeuds de la solution exacte. Taper le
code qui suit dans un fichier que vous appelerez tp1.m puis exécutez le.
[p,e,t]=initmesh(’circleg’,’Hmax’,1);
%définit un maillage en triangles de diamètre max 1%
error=[]; err=1;
while err > 0.001,
[p,e,t]=refinemesh(’circleg’,p,e,t);
%rafine le maillage
u=assempde(’circleb1’,p,e,t,1,0,1);
%assemble le système linéaire et le résout
exact=-(p(1,:).^2+p(2,:).^2-1)/4;
err=norm(u-exact’,inf);
error=[error err];
end
pdemesh(p,e,t);
%visualise le maillage
pause;
pdesurf(p,t,u) ;
%visualise la solution
pause;
pdesurf(p,t,u-exact’)
1. Comparer l’erreur entre le gradient de u et celui de la .solution exacte
On pourra utiliser la fonction [ux,uy] = pdegrad(p,t,u) ; qui donne le
gradient de la fonction u au milieu de chaque triangle du maillage défini
par p et t. Calculer de façon exacte le gradient de la solution exacte au
centre de chaque triangle.
2. La fonction assema assemble les matrices de rigidité K, de masse M et le
vecteur second membre F . La fonction size donne la taille d’une matrice,
la fonction spy donne le profil d’une matrice creuse. Quel est la taille de K,
le nombre d’inconnues du système linéaire, le profil de K et le pourcentage
de remplissage de K (nombre de coefficients non nuls/ nombre total de
coefficients) ?
3. Quelles sont les coordonnées du noeud numéro 27 ? Quels sont les noeuds
de l’élément numéro 85 ? Quelles sont leurs coordonnées ?
4. Ecrire une fonction matlab qui calcule le diamètre maximal h de la triangulation.
5. Tracer le graphe de l’évolution de l’erreur en fonction de h, prenez une
échelle logarithmique sur les deux axes (utilisez la fonction loglog.)
6. Refaire la question précédente avec l’erreur en norme L2 et en norme H 1 .
Conclusion ?
Une réponse possible :
error=[]; err=1; hh=[]; h=1; errorgrad=[]; errgrad=1;
while err > 0.0001,
[p,e,t]=initmesh(’circleg’,’Hmax’, h);
u=assempde(’circleb1’,p,e,t,1,0,1);
exact=-(p(1,:).^2+p(2,:).^2-1)/4;
err=norm(u-exact’,inf);
[ex,ey] = pdegrad(p,t,u - exact’);
errgrad=norm(ex,inf)+norm(ey,inf);
error=[error err];
errorgrad=[errorgrad errgrad];
h=h/2;
hh= [hh h]
end
pdemesh(p,e,t);pause;
pdesurf(p,t,u);pause;
pdesurf(p,t,u-exact’);
plot(hh,error);pause;
plot(hh,errorgrad);pause;
loglog(hh,error,hh,hh.^2);pause;
loglog(hh,errorgrad,hh,hh);pause;