Vous êtes sur la page 1sur 3

Langage C++

Projet : Eléments finis

PROJET C++ (2 ème année Math)

Présentation

Ce projet consiste à vous faire réaliser un logiciel en C++ capable de représenter graphiquement tous les résultats possibles provenant d'un code de calcul éléments finis, voire différences finies et volumes finis.

Ce logiciel devra comporter les fonctionnalités suivantes :

représentation graphique 2D de maillage Eléments finis, supportant tous types d'éléments ;

représentation graphique des isovaleurs relatives aux valeurs des degrés de liberté en chacun

des nœuds de chaque élément ; zoom, translation et rotation à la souris.

Petit élément fini illustré : Exemple de la plaque carrée

Pour pourvoir faire des calculs sur une plaque carrée, la première chose à faire est de discrétiser la plaque en facettes triangulaires ou carrées. Chacune de ces facettes s'appelle un élément fini.

Chacune de ces facettes s'appelle un élément fini. Le principe du calcul éléments finis consiste à

Le principe du calcul éléments finis consiste à calculer certaines valeurs aux sommets et/ou aux milieux des cotés (nœuds) de ces facettes et d'interpoler ensuite ces valeurs dans tout le domaine représenté par la plaque. Pour cela tout dépend du choix géométrique des facettes et du nombres de nœuds que l'on choisit. Il faut donc être capable d'interpoler les valeurs dans chaque élément.

Discrétisons le problème et travaillons sur un élément triangulaire à 3 nœuds. Voici sa représentation géométrique dans un repère :

y u3 3 1 2 x u1 u2
y
u3
3
1
2
x
u1
u2

Langage C++

Projet : Eléments finis

Le résultat du calcul éléments finis donne les valeurs de l'inconnue u(x,y) aux points 1, 2 et 3. Le but est donc d'interpoler les valeurs de u(x,y) à l'intérieur de l'élément triangulaire et de faire correspondre cette valeur avec une couleur préalablement définie.

Plusieurs méthodes d'interpolation sont à notre disposition :

Méthode par les fonctions de forme Le principe est d'écrire la valeur comme une combinaison linéaire des valeurs u i

u(x,y) = i=1 à 3 N i (x,y).u i

avec

N i (x j ,y j )= ij

N i (x,y) = a i + b i x + c i y

et

(x i ,y i ) coordonnées du point i.

Méthode similaire :

Le principe est un peu le même que celui de la méthode par les fonctions de formes. On écrit :

u(x,y) =

+

u(x i ,y i ) = u i

x +

y

pour i = 1

3

Affichage des isocouleurs.

Supposons que l'on ait une grille de couleurs correspondante à certaines valeurs de u. Pour pouvoir tracer plusieurs couleurs dans un seul triangle, on peut procéder de la façon suivante :

calcul de la valeur de u au barycentre de l'élément u b ;

coloration de l'élément avec la couleur correspondante à u b ;

création des sous éléments barycentriques qui deviennent alors des éléments ;

recommencer à l'étape 1 avec ces nouveaux éléments jusqu'à un nombre d'itérations préalablement défini.

2
2

Jean-Luc Damoiseaux / I.S.I.T.V.

Langage C++

Projet : Eléments finis

Architecture logicielle.

La hiérarchie de classes que vous devrez mettre en place est la suivante :

où :

Nœud

Elément

Maillage

en place est la suivante : où : Nœud Elément Maillage L2 …………………………… Q12 Fenetre Filtre
en place est la suivante : où : Nœud Elément Maillage L2 …………………………… Q12 Fenetre Filtre

L2 ……………………………

Q12

Fenetre

Filtre

Fenetre_Iso

La classe Noeud définit le type nœud. La classe Element est une classe virtuelle pure à partir de laquelle est dérivée tous les types d'éléments possibles ; un élément est codé sous la forme d'une liste de noeuds. La classe Maillage définit la notion de maillage ; un maillage est une liste d'Element. La classe Filtre lit des fichiers de données et construit le maillage correspondant La classe Fenetre et sa dérivée Fenetre_Iso permettent de visualiser l'ensemble.

Enfin, il vous est donné des fichiers d'exemples en .TIT et .DAT, sachant que les fichiers .TIT contiennent les positions et les valeurs de tous les noeuds, ainsi que la définition des éléments et du maillage, tandis que les fichier .DAT contiennent les valeurs nécessaires au tracer des iso-couleurs.

Bon courage