Table of Contents
Commit 2006-08-18
Modifs
- Nouveau mailleur quadrangulaire
- J'ai toujours été impressionné par le mailleur quadrangulaire développé à Barcelone par Sarrate. Il s'agit d'un mailleur quadrangulaire 2D basé sur un principe très simple: la division récursive du domaine à mailler en sous-domaines de tailles de plus en plus petites jusqu'à l'obtention de quadrangles. La découpe optimale est choisie par minimisation d'une série de critères qui garantissent de bons angles et une bonne connectivité. J'ai donc décidé de reprogrammer ce mailleur à partir de l'article source. Le résultat est surprenant: le mailleur est TRES robuste (pour ceux qui ont testé le mailleur frontal de Metafor, c'est le jour et la nuit).
- Caractéristiques:
- Deux méthodes de maillage sont possibles: un maillage de type “densité” où l'utilisateur définit une densité à chaque sommet de la géométrie et un maillage à l'aide d'un “background mesh”.
- Gestion des segments de droite et arcs de cercles (il faudra ajouter d'autres types de courbes).
- Possibilité de mailler une face avec des trous (Gestion automatique des trous - inutile de découper le domaine à la main!).
- Beaucoup plus convivial que le mailleur de Sarrate (pour ceux qui l'ont déjà utilisé, je sais, c'est pas dur) grâce à l'entrée des données en python.
- Outils d'amélioration du maillage: lissage et correction topologiques (“make-up methods”).
- Division des cellules en triangles (utile pour le bg mesh)
- L'algorithme résultant est appelé
Gen4
(en référence àGen4u
de Sarrate). C'est du C++ et du python. - Au niveau de l'organisation du source, le mailleur
Gen4
est totalement indépendant de Metafor. J'ai cependant choisi d'intégrer le source dans le répertoireoo_meta
pour que tout le monde le compile à chaque modif de Metafor. Il y a donc 4 nouveaux répertoires (et 4 nouvelles DLL):gen4
: la DLL du mailleur (full C++)gen4gui
: la DLL de l'interface graphique du mailleur (très utile pour débuguer). C'est du Qt._gen4
: le module python associé àgen4
_gen4gui
: le module python de l'interface graphique
- L'interface avec Metafor est faite actuellement en python. Il s'agit d'une classe
Gen4Mesher
danstoolbox.meshers
. J'ai ajouté un test nomméapps.qs.gen4mesh
en exemple. Des exemples de maillages (hors Metafor) sont danstoolbox.gen4
. - Reste à faire:
- Ajouter d'autres types de courbes (splines, nurbs, etc)
- Transformer un maillage Metafor en background mesh (actuellement, l'utilisateur doit le définir avec la syntaxe du mailleur)
- Possibilités futures:
- Remaillage automatique dans Metafor.
- Maillage des faces (soit pour la visu, soit pour le contact, soit pour intersections, surroundedness-test, etc…
- Partage du mailleur avec d'autres chercheurs en temps que module python.
- Makefiles UNIX
- Nettoyage complet des makefiles Unix. Le but est de pouvoir compiler des bibliothèques dynamiques et tendre vers la config Windows où toutes les libs sont des libs dynamiques. J'ai essayé aussi de permettre l'utilisation du mailleur indépendamment de Metafor (c'est-à-dire en utilisant directement
python
) - Fusion des
Makefile.in
“type” (répertoireoo_meta/makefiles
) en un seul makefile permettant de gérer python et Qt. - Il reste 3 types de
Makefile.in
:- le makefile qui compile les objets et les envoie dans
oo_meta/obj
- le makefile qui crée une lib statique
.a
(actuellement utilisé pournurbs++
et en voie de disparition au profit de libs dynamiques. - le makefile qui crée une lib dynamique
.so
.
- Notes:
- Ne plus jamais utiliser la fonction
abs(double)
: elle n'existe pas sous Linux et appelleabs(int)
!. - Pour débuguer des extensions dynamiques python (swig), c'est un peu la galère sous unix (dire que certains osent pester sur vc.net…). Voila les procédures pour débuguer par exemple
gen4
:- Visual.NET:
- lancer python (version debug)
- mettre un point d'arrêt dans un fichier de la lib gen4
- faire
Debug/Processes…
et attacher le debugueur àpython_d.exe
- importer le module (
import gen4
)
- Linux:
- compiler python en debug.
- vérifier que le module qui va être chargé est bien en debug (contrairement à Windows qui charge en release
gen4.dll
et en debuggen4_d.dll
, ce sacré linux chargegen4.so
quel que soit la version!) - lancer
ddd ~/Python-debug/python
. reste à ajouter le point d'arrêt - ajouter un arrêt manuel (genre
raw_input
dans votre fichier test juste après leimport gen4
) - faire
r montest.py
et attendre leraw_input
- faire un Interrupt
- charger le fichier de gen4 à débuguer (normalement, puisque la lib est chargée, le source doit être accessible)
- taper
c
(continue) puisenter
(pour terminer leraw_input
). - et voilà!
Plaisir des yeux
Utilisation rapide
Pour une utilisation hors contexte Metafor, je vous renvoie aux fichiers d'exemple dans toolbox.gen4
). Il suffit juste de créer une géométrie et lancer le mailleur (et éventuellement créer une fenêtre de visu pour voir le résultat). Il n'y a pas d'exportation du maillage vers un fichier mais toutes les données sont accessibles sous python.
Pour utiliser le mailleur dans metafor, c'est très facile:
from toolbox.meshers import Gen4Mesher mesher = Gen4Mesher(sideset(1), domain) mesher.setPointD(1,0.1) mesher.setPointD(2,0.1) mesher.setPointD(3,0.2) mesher.setPointD(4,0.05) mesher.execute(debug=False)
Il s'agit du maillage de la face #1 du domaine domain
. Cette face possède 4 sommets auxquel on assigne les densités 0.1, 0.1, 0.2 et 0.05. L'option debug
du mailleur permet de lancer l'interface graphique du mailleur dans Metafor pour voir ce qui se passe quand quelque chose merde.
Pas besoinde mailler les lignes de la face avant d'appeler le mailleur. Il les maillera tout seul si nécessaire.
Fichiers ajoutés/supprimés
répertoires gen4
, gen4gui
, _gen4
, _gen4gui
— Romain BOMAN 2006/08/18 10:31