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;