01.05.2013 Views

C++ et éléments finis Note de cours de DEA (version provisoire)

C++ et éléments finis Note de cours de DEA (version provisoire)

C++ et éléments finis Note de cours de DEA (version provisoire)

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

42 CHAPITRE 6. CHAÎNES ET CHAÎNAGES<br />

Exercice 4 : Le pourquoi est laissé en exercice.<br />

6.3 Construction <strong>de</strong>s arêtes d’un maillage<br />

Rappelons qu’un maillage est défini par la donnée d’une liste <strong>de</strong> points <strong>et</strong> d’une liste d’<strong>éléments</strong> (<strong>de</strong>s triangles<br />

par exemple). Dans notre cas, le maillage triangulaire est implémenté dans la classe Mesh (voir ??). Dans<br />

certaines applications, il peut être utile <strong>de</strong> construire la liste <strong>de</strong>s arêtes du maillage, c’est-à-dire l’ensemble<br />

<strong>de</strong>s arêtes <strong>de</strong> tous les <strong>éléments</strong>. La difficulté dans ce type <strong>de</strong> construction rési<strong>de</strong> dans la manière d’éviter –<br />

ou d’éliminer – les doublons (le plus souvent une arête appartient à <strong>de</strong>ux triangles).<br />

Nous allons proposer <strong>de</strong>ux algorithmes pour déterminer la liste <strong>de</strong>s arêtes. Dans les <strong>de</strong>ux cas, nous utiliserons<br />

le fait que les arêtes sont <strong>de</strong>s segments <strong>de</strong> droite <strong>et</strong> sont donc définies complètement par la donnée <strong>de</strong>s numéros<br />

<strong>de</strong> leurs <strong>de</strong>ux somm<strong>et</strong>s. On stockera donc les arêtes dans un tableau ar<strong>et</strong>e[nbex][2] où nbex est un majorant<br />

du nombre total d’arêtes. On pourra prendre grossièrement nbex = 3*nt ou bien utiliser la formule d’Euler<br />

en 2D<br />

nbe = nt + nv + nb <strong>de</strong> trous − nb composantes connexes, (6.1)<br />

où nbe est le nombre d’arêtes (edges en anglais), nt le nombre <strong>de</strong> triangles <strong>et</strong> nv le nombre <strong>de</strong> somm<strong>et</strong>s<br />

(vertices en anglais).<br />

La première métho<strong>de</strong> est la plus simple: on compare les arêtes <strong>de</strong> chaque élément du maillage avec la liste<br />

<strong>de</strong> toutes les arêtes déjà répertoriées. Si l’arête était déjà connue on l’ignore, sinon on l’ajoute à la liste. Le<br />

nombre d’opérations est nbe ∗ (nbe + 1)/2.<br />

Avant <strong>de</strong> donner le première algorithme, indiquons qu’on utilisera souvent une p<strong>et</strong>ite routine qui échange<br />

<strong>de</strong>ux paramètres:<br />

template inline void Exchange (T& a,T& b) {T c=a ;a=b ;b=c ;}<br />

Algorithme 5 Construction lente <strong>de</strong>s arêtes d’un maillage Th<br />

ConstructionAr<strong>et</strong>e(const Mesh & Th,int (* ar<strong>et</strong>e)[2],int &nbe)<br />

{<br />

int Somm<strong>et</strong>DesAr<strong>et</strong>es[3][2] = { {0,1},{1,2},{2,0}};<br />

nbe = 0 ; // nombre d’arête ;<br />

for(int t=0 ;t

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!