====== Commit 2006-08-18 ====== ===== Modifs ===== * **Nouveau mailleur quadrangulaire** * J'ai toujours été impressionné par le mailleur quadrangulaire développé à Barcelone par [[http://www-lacan.upc.es/sarrate/|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'[[http://www-lacan.upc.es/publications/files/IJNME_JSR_AHC_6.pdf|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épertoire ''oo_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'' dans ''toolbox.meshers''. J'ai ajouté un test nommé ''apps.qs.gen4mesh'' en exemple. Des exemples de maillages (hors Metafor) sont dans ''toolbox.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épertoire ''oo_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é pour ''nurbs++'' 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 appelle ''abs(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 debug ''gen4_d.dll'', ce sacré linux charge ''gen4.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 le ''import gen4'') * faire ''r montest.py'' et attendre le ''raw_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) puis ''enter'' (pour terminer le ''raw_input''). * et voilà! ===== Plaisir des yeux ===== Démo de l'interface du mailleur (module ''gen4gui''): {{commit:2006:gen4-01.jpg?100|Mon premier test}} {{commit:2006:gen4-02.jpg?100|Domaine non convexe}} {{commit:2006:gen4-03.jpg?100|Maillage d'un "E" en cours}} {{commit:2006:gen4-04.jpg?100|Carré percé d'un trou (cfr. article de Sarrate)}} {{commit:2006:gen4-05.jpg?100|Maillage d'un carré sur background mesh (en cours)}} {{commit:2006:gen4-06.jpg?100|Maillage d'un carré sur background mesh (fini)}} {{commit:2006:gen4-07.jpg?100|Test des cercles}} {{commit:2006:gen4-08.jpg?100|Test des cercles sur background mesh}} Démo de l'interface Metafor (''Gen4Mesher''): {{commit:2006:gen4-09.jpg?100|Interface Metafor - apps.qs.gen4mesh}} ===== 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'' --- //[[r_boman@yahoo.fr|Romain BOMAN]] 2006/08/18 10:31//