G´en´eration de maillages 2D avec Matlab - isima.fr · G´en´eration de maillages 2D avec Matlab...

41
Institut Sup´ erieur d’ Informatique, de Mod´ elisation et de leurs Applications Complexe Universitaire des C´ ezeaux BP125 63173 Aubi` ere CEDEX Projet de deuxi` eme ann´ ee en´ eration de maillages 2D avec Matlab Pr´ esent´ e par : Jean-Philippe LEBOUCHER Benjamin PACCOU Chef de projet : Jonas KOKO Novembre 2005-Mars 2006

Transcript of G´en´eration de maillages 2D avec Matlab - isima.fr · G´en´eration de maillages 2D avec Matlab...

InstitutSuperieur d’Informatique, deModelisation et de leursApplications

Complexe Universitaire des CezeauxBP12563173 Aubiere CEDEX

Projet de deuxieme annee

Generation de maillages 2Davec Matlab

Presente par : Jean-Philippe LEBOUCHERBenjamin PACCOU

Chef de projet : Jonas KOKO

Novembre 2005-Mars 2006

InstitutSuperieur d’Informatique, deModelisation et de leursApplications

Complexe Universitaire des CezeauxBP12563173 Aubiere CEDEX

Projet de deuxieme annee

Generation de maillages 2Davec Matlab

Presente par : Jean-Philippe LEBOUCHERBenjamin PACCOU

Chef de projet : Jonas KOKO

Novembre 2005-Mars 2006

Generation de maillages 2Davec Matlab

Remerciements

Nous souhaiterions remercier :– M. KOKO, notre chef de projet, pour son aide dans la comprehension du sujet, celle du langage

Matlab ainsi que pour nous avoir fourni les outils necessaires a la realisation de ce projet.– M. LEBORGNE, professeur de l’ISIMA, pour ses cours sur les maillages, ainsi que pour ses

explications lors de travaux en Matlab.– Quentin LEQUY, ZZ3F4 et Julien SITTER, ZZ2F4, pour leur aide dans la realisation de

notre rapport avec le logiciel LateX.

2005/2006

Generation de maillages 2Davec Matlab

Resume

Notre travail a consiste a generer des maillages 2D a l’aide de Matlab sur differentes formesgeometriques avec differents types de maillages. Apres que nous ayons pris connaissance des proprietesdes maillages et de l’utilisation du logiciel Matlab, nous avons cherche a comprendre la fonctiondistmesh2D qui nous a ete fournie, de la modifer pour l’ameliorer, puis de generer differents maillagesgrace a celle-ci. Nous avons cree egalement des maillages sur des formes que nous avons nous memedefinies, meme si quelques uns se sont reveles etre des echecs.

Mots cles: maillages 2D, Matlab, distmesh2D

Abstract

Our work has consisted in generating 2D meshes with the help of Matlab on different geometricalshapes, with different kinds of meshes. After that we had studied the mesh properties and the use ofMatlab software, we have sought to understand the function distmesh2D that we received, to modifyit to upgrade it, and then to generate different meshes with the help of it. We have also created somemeshes on shapes that we have ourselves defined, even if some of them were some failures.

Keywords: 2D meshes, Matlab, distmesh2D

2005/2006

Generation de maillages 2Davec Matlab

Table des matieres

Remerciements

Resume / Abstract

Table des matieres

Table des figures

Glossaire

Introduction 7

I Presentation des maillages 2D 8

1 Triangulation 8

2 Utilisation des maillages 92.1 Espace P1 et fonctions chapeaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.2 Espace P2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3 Conclusion 10

II Explication des diverses fonctions utilisees pour la generation d’unmaillage 11

1 Description de la fonction principale : distmesh2d 111.1 Parametres de la fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.2 Algorithme de la fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2 Description des fonctions permettant le calcul de fd 132.1 dcircle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.2 ddiff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.3 dell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.4 dpoly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.5 drectangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.6 dunion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3 Description de la fonction huniform 13

III Resultats des generations de maillages 14

1 Formes simples, maillage uniforme 141.1 le disque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.2 le carre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.3 l’ellipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.4 le triangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2005/2006

Generation de maillages 2Davec Matlab

1.5 un quadrilatere quelconque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2 Formes simples, maillage non uniforme 192.1 un carre, avec un maillage centre a l’origine . . . . . . . . . . . . . . . . . . . . . . . 192.2 un carre, avec un maillage plus fin pour un de ses sommets . . . . . . . . . . . . . . . 202.3 un carre, avec un maillage en croix . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

3 Formes plus complexes 223.1 Maillage uniforme sur un carre prive d’un disque . . . . . . . . . . . . . . . . . . . . . 223.2 Maillage non uniforme sur un carre prive d’un disque . . . . . . . . . . . . . . . . . . 233.3 Maillage non uniforme sur un demi carre prive d’un demi disque . . . . . . . . . . . . 243.4 Maillage uniforme sur un carre prive d’un carre . . . . . . . . . . . . . . . . . . . . . 253.5 Maillage uniforme sur un quadrilatere prive d’un autre quadrilatere . . . . . . . . . . 263.6 Maillage uniforme sur une forme quelconque . . . . . . . . . . . . . . . . . . . . . . . 273.7 Maillage non uniforme sur une forme quelconque . . . . . . . . . . . . . . . . . . . . . 283.8 Maillage non uniforme sur une forme particiliere . . . . . . . . . . . . . . . . . . . . . 29

4 Maillages non reussis 30

Conclusion 32

2005/2006

Generation de maillages 2Davec Matlab

Table des figures

I.1 Exemple de triangulation valide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8I.2 Exemple de triangulation non valide . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8III.1 Disque unite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14III.2 Carre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15III.3 Ellipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16III.4 Triangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17III.5 Quadrilatere quelconque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18III.6 Carre avec maillage centre a l’origine . . . . . . . . . . . . . . . . . . . . . . . . . . . 19III.7 Carre avec maillage plus fin pour un de ses sommets . . . . . . . . . . . . . . . . . . . 20III.8 Carre avec maillage en croix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21III.9 Maillage uniforme sur un carre prive d’un disque . . . . . . . . . . . . . . . . . . . . . 22III.10Maillage non uniforme sur un carre prive d’un cercle . . . . . . . . . . . . . . . . . . 23III.11Maillage non uniforme sur un demi carre prive d’un demi disque . . . . . . . . . . . . 24III.12Maillage uniforme sur un carre prive d’un carre . . . . . . . . . . . . . . . . . . . . . 25III.13Maillage uniforme sur un quadrilatere prive d’un autre quadrilatere . . . . . . . . . . 26III.14Maillage uniforme sur une forme quelconque . . . . . . . . . . . . . . . . . . . . . . . 27III.15Maillage non uniforme sur une forme quelconque . . . . . . . . . . . . . . . . . . . . . 28III.16Maillage non uniforme sur un ZZ ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29III.17Resultats obtenus dans l’ordre avec notre fonction dtri . . . . . . . . . . . . . . . . . 30III.18Resultat obtenu avec la fonction dpoly . . . . . . . . . . . . . . . . . . . . . . . . . . 31

2005/2006

Generation de maillages 2Davec Matlab

Glossaire

arete un des cotes d’un polygone (ici, des triangles).

base famille d’elements d’un ensemble libre et generatrice. Chaque element de l’ensemble peut etreecrit de maniere unique comme une combinaison lineaire des elements de base.

ensemble ouvert ensemble ou pour chaque element x il existe un rayon r tel que la boule de centrex et de rayon r soit incluse dans cet ensemble.

famille generatrice famille d’elements d’un ensemble. Tout element de cet ensemble peut etre ecritcomme une combinaison lineaire des elements de cette famille.

famille libre famille ou chaque element ne peut pas etre ecrit comme une combinaison lineaire desautres elements.

2005/2006

Generation de maillages 2Davec Matlab

Introduction

Dans le cadre de notre deuxieme annee d’etudes a l’ISIMA, nous avons choisi comme sujet pournotre projet la generation de maillages avec Matlab, sous l’encadrement de M. Koko.

Les maillages 2D permettent de partitionner un espace plan en un ensemble de triangles, ce quipermet alors de passer d’un espace continu a un espace discret. Ceci pourra etre utlise par exempleen informatique graphique et en conception assistee par ordinateur pour representer et manipulerdes objets tridimensionnels. On peut egalement utiliser un maillage pour approximer une fonctiondont on ne peut pas connaıtre une forme analytique : c’est notamment le cas pour la resolution decertaines equations differentielles.

Dans un premier temps, nous allons presenter plus en details les maillages, puis nous presenteronsnotre travail effectue sur le programme initial, et enfin nous exposerons les resultats des generationsde maillages 2D.

2005/2006 page 7 / 33

Generation de maillages 2Davec Matlab

Presentation des maillages 2D

1 Triangulation

Une triangulation Th d’un ouvert Ω de R2, de bord Γ = ∂Ω est une partition de Ω en trianglesElle doit egalement verifier certaines proprietes :

1. l’intersection de deux triangles de Th doit etre reduite a un sommet commun, a une aretecommune et entiere ou a l’ensemble vide.

2. l’aire des triangles ne doit pas etre nulle.

3. tous les coins du bord Γ = ∂Ω sont des sommets de triangles de Th

4. reciproquement, soit Ωh l’union des triangles. Tous les coins de Γh = ∂Ωh doivent etre sur Γ.

Fig. I.1 – Exemple de triangulation valide

Fig. I.2 – Exemple de triangulation non valide

La premiere figure montre une triangulation qui verifie ces proprietes, alors que la deuxieme neles verifie pas.

On note que la triangulation est indexee par h > 0, qui represente la longueur de la plus grandearete de la triangulation Th.

2005/2006 page 8 / 33

Generation de maillages 2Davec Matlab

2 Utilisation des maillages

2.1 Espace P1 et fonctions chapeaux

On appelle P1 l’espace des fonctions continues sur Ω, et affines par morceaux, c’est-a-dire affinessur les triangles de Th.

Une fonction fh de P1 peut donc se mettre sous la forme :

fh(~x) = ax + by + c

Pour definir une base de P1, on choisit les fonctions chapeaux, notees ϕj : elles valent 1 en unsommet d’un triangle, et 0 pour tous les autres sommets.

On peut aisement verifier que l’ensemble de ces fonctions est une base de P1. En effet :– la famille de ces fonctions est libre : si on considere la somme

N∑j=1

cjϕj(~x) = 0

il suffit de prendre ~x = ~xi, position d’un noeud. On obtient alors que tous les cj sont nuls, etdonc la famille est bien libre.

– la famille est generatrice . Soit une fonction fh de P1 : elle s’ecrit :

fh(~x) =N∑

j=1

cjϕj(~x) ou ci = fh(~xi)

fh s’ecrit donc comme une combinaison lineaire de fonctions continues affines par morceaux :elle est donc elle aussi continue et affine par morceaux. La famille est donc generatrice.

On s’apercoit alors que dans un triangle de sommets ( ~x1, ~x2, ~x3), il suffit de connaıtre les valeursde fh en ces sommets pour determiner completement fh : il suffit de resoudre le systeme : x1 y1 1

x2 y2 1x3 y3 1

a

bc

=

f1f2f3

Ce systeme est tres rapide a resoudre, et donc fh facile a calculer.

2.2 Espace P2

On definit l’espace P2 comme l’ensemble des fonctions dont l’equation est un polynome de degre2.

Ainsi, dans un triangle, on a :

f ∈ P2 ⇒ f(~x) = a + bx + cy + dx2 + exy + gy2

Les fonctions de base de P2 sont egalement les fonctions chapeaux, qui valent 1 en un noeud et 0sur les autres noeuds. Il suffit alors de definir les noeuds : il faut 6 points pour definir completementune fonction dans P2, donc nous considererons les noeuds comme etant les sommets des triangles,ainsi que les milieux des aretes.

2005/2006 page 9 / 33

Generation de maillages 2Davec Matlab

3 Conclusion

Les maillages 2D permettent de decouper un espace en triangles. Celui-ci peut alors etre utilisepour approximer des fonctions dont on ne peut pas connaıtre la forme analytique, par exemple lorsde la resolution d’une equation aux derivees partielles du type

”−∆u = f”

On se restreindra dans cette etude a la generation de differents maillages sur differentes formesgeometriques.

2005/2006 page 10 / 33

Generation de maillages 2Davec Matlab

Explication des diverses fonctionsutilisees pour la generation d’un maillage

Dans cette partie, nous allons decrire toutes les fonctions que nous avons creees ou/et utiliseespour la generation de maillages. On va tout d’abord expliquer l’algorithme de la fonction principalequi genere le maillage. Cette fonction est appelee distmesh2d. Ensuite nous allons expliquer les autresfonctions qui permettent de definir la figure sur laquelle on veut effectuer le maillage.

1 Description de la fonction principale : distmesh2d

1.1 Parametres de la fonction

Cette fonction a pour but la generation de maillage 2D a partir d’au moins cinq parametres. Cesderniers sont dans l’ordre :

– une fonction fd qui delimite l’ouvert Ω sur lequel on va effectuer le maillage (on ne garde queles points ou la fonction est negative ou nulle),

– une fonction positive fh qui definit la finesse du maillage (plus la fonction fh est petite au point~x, et plus le maillage sera fin),

– un reel positif h0 qui est la longueur initiale des aretes,– une matrice appelee bbox = [xmin, ymin; xmax, ymax] qui delimite l’espace que l’on considere,– une matrice n ∗ 2 (n pouvant etre nul) appelee pfix qui donne les cordonnees des points fixes

du maillage,– les derniers parametres sont facultatifs et sont utilises, s’ils sont presents, dans le calcul des

fonctions fh et fd.

Cette fonction renvoie egalement 2 matrices et un vecteur :– La premiere matrice p est composee des cordonnees de l’ensemble des sommets des triangles.

C’est donc une matrice N ∗ 2 avec N le nombre de sommets du maillage.– La deuxieme matrice t nous fournit les indices (entiers compris entre 1 et N) des 3 sommets

de chaque triangle, sachant qu’ils sont donnes dans l’ordre trigonometrique. Il s’agit donc d’unematrice NT ∗ 3 avec NT le nombre de triangles du maillage.

– Le dernier resultat que renvoie la fonction est un vecteur de taille N appele Z. Soit i comprisentre 1 et N, la ieme cordonnee de Z est egale a 1 si le ieme noeud de p est sur le bord du maillage,0 sinon.

1.2 Algorithme de la fonction

Initialisation des variables :– dptol : condition d’arret de la boucle ”repeter... jusqu’a”,– ttol : condition de comparaison du ”si”,– Fscale : scalaire permettant le calcul des forces,– deltat : scalaire permettant la mise a jour des noeuds,– geps : scalaire utilise pour le test sur l’appartenance ou non d’un point au maillage,– deps : scalaire utilise pour le calcul du gradient quand on ramene les points exterieurs sur le bord.

2005/2006 page 11 / 33

Generation de maillages 2Davec Matlab

Creation de la distribution initiale :– initialisation du maillage a l’aide de la commande meshgrid qui permet la realisation d’un

maillage uniforme de parametre h0 sur l’epace compris dans la bbox.– initialisation de p = matrice des coordonnees des noeuds.

On enleve les points qui sont en dehors de la figure sur laquelle on effectue le maillage :– On ne garde que les points ou fd est inferieure a geps.– Ensuite on calcule fh aux noeuds du maillage et nous rejetons certains points avec une

probabilite proportionnelle a 1fh(x,y)2

avec (x,y) coordonnees du noeud.

Soit N la taille de p, N est donc egal au nombre de noeuds du maillage.

On initialise egalement pold a p.

Puis on met a jour le maillage jusqu’a stabilisation :

Repeter

Si ||p-pold ||^2 / h0 > ttol alorspold = pinitialisation de la matrice t a l’aide de la commande delaunayconstruction de la matrice pmid des coordonnees des centres de graviteon ne garde que les triangles dont le centre de gravite est dans la figure →

→ considereeconstruction de la matrice bars composee de l’ensemble des noeuds qui →

→ forment chaque arete du maillageon dessine le maillage obtenu

finsi

construction de la matrice barvec composee des cordonnees du vecteur →→ definie par chaque arete (on utilise pour cela la matrice bars , ainsi →→ que la matrice p)

construction du vecteur L qui correspond a la longueur de chaque vecteur →→ arete

construction du vecteur hbars compose de la valeur de fh prise au milieu de →→ chaque cote

calcul de L0 longueur desiree de chaque arete definie par hbars * Fscale * →→ ||L|| / ||hbars ||

calcul du vecteur force (scalaire) en chaque pointcalcul des coordonnees des vecteurs forces en chaque pointcalcul de la force totale en chaque point , sachant qu’aux points fixes →

→ elles sont nullesmise a jour des noeuds par la formule suivante : p = p + deltat * Ftoton projette les points externes sur le bord de la figure

Jusqu’a ce que les points interieurs bougent moins que dptol

On enleve les points doubles, ce qui nous oblige a reindexer les triangles possedant ces pointscomme sommets. On oriente les triangles dans le sens trigonometrique. Enfin on definit le vecteur Zdont les composantes valent 1 si le noeud est sur le bord et 0 sinon.

2005/2006 page 12 / 33

Generation de maillages 2Davec Matlab

2 Description des fonctions permettant le calcul de fd

2.1 dcircle

Cette fonction permet de modeliser un cercle. Elle prend en parametres l’ensemble des points pi decoordonnees (xi, yi) sur lequel on va calculer la fonction, les coordonnees (xc,yc) du centre du cercle,ainsi que son rayon. Elle renvoie comme resultat le vecteur d dont les composantes sont egales a :di = sqrt((xi − xc)2 + (yi − yc)2)− r.

2.2 ddiff

Cette fonction prend en parametres les vecteurs d1 et d2 (ces deux vecteurs doivent etre de memetaille). Elle renvoie le vecteur d = max(d1,−d2). Cette fonction est utilisee pour representer la figure1 privee de la figure 2.

2.3 dell

Cette fonction permet de representer une ellipse dont les petit et grand axes sont paralleles auxaxes du repere. Ses parametres sont l’ensemble des points pi ou on calcule la fonction, les coordonneesxc et yc du centre de l’ellipse ainsi que les rayons r1 et r2. Le resultat de cette fonction est :d = sqrt((pi − xc)2/r2

1 + (pi − yc)2/r22)− 1.

2.4 dpoly

Cette fonction permet de modeliser un polygone connaissant ses sommets. Elle prend donc commeparametres l’ensemble p des points ou calculer la fonction, ainsi que l’ensemble pv des sommets dupolygone (la dernier sommet doit correspondre au premier). Cette fonction renvoie 0 si le point estdans la figure, sinon elle renvoie une valeur strictement positive.

2.5 drectangle

Cette fonction permet de dessiner un rectangle connaissant xmin, xmax, ymin et ymax. Le resultatde cette fonction est :d = −min(min(min(−ymin + y, ymax− y),−xmin + x), xmax− x).

2.6 dunion

Cette fonction prend en parametres les vecteurs d1 et d2 (ces deux vecteurs doivent etre de memetaille). Elle renvoie le vecteur d = max(d1, d2). Cette fonction est utilisee pour representer l’union dela figure 1 et de la figure 2.

3 Description de la fonction huniform

Cette fonction est utilisee pour le calcul de la fonction fh pour un maillage uniforme. Elle acomme parametres l’ensemble p des points ou on va calculer la fonction, ainsi que d’autres parametresfacultatifs. Le resultat de cette fonction est un vecteur de la taille de p, dont toutes les composantesvalent 1.

2005/2006 page 13 / 33

Generation de maillages 2Davec Matlab

Resultats des generations de maillages

1 Formes simples, maillage uniforme

1.1 le disque

Le premier maillage que nous avons tente de produire est celui d’un disque unite. Nous avonsdelimite le disque a l’aide de la fonction fd suivante :

fd= i n l ine (’sqrt(sum(p.^2 ,2))-1’,’p’);

Ensuite, pour generer le maillage, nous avons lance la commande suivante :

[p,t]= distmesh2d(fd ,@huniform ,0.2,[-1,-1;1,1],[]);

Nous obtenons alors la figure suivante :

Fig. III.1 – Disque unite

On observe bien alors que la taille des elements du maillage est identique : on a alors bien unmaillage uniforme.

2005/2006 page 14 / 33

Generation de maillages 2Davec Matlab

1.2 le carre

Nous avons ensuite tente de creer un maillage uniforme sur un carre, en utilisant la fonctiondrectangle vue precedemment.

fd = i n l ine (’drectangle(p,-1,1,-1,1)’,’p’)

On appelle ensuite le programme de generation du maillage, en n’omettant pas de mettre les pointsfixes en parametres, a savoir les sommets du carre.

[p,t]= distmesh2d(fd ,@huniform ,0.05,[-1,-1;1,1],[-1,-1;1,1;-1,1;1,-1]);

Nous obtenons la figure suivante :

Fig. III.2 – Carre

Comme precedemment, on verifie qu’on a bien un maillage uniforme.

2005/2006 page 15 / 33

Generation de maillages 2Davec Matlab

1.3 l’ellipse

Nous avons effectue le maillage suivant sur une ellipse dont les axes de symetrie sont paralleles auxaxes des abscisses et des ordonnees. Pour cela, nous utilisons la fonction dell definie precedemment,avec comme parametres le centre de l’ellipse de coordonnees (4,4), le grand axe de longueur 2 et lepetit axe de longueur 1.

fd = i n l ine (’dell(p,4,4,2,1)’,’p’);

On appelle alors le programme, en ne mettant pas ici de points fixes.

[p,t]= distmesh2d(fd ,@huniform ,0.2 ,[2 ,3;6 ,5] ,[]);

Nous obtenons la figure suivante :

Fig. III.3 – Ellipse

Le resultat est conforme a celui attendu.

2005/2006 page 16 / 33

Generation de maillages 2Davec Matlab

1.4 le triangle

Nous avons ensuite produit un maillage uniforme sur un triangle quelconque, en utilisant la fonc-tion dpoly. On passe alors en parametre les sommets du triangles.

pfix =[0 ,0;1 ,4; -2 ,1;0 ,0];

On appelle ensuite le programme en n’oubliant pas les points fixes :

[p,t]= distmesh2d(@dpoly ,@huniform ,0.2,[-2,0;1,4],pfix ,pfix);

Nous obtenons la figure suivante :

Fig. III.4 – Triangle

2005/2006 page 17 / 33

Generation de maillages 2Davec Matlab

1.5 un quadrilatere quelconque

Nous avons effectue le dernier maillage uniforme pour une figure simple sur un quadrilatere quel-conque. Pour cela, nous avons utilise la fonction dpoly qui delimite la surface du polygone

pfix=[-2 -1 ;1 0 ;0 2 ;-1 1 ;-2 -1] ;[p,t]= distmesh2d(@dpoly ,@huniform ,0.1,[-2,-2;2,2],pfix ,pfix);

Nous obtenons la figure suivante :

Fig. III.5 – Quadrilatere quelconque

2005/2006 page 18 / 33

Generation de maillages 2Davec Matlab

2 Formes simples, maillage non uniforme

Nous avons ensuite effectue des maillages plus complexes sur des formes simples.

2.1 un carre, avec un maillage centre a l’origine

Nous avons fait un maillage dont les mailles sont plus serrees au centre d’un carre, dont le centrede gravite est place a l’origine.

fd = i n l ine (’drectangle(p,-1,1,-1,1)’,’p’);fh= i n l ine (’max(sum(abs(p) ,2) ,0.2)’,’p’);[p,t]= distmesh2d(fd ,fh ,0.05,[-1,-1;1,1],[-1,-1;1,1;-1,1;1,-1]);

Nous obtenons la figure suivante :

Fig. III.6 – Carre avec maillage centre a l’origine

2005/2006 page 19 / 33

Generation de maillages 2Davec Matlab

2.2 un carre, avec un maillage plus fin pour un de ses sommets

Nous avons ensuite cree un maillage plus fin pour un des sommets d’un carre.

fd = i n l ine (’drectangle(p,1,3,1,3)’,’p’);fh= i n l ine (’sum(p.^2,2)’,’p’);[p,t]= distmesh2d(fd ,fh ,0.05 ,[1 ,1;3 ,3] ,[1 ,3;1 ,1;3 ,1;3 ,3]);

Nous obtenons la figure suivante :

Fig. III.7 – Carre avec maillage plus fin pour un de ses sommets

2005/2006 page 20 / 33

Generation de maillages 2Davec Matlab

2.3 un carre, avec un maillage en croix

Le maillage suivant est un maillage plus serre sur les axes de symetrie horizontal et vertical d’uncarre centre en l’origine.

fh= i n l ine (’max(min(abs(p) ,[],2) ,0.2)’,’p’);fd = i n l ine (’drectangle(p,-1,1,-1,1)’,’p’);[p,t]= distmesh2d(fd ,fh ,0.1,[-1,-1;1,1],[-1,-1;1,1;-1,1;1,-1]);

Nous obtenons la figure suivante :

Fig. III.8 – Carre avec maillage en croix

2005/2006 page 21 / 33

Generation de maillages 2Davec Matlab

3 Formes plus complexes

3.1 Maillage uniforme sur un carre prive d’un disque

Nous avons cree un maillage uniforme sur un carre ampute d’un disque en son centre.

fd= i n l ine (’ddiff(drectangle(p,-1,1,-1,1),dcircle(p,0,0 ,0.5))’,’p’);[p,t]= distmesh2d(fd ,@huniform ,0.05,[-1,-1;1,1],[-1,-1;-1,1;1,-1;1,1]);

Nous obtenons la figure suivante :

Fig. III.9 – Maillage uniforme sur un carre prive d’un disque

2005/2006 page 22 / 33

Generation de maillages 2Davec Matlab

3.2 Maillage non uniforme sur un carre prive d’un disque

Nous avons fait un maillage non uniforme sur un carre ampute d’un disque en son centre.Le maillage est plus fin si on se rapproche du centre du carre.

fd= i n l ine (’ddiff(drectangle(p,-1,1,-1,1),dcircle(p,0,0 ,0.5))’,’p’);fh= i n l ine (’min(4* sqrt(sum(p.^2 ,2)) -1,2)’,’p’);[p,t]= distmesh2d(fd ,fh ,0.05,[-1,-1;1,1],[-1,-1;-1,1;1,-1;1,1]);

Nous obtenons la figure suivante :

Fig. III.10 – Maillage non uniforme sur un carre prive d’un cercle

2005/2006 page 23 / 33

Generation de maillages 2Davec Matlab

3.3 Maillage non uniforme sur un demi carre prive d’un demi disque

Nous avons fait un maillage non uniforme sur un demi carre ampute d’un demi disque en soncentre.

fd= i n l ine (’ddiff(drectangle(p,-1,0,-1,1),dcircle(p,0,0 ,0.5))’,’p’);fh= i n l ine (’min(4* sqrt(sum(p.^2 ,2)) -1,2)’,’p’);[p,t]= distmesh2d(fd ,fh ,0.05,[-1,-1;1,1],[-1,-1;-1,1;1,-1;1,1;0,-1;0,-1/2;

0 ,1/2;0 ,1]);

Nous obtenons la figure suivante :

Fig. III.11 – Maillage non uniforme sur un demi carre prive d’un demi disque

2005/2006 page 24 / 33

Generation de maillages 2Davec Matlab

3.4 Maillage uniforme sur un carre prive d’un carre

Nous avons fait un maillage uniforme sur un carre ampute d’un autre carre de taille inferieure enson centre.

pfix1 =[0 ,0;0 ,2;2 ,2;2 ,0;0 ,0];pfix2 =[1 ,0;2 ,1;1 ,2;0 ,1;1 ,0];fd= i n l ine (’ddiff(dpoly(p,q),dpoly(p,r))’,’p’,’q’,’r’);[p,t]= distmesh2d(fd ,@huniform ,0.1 ,[0 ,0;2 ,2] ,[ pfix1;pfix2],pfix1 ,pfix2);

Nous obtenons la figure suivante :

Fig. III.12 – Maillage uniforme sur un carre prive d’un carre

2005/2006 page 25 / 33

Generation de maillages 2Davec Matlab

3.5 Maillage uniforme sur un quadrilatere prive d’un autre quadrilatere

Nous avons fait un maillage uniforme sur un quadrilatere quelconque prive d’un autre quadrilatere.Nous avons ici pris le cas particulier ou le deuxieme quadrilatere est la replique du premier a unetaille inferieure.

pfix=[-2 -1 ;1 0 ;0 2 ;-1 1 ;-2 -1];fd= i n l ine (’ddiff(dpoly(p,q),dpoly(p,q/2))’,’p’,’q’);[p,t]= distmesh2d(fd ,@huniform ,0.1,[-2,-2;2,2],[ pfix;pfix/2],pfix);

Nous obtenons la figure suivante :

Fig. III.13 – Maillage uniforme sur un quadrilatere prive d’un autre quadrilatere

2005/2006 page 26 / 33

Generation de maillages 2Davec Matlab

3.6 Maillage uniforme sur une forme quelconque

Nous avons fait un maillage uniforme sur un une forme quelconque. Nous avons ici pris l’exempled’un hexagone non regulier prive d’un cercle.

pfix =[3 0 ;4 -1 ;3.5 -2 ;-5 0 ;3.5 2 ;4 1 ;3 0] ;fd= i n l ine (’ddiff(dpoly(p,q),dcircle(p,0,0,1))’,’p’,’q’);[p,t]= distmesh2d(fd ,@huniform ,0.2,[-5,-3;4,3],pfix ,pfix);

Nous obtenons la figure suivante :

Fig. III.14 – Maillage uniforme sur une forme quelconque

2005/2006 page 27 / 33

Generation de maillages 2Davec Matlab

3.7 Maillage non uniforme sur une forme quelconque

Nous avons pris la meme figure qu’au paragraphe precedent, a laquelle nous avons applique unmaillage uniforme, plus fin aux extremites du polygone situees sur l’axe des abscisses.

pfix =[3 0 ;4 -1 ;3.5 -2 ;-5 0 ;3.5 2 ;4 1 ;3 0] ;fd= i n l ine (’ddiff(dpoly(p,q),dcircle(p,0,0,1))’,’p’,’q’);fh= i n l ine (’min(min(min(sqrt((p(:,1)+5) .^2+p(:,2) .^2) /10+0.05 ,

sqrt((p(:,1) -3).^2+p(:,2) .^2) /10+0.05) ,sqrt(sum(p.^2 ,2))/5) ,1)’,’p’,’q’);[p,t]= distmesh2d(fd ,fh ,0.04,[-5,-3;4,3],pfix ,pfix);

Nous obtenons la figure suivante :

Fig. III.15 – Maillage non uniforme sur une forme quelconque

2005/2006 page 28 / 33

Generation de maillages 2Davec Matlab

3.8 Maillage non uniforme sur une forme particiliere

Nous avons pour la derniere figure effectue un maillage non uniforme sur une forme qui n’est passans rappeler l’appelation des eleves de l’ISIMA...

pfix =[1 1;1 1.5;5 5.5;1 5.5;1 6;6 6;6 5.5; 2 1.5;6 1.5;6 1;1 1];pfix2 =[2 0;2 0.5;6 4.5;2 4.5;2 5;7 5;7 4.5;3 0.5;7 0.5;7 0;2 0];pfix3 =[4.5 5 ; 5.5 5;4 4.5;5 4.5;3 1.5;4 1.5;2.5 1;3.5 1];fd= i n l ine (’dunion(dpoly(p,q),dpoly(p,r))’,’p’,’q’,’r’);fh= i n l ine (’min(min(sqrt((p(:,1) -5.5) .^2+(p(:,2) -5).^2) /30+0.05 ,

sqrt((p(:,1) -2.5) .^2+(p(:,2) -1).^2) /30+0.05) ,1)’,’p’,’q’,’r’);[p,t]= distmesh2d(fd ,fh ,0.1,[0,-2;9,7],[ pfix;pfix2;pfix3],pfix ,pfix2);

Nous obtenons la figure suivante :

Fig. III.16 – Maillage non uniforme sur un ZZ !

2005/2006 page 29 / 33

Generation de maillages 2Davec Matlab

4 Maillages non reussis

Nous avons rencontre certaines difficultes lorsque nous voulions creer nos fonctions pour genererdes formes. Nous exposerons ici un exemple de ces difficultes : nous voulions creer une fonction dtriqui aurait modelise un triangle, en n’utilisant pas la fonction dpoly :

function d=dtri(p,a,b)

d = ddiff(p(:,2)+b/a*p(:,1)-b,min(p(:,1),p(:,2)));

Cette fonction modelise bien le triangle, mais le maillage uniforme que nous generions ne sestabilisait pas : au contraire les triangles se deformaient indefiniment. Nous avons genere le memetriangle avec la fonction dpoly, et la le maillage se stablise.

La figure III.17 montre le maillage cree par la fonction dtri. Le premier triangle montre le maillagepeu apres le lancement de la ligne de commande, les deux autres montrent que le maillage ne sestabilise pas. La figure III.18 montre le maillage obtenu grace a la fonction dpoly.

Fig. III.17 – Resultats obtenus dans l’ordre avec notre fonction dtri

2005/2006 page 30 / 33

Generation de maillages 2Davec Matlab

Fig. III.18 – Resultat obtenu avec la fonction dpoly

2005/2006 page 31 / 33

Conclusion

Pour conclure, nous dirons donc que ce projet nous a permis de decouvrir un langage deprogrammation mathematique, ainsi que d’appronfondir nos connaissances acquises en cours apropos des maillages.

Nous avons egalement pu nous apercevoir de la difficulte de comprendre, puis de modifier uncode informatique cree par une autre personne. De plus, nous utilisions Matlab pour la premiere fois,et la documentation du code informatique etait en anglais, ce qui a encore accru cette difficulte. Lacomprehension du code initial, ainsi que celle du langage Matlab, a ainsi pris une grande part dutemps dans la realisation du projet.

Nous pouvons neanmoins emettre quelques critiques sur notre travail : d’une part nous avonsquelques difficultes a realiser le maillage que l’on souhaite (dans le cas des maillages non uniformes),et d’autre part nous avons echoue lors de la creation de certaines fonctions generant des formesgeometriques specifiques (le triangle notamment).

2005/2006 page 32 / 33

References

[1] http ://math.mit.edu/persson/mesh

[2] http ://www.isima.fr/leborgne/IsimathEF/edpef.pdf

[3] LAPRESTE J.-T. Introduction a Matlab Ellipses, France, 1999

2005/2006 page 33 / 33

ANNEXES

Table des Annexes

A distmesh2D I

B dcircle III

C ddiff III

D dell III

E dpoly III

F drectangle III

G dunion IV

H huniform IV

2005/2006 35

A. distmesh2D

function [p,t,Z]= distmesh2d(fd,fh,h0,bbox ,pfix ,varargin)%DISTMESH2D 2-D Mesh Generator using Distance Functions.% [P,T]= DISTMESH2D(FD,FH,H0,BBOX ,PFIX ,FPARAMS)%% P: Node positions (Nx2)% T: Triangle indices (NTx3)% FD: Distance function d(x,y)% FH: Scaled edge length function h(x,y)% H0: Initial edge length% BBOX: Bounding box [xmin ,ymin; xmax ,ymax]% PFIX: Fixed node positions (NFIXx2)% FPARAMS: Additional parameters passed to FD and FH%% Example: (Uniform Mesh on Unit Circle)% fd= i n l ine (’sqrt(sum(p.^2 ,2))-1’,’p’);% [p,t]= distmesh2d(fd,@huniform ,0.2,[-1,-1;1,1],[]);%% Example: (Rectangle with circular hole , refined at circle boundary)% fd= i n l ine (’ddiff(drectangle(p,-1,1,-1,1),dcircle(p,0 ,0 ,0.5))’,’p’);% fh= i n l ine (’min(4* sqrt(sum(p.^2 ,2)) -1,2)’,’p’);% [p,t]= distmesh2d(fd,fh ,0.05,[-1,-1;1,1],[-1,-1;-1,1;1,-1;1,1]);%% See also: MESHDEMO2D , DISTMESHND , DELAUNAYN , TRIMESH.

% Copyright (C) 2004 -2005 Per -Olof Persson. See COPYRIGHT.TXT for details.

dptol =.001; ttol =.1; Fscale =1.2; deltat =.2; geps =.001* h0; deps=sqrt(eps)*h0;

% 1. Create initial distribution in bounding box (equilateral triangles)[x,y]= meshgrid(bbox (1,1):h0:bbox (2,1),bbox (1,2):h0*sqrt (3) /2: bbox (2,2));x(2:2:end ,:)=x(2:2:end ,:)+h0/2; % Shift even rowsp=[x(:),y(:)]; % List of node →

→ coordinates

% 2. Remove points outside the region , apply the rejection methodp=p(feval(fd ,p,varargin :)<geps ,:); % Keep only d<0 pointsr0=1./ feval(fh,p,varargin :) .^2; % Probability to keep →

→ pointp=[pfix; p(rand(size(p,1) ,1)<r0./max(r0) ,:)]; % Rejection methodN=size(p,1); % Number of points N

pold=inf; % For first iterationwhile 1

% 3. Retriangulation by the Delaunay algorithmi f max(sqrt(sum((p-pold).^2,2))/h0)>ttol % Any large movement?

pold=p; % Save current →→ positions

t=delaunayn(p); % List of trianglespmid=(p(t(:,1) ,:)+p(t(:,2) ,:)+p(t(:,3) ,:))/3; % Compute centroidst=t(feval(fd ,pmid ,varargin :) <-geps ,:); % Keep interior →

→ triangles% 4. Describe each bar by a unique pair of nodesbars=[t(: ,[1 ,2]);t(: ,[1,3]);t(:,[2,3])]; % Interior bars →

→ duplicated

2005/2006 I

bars=unique(sort(bars ,2),’rows’); % Bars as node pairs% 5. Graphical output of the current meshtrimesh(t,p(:,1),p(:,2),zeros(N,1))view (2),axis equal ,axis off ,drawnow

end

% 6. Move mesh points based on bar lengths L and forces Fbarvec=p(bars (:,1) ,:)-p(bars (:,2) ,:); % List of bar vectorsL=sqrt(sum(barvec .^2 ,2)); % L = Bar lengthshbars=feval(fh ,(p(bars (:,1) ,:)+p(bars (:,2) ,:))/2,varargin :);L0=hbars*Fscale*sqrt(sum(L.^2)/sum(hbars .^2)); % L0 = Desired lengthsF=max(L0 -L,0); % Bar forces (scalars)Fvec=F./L*[1 ,1].* barvec; % Bar forces (x,y →

→ components)Ftot=full(sparse(bars (:,[1,1,2,2]),ones(size(F))*[1,2,1,2],[Fvec ,-Fvec],N →

→ ,2));Ftot (1: size(pfix ,1) ,:)=0; % Force = 0 at fixed →

→ pointsp=p+deltat*Ftot; % Update node positions

% 7. Bring outside points back to the boundaryd=feval(fd ,p,varargin :); ix=d>0; % Find points outside ( →

→ d>0)dgradx =(feval(fd ,[p(ix ,1)+deps ,p(ix ,2)],varargin :)-d(ix))/deps; % →

→ Numericaldgrady =(feval(fd ,[p(ix ,1),p(ix ,2)+deps],varargin :)-d(ix))/deps; % →

→ gradientp(ix ,:)=p(ix ,:) -[d(ix).*dgradx ,d(ix).* dgrady ]; % Project back to →

→ boundary

% 8. Termination criterion: All interior nodes move less than dptol ( →→ scaled)

i f max(sqrt(sum(deltat*Ftot(d<-geps ,:).^2,2))/h0)<dptol , break; endend

[p,m,n]= unique(p,’rows’);t=n(t);

N=size(t,1);for J=1:N

i f ((p(t(J,2) ,1)-p(t(J,1) ,1))*(p(t(J,3) ,2)-p(t(J,1) ,2)) -(p(t(J,2) ,2)-p(t →→ (J,1) ,2))*(p(t(J,3) ,1)-p(t(J,1) ,1))) <0tmp = t(J,2);t(J,2) = t(J,3);t(J,3) = tmp;

endend

Z=abs(feval(fd ,p,varargin :))<geps;

2005/2006 II

B. dcircle

function d=dcirc(p,xc ,yc ,r)

% Copyright (C) 2004 -2005 Per -Olof Persson. See COPYRIGHT.TXT for details.

d=sqrt((p(:,1)-xc).^2+(p(:,2)-yc).^2)-r;

C. ddiff

function d=ddiff(d1 ,d2), d=max(d1,-d2);

% Copyright (C) 2004 -2005 Per -Olof Persson. See COPYRIGHT.TXT for details.

D. dell

function d=dell(p,xc ,yc ,r1 ,r2)

% Copyright (C) 2004 -2005 Per -Olof Persson. See COPYRIGHT.TXT for details.

d=sqrt((p(:,1)-xc).^2/( r1^2)+(p(:,2)-yc).^2/(r2^2)) -1;

E. dpoly

function d=dpoly(p,pv)

% Copyright (C) 2004 -2005 Per -Olof Persson. See COPYRIGHT.TXT for details.

np=size(p,1);nvs=size(pv ,1) -1;

ds=dsegment(p,pv);d=min(ds ,[],2);

d=(-1).^( inpolygon(p(:,1),p(:,2),pv(:,1),pv(:,2))).*d;

2005/2006 III

F. drectangle

function d=drectangle(p,x1 ,x2,y1,y2)

% Copyright (C) 2004 -2005 Per -Olof Persson. See COPYRIGHT.TXT for details.

d=-min(min(min(-y1+p(:,2),y2-p(:,2)),-x1+p(:,1)),x2 -p(:,1));

G. dunion

function d=dunion(d1 ,d2), d=min(d1,d2);

% Copyright (C) 2004 -2005 Per -Olof Persson. See COPYRIGHT.TXT for details.

H. huniform

function h=huniform(p,varargin)

% Copyright (C) 2004 -2005 Per -Olof Persson. See COPYRIGHT.TXT for details.

h=ones(size(p,1) ,1);

2005/2006 IV