Le 27-avr.-09 à 15:13, [email protected] a écrit :

Bonjour,

Je me permets de vous contacter suite à une étude que j’ai effectuée du code source de Gmsh.

Pour rappel à Jean-François, nous nous sommes croisés à l’IMR l’an passé. Je travaille au CEA sur l’activité maillage (hexaédrique surtout). Dans le cadre de nos travaux actuels, nous développons une structure de données de maillages en C++ à l’aide la programmation générique. J’ai présenté un « short note » sur cette structure à l’IMR, et je présente un papier plus long à l’ISGG 2009 à Montréal fin mai (suivi d’un papier journal pour la fin d’année avec prise en compte du parallélisme et modèle théorique de maillage générique).



je serai aussi a ISGG ;-)

Pour ce papier, nous avons regardé différentes structures de données dont celle interne à Gmsh (outil que j’ai testé à titre personnel et que j’apprécie beaucoup). Bref, notre étude est purement théorique et concerne l’occupation mémoire potentielle de différentes structures (je vous joins le papier où l’on parle de Gmsh page 11). Au regard du code source, nous somme arrivés à considérer que la structure de données utilisé dans Gmsh était relativement minimale. Pour un cas 3D, seules les mailles (tetra, hexa,…) et les nœuds sont représentés. Les nœuds n’ont aucune connaissance de leur voisinage et les mailles sont simplement définies à partir des nœuds (pour les algos type Delaunay, vous enrichissez votre représentation d’une structure qui décore les mailles en ajoutant la connaissance des mailles voisines).

Au vu des vos différentes classes et du fichier MElement.h (je crois), nous sommes arrivés au calcul suivant pour un maillage tétraédrique en configuration minimale:

Un tetra est défini par
1 id (int)
1 flag (char)
4 pointeurs vers les nœuds
1 pointeur vers ce tetra à partir de la GRegion à discrétiser
1 pointeur vers une table virtuelle

Un nœud est défini par
1 id (int)
1 index (int) présent pour raison algorithmique
2 chars pour la visibilité et l’ordre du nœud
1 pointeur vers une table virtuelle

Si l’on considère que l’on est sur une machine 64bits, après alignement mémoire, on obtient pour un tetra, 7 x 64bits et pour un nœud 3 x 64bits. Sachant que dans un maillage tetra, il y a environ 5 fois plus de tetras que de nœuds, si n est le nombre de nœuds, on obtient
7x 5n + 3n = 38n x 64bits.

Ma question est donc de savoir si nous vous êtes d’accord avec cela. Je voulais vous contacter plus tôt pour cela mais cela m’est complètement sorti de la tête si jamais je me suis trompé, je n’hésiterai pas à rectifier tout cela.



Je pense que c'est correct, nonobstant le fait que cette structure est incapable de "mailler". Il faut ajouter
les voisins pour cela.

 je serai content d'en reparler a ISGG

JFR

Merci d’avance pour votre réponse,

Franck Ledoux


----------------
Prof. Jean-Francois Remacle
Universite catholique de Louvain (UCL)
Tel : +32-10-472082 -- Mobile : +32-473-909930




_______________________________________________
gmsh mailing list
[email protected]
http://www.geuz.org/mailman/listinfo/gmsh

Reply via email to