Vous êtes sur la page 1sur 3

Département de mathématiques et de génie industriel

École Polytechnique de Montréal


MATHÉMATIQUES DES ÉLÉMENTS FINIS
PROJET
le 17 novembre 2010

Directives : Ce projet peut être fait par équipe de deux personnes. Vous avez jusqu’au
22 décembre pour le compléter. Il doit être fait avec le logiciel Matlab et le générateur
de maillages distmesh2d † .
Un embryon de programme est disponible sur le site Internet du cours (MEF6207.m). Ce
programme Matlab vous offre trois options. L’option demo génère une géométrie et un
maillage à l’aide de distmesh2d. L’option conv génère une géométrie de forme carrée
et un maillage structuré. Finalement, l’option util est l’endroit où vous mettrez en place
la géométrie et le maillage pour votre problème. Suivra ensuite le code de votre solveur
éléments-finis. Vous pouvez vous inspirer du programme 1-D, aussi disponible sur le site
Internet du cours (MEF1D.m).
Après avoir vérifié que votre code fonctionne bien (option conv), je vous suggère un
problème générique, à l’option demo, que vous devez réussir à résoudre avec votre pro-
gramme d’éléments finis. Vous devez ensuite l’utiliser dans le cadre d’une application
simple de votre choix, ou bien pour résoudre un problème qui nécessite des algorithmes
numériques plus complexes (problème non linéaire, problème transitoire, équation non
elliptique). À vous de choisir.
Lorsque votre projet sera complété, vous devez me remettre un court rapport qui ex-
plique la structure de votre programme et le problème que vous avez choisi d’étudier.
Vous devez aussi me rendre un CD-ROM qui contiendra votre programme que je pourrai
exécuter sur la version de base de Matlab, afin que je puisse refaire le problème décrit
dans le rapport.
Le problème
Ce projet consiste à discrétiser, à l’aide de la méthode des éléments finis, l’équation
aux dérivées partielles linéaire

~
a(x, ~
y) · ∇u(x, ~ · {b(x, y) ∇u(x,
y) − ∇ ~ y)} + c(x, y) u(x, y) = f (x, y),

avec les conditions limites :



u(x, y) = g(x, y) sur Γ0 ;
~
b(x, y)∇u(x, ~ Ω = h(x, y) sur Γ1 ,
y) · n

et avec les hypothèses usuelles sur Γ0 et Γ1 .


A Simple Mesh Generator in MATLAB, SIAM Review, Volume 46, Numéro 2, Juin 2004, pages 329-
345.
Ce qui est déjà fait

• À l’aide des commandes intéractives de Matlab clc, disp et input, on demande


à l’usager de choisir parmi trois problèmes :

– un problème de démonstration (demo), pour lequel une géométrie est déjà


définie (cf. demofd.m);
– un problème pour faire l’analyse de convergence du code (conv) à l’aide d’un
maillage structuré, défini sur une géométrie carrée;
– un problème défini par l’utilisateur (util), où celui-ci doit fournir les fonc-
tions Matlab utilfd.m et utilfh.m à distmesh2d afin de définir la géomé-
trie Ω du problème et la distribution de tailles des éléments du maillage.

Vous pouvez ajouter des choix à ces options.

• L’usager doit ensuite entrer la taille maximale h des éléments du maillage.

• Vous ferez ensuite l’appel à distmesh2d. Inspirez-vous de ce qui est fait à l’option
demo. Vous obtiendrez alors les tableaux connec et coor.

Les étapes à suivre

~
• Les fonctions a(x, y), b(x, y), c(x, y), f (x, y), g(x, y), h(x, y) doivent se retrou-
ver dans les fonctions Matlab a.m, b.m, c.m, f.m, g.m et h.m. L’usager doit donc
utiliser les fonctions g.m et h.m afin de spécifier les différentes conditions limites
(Dirichlet ou Neumann) sur Γ0 et Γ1 .

• Demander à l’usager de spécifier le type d’interpolant à utiliser. Nous n’offrirons


que 2 choix, soit des triangles linéaires ou quadratiques. Si les éléments quadra-
tiques sont choisis, calculer la position des noeuds de calcul additionnels et modi-
fier les tableaux coor et connec. Cette tâche n’est pas aussi simple qu’elle en a
l’air à prime abord. Je ne vous demande pas une solution optimale, mais si ça
vous amuse d’en trouver une...

• Construire les tableaux adres et numer. Nous allons aussi tenter d’utiliser les
noms de constantes et de variables utilisés dans les notes et dans le code 1-D
MEF1D.m (nG, nC, nT, nel, nddl, Jk, DTk, etc).

• Utiliser la commande sparse pour créer et initialiser les différentes matrices


creuses reliées à l’assemblage. Utiliser la structure matricielle étudiée au cours.
Ce ne sera pas nécessaire pour les tableaux contenant les différentes quantitées
évaluées aux points de Gauss et pour les matrices élémentaires (cf. MEF1D.m).

• Calculer les fonctions d’interpolation et leurs dérivées aux points de Gauss. Vous
aurez à décider du nombre de points de Gauss nécessaire pour votre problème.

• Fournir le détail de la formulation variationnelle élémentaire dans votre rapport


écrit.
Page 2
• Dans une boucle sur les éléments du maillage :

– Faire le calcul des composantes des systèmes élémentaires sur l’élément de


référence;
– Assembler ces systèmes élémentaires dans la matrice globale;
– Offrir à l’utilisateur la possibilité de visualiser la structure de la matrice
d’assemblage à l’aide de la commande spy, soit après que chaque élément
soit assemblé, soit la matrice d’assemblage finale.

• Utiliser l’algorithme de Cuthill-McKee afin de réduire la largeur de bande de M11


à l’aide des commandes p=symrcm(M11) et M11(p,p). Afficher le résultat de la
renumérotation avec la commande spy. Vous êtes alors en mesure d’obtenir le
vecteur des degrés de liberté UI à l’aide d’une factorisation LU ou d’une méthode
itérative.

• Permettre à l’usager d’imprimer la solution.

• Il vous reste à étudier les problèmes suivants :

– Résoudre un problème qui a une solution qui peut être représentée exacte-
ment par vos fonctions d’interpolation (linéaires puis quadratiques);
– Faire l’analyse de convergence du chapitre 7, afin de vous assurer que votre
programme vous donne la bonne solution et que vos interpolants quadra-
tiques vous donnent un ordre de convergence quadratique (option conv);
– Résoudre le problème générique (option demo).
– Faire l’étude de votre problème (option util).

Steven Dufour