Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2006:08_18



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é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):

Mon premier test Domaine non convexe Maillage d'un "E" en cours Carré percé d'un trou (cfr. article de Sarrate) Maillage d'un carré sur background mesh (en cours) Maillage d'un carré sur background mesh (fini) Test des cercles Test des cercles sur background mesh

Démo de l'interface Metafor (Gen4Mesher):

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

Romain BOMAN 2006/08/18 10:31

commit/2006/08_18.txt · Last modified: 2016/03/30 15:23 (external edit)