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).

 

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.

 

Merci d’avance pour votre réponse,

 

Franck Ledoux

            

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

Reply via email to