NEF: Un mailleur basé sur le logiciel de C.A.O. OpenCascade
Alain Perronnet   Laboratoire Jacques-Louis Lions   U.P.M.C. Paris


English version


- Aujourd'hui le comportement d'un objet soumis à des sollicitations est calculé sur ordinateur avant sa construction effective, ce qui nécessite souvent la création d'un maillage en tétraèdres et/ou pentaèdres et/ou hexaèdres.

- Pour obtenir une meilleure précision des calculs, ce maillage doit être adapté à la solution calculée.

- Cette adaptation nécessite à tout moment de savoir où est positionné un sommet, intérieur ou extérieur à un volume, sur une face, sur une courbe ou est un point spécial, afin ou non de le déplacer correctement.

- Actuellement, la majorité des objets sont conçus à l'aide de logiciels de C.A.O..

- Une adaptation efficace du maillage nécessite la connaissance et un accès rapide à la structuration interne des objets C.A.O., laquelle est spécifique de chaque logiciel.

- Un choix optimal est obtenu lorsque le logiciel de CAO et le mailleur sont écrits avec le même langage informatique.

- Malheureusement, la plupart des logiciels de CAO ne permettent, ni l'accès au "source", ni cet accès direct aux fonctions géométriques par un langage compilé.

- Une exception, le logiciel de CAO OpenCascade, écrit en C++ et de "source" téléchargeable sur le Web.

D'où l'idée de construire l'objet par OpenCascade puis le mailler, le tout en C++ avec un accès direct C++ aux fonctions CAO sur les objets.

Pour faciliter le travail de l'utilisateur, les aspects graphique et interactif doivent être ajoutés à la programmation.



Quels sont les pré-requis pour construire un tel mailleur?:

Disposer de mailleurs C++ (ou Fortran appelables en C++)

- pour subdiviser une courbe en segments;

- pour trianguler une surface plane;

- pour décomposer un volume en tétraèdres;

et ne pas être trop effrayé par

- 14 223 fichiers include en C++;

- 515 répertoires de fichiers source C++;

- un fichier tar.gz de 160 573 067 octets;   (version 5.0 de mai 2003).



La programmation d'un tel mailleur passe par la connaissance de la représentation interne d'un objet dans OpenCascade, laquelle est définie par ses FRONTIERES (BOUNDARY REPRESENTATION (BRep)):
(les noms anglais sont conservés car ils font partie du vocabulaire OpenCascade)

- un COMPSOLID est un ensemble de SOLIDS connectés par leurs FACES;

- un SOLID (cylindre, cône, sphère, tore, ...) est un volume limité par des SHELLS;

- un SHELL est un ensemble de FACES connectées par leurs EDGES;

- une FACE est une TRANSFORMATION définie sur un domaine interne à un rectangle de paramètres U V et à valeur dans R3 (cf cylindre: [0,2 Pi] x [0,H] -> R3, cône, sphère, torus, surface de BEZIER, surface NURBS, ... );

- la frontière d'une FACE est limitée par des WIRES;

- un WIRE est un ensemble d'EDGES, connectés par des VERTICES;

- un EDGE est une TRANSFORMATION définie sur un intervalle d'un paramètre U à valeur dans R3 (cf courbe de BEZIER: [0,1] -> R3, courbe NURBS, ... );

- un VERTEX est une extrémité d'un EDGE.

Cette représentation par les frontières induit un GRAPHE connectant les différentes SHAPES (CompSolid, Solid, Shell, Face, Wire, Edge, Vertex).






Dans NEF, comment le maillage est il construit?

OpenCascade permet le parcours des différentes SHAPES du COMPSOLID


pour chaque EDGE du COMPSOLID
  L'intervalle en U de définition de l'EDGE est subdivisé en segments de façon à être inférieur à la donnée de la longueur maximale d'une arête du maillage et le maximum de déflexion (distance entre la courbe et la corde) dans R3.
  La transformation des segments de l'intervalle en U donne les arêtes dans R3.

  ==> Création du maillage en U et en 3d-mesh pour chaque EDGE



pour chaque FACE du COMPSOLID
  pour chaque WIRE de la face
    pour chaque EDGE du WIRE
       Le maillage en U de l'EDGE est assemblé après mise à l'échelle dans le plan UV pour constituer un WIRE plan





  La surface UV, limitée par les arêtes des Wires est triangulée de façon à ce que toute arête dans R3 soit inférieure à la donnée de la longueur maximale d'une arête du maillage et du maximum de la déflexion des arêtes dans R3.
  La transformation de la FACE envoie les triangles du domaine U V dans R3 pour constituer la triangulation de la FACE.







pour chaque SOLID du COMPSOLID
  pour chaque SHELL du SOLID
    pour chaque FACE du SHELL
      Le maillage 3d de la FACE est assemblé pour former la frontière du SOLID




Ici, la triangulation, peau de chaque SOLID du COMPSOLID, est faîte.
Alors, les volumes limités par cette triangulation sont tétraèdrisés.




Le maillage peut ensuite être sauvegardée dans un fichier.




Les algorithmes de maillage:

Pour un EDGE, la SEGMENTATION de son intervalle en U est réalisée par DICHOTOMIE pour obtenir la longueur idéale des arêtes dans R3 ainsi que leur déflexion au dessous de la valeur fournie.


Pour une FACE, la TRIANGULATION de son domaine UV est faîte par subdivision d'un ARBRE-4 de TRIANGLES EQUILATERAUX, puis, homogénéisation, échange des diagonales selon le critère de DELAUNAY, barycentrage des sommets voisins, ajoûts ou déplacements de sommets, ... (cf [2])


Pour un COMPSOLID, la TETRAEDRISATION de chacun des VOLUMES limitée par la triangulation de sa frontière est faîte selon le critère de DELAUNAY à partir des sommets d'un ARBRE 5-14 d' OCTAEDRES et TETRAEDRES, homogénéisation, échange d'arêtes-triangles (mt->2mt-4), barycentrage de sommets voisins, ajoûts ou déplacements de sommets, ... (cf [3])



L'utilisateur peut entrer sous forme d'une CONSTANTE ou une FONCTION de (X,Y,Z)

- la LONGUEUR MAXIMALE des ARETES des EDGES ou des TRIANGLES des FACES

- la DEFLEXION MAXIMALE entre l'arête et l'EDGE ou entre le PLAN défini par les 3 sommets du triangle et sa FACE.

Exemple:
 Si aretemax=0 la fonction de l'utilisateur suivante est active:

DefFonc areteideale( x, y, z );
  DefVar d; d=(x**2+y**2+(z-12)**2)/36;
  si d<1 alors
    areteideale=0.3*(1-d)+d;  {interpolation de 0.3 à 1 dans une sphère de rayon 6}
  sinon
    areteideale=1.0;
  FinSi;
FinFonc;

 et inactive si aretemax>0.

Afin d'améliorer le confort de l'utilisateur, un Systême de Coordonnées Utilisateur (SCU) et des CALQUES sont disponibles.


Démonstration: Construction d'un maillage d'une tête de CARDAN


2 points et un rayon => le cylindre du bas





2 points et un rayon => le cylindre du haut





2 points min max => la boite





le cylindre supérieur moins la boite





son union avec le cylindre inférieur





2 points et un rayon => le cylindre d'axe Z futur "trou"





l'objet moins le cylindre d'axe Z





2 points et un rayon => le cylindre supérieur d'axe Y





l'objet moins le cylindre supérieur d'axe Y





2 points et 2 rayons => le tronc de cône





l'intersection du cardan et du cône tronc de cône donne le chamfrein





1 point et 2 rayons => le tore





l'objet moins le tore => le cardan





le cardan après tétraèdrisation avec aretemax=1





la triangulation du cardan avec aretemax=0.5





la triangulation du cardan avec aretemax=1 et deflexion max=0.01





la triangulation du cardan avec aretemax=0, deflexion max=0.1 et la fonction
DefFunc areteideale(x,y,z);
 if abs(z-12)<2 then
  areteideale = 0.3;
 else
  areteideale = 1;
 endif;
EndFunc;





la triangulation du cardan avec aretemax=0, deflexion max=0.1 et la fonction
DefFonc areteideale(x,y,z);
 si abs(x)<2 ou abs(z-12)<2 alors
  areteideale = 0.3;
 sinon
  areteideale = 1;
 finsi;
FinFonc;





la triangulation du cardan avec aretemax=0, deflexion max=0.1 et la fonction
DefFonc areteideale(x,y,z);
 DefVar d; d=(x**2+y**2+(z-12)**2)/36;
 si d<1 alors
  areteideale = 0.3;
 sinon
  areteideale = 1;
 FinSi;
FinFonc;







Bibliography:

[1] http ://www.opencascade.org   Le serveur Web d'accès au logiciel OpenCascade

[2] A. Perronnet,   Triangulation par arbre-4 de triangles équilatéraux et maximisation de la qualité, Laboratoire Jacques-Louis Lions Paris, Rapport R92015

[3] A. Perronnet,   Tetrahedrization by the 5-14 OTT tree technic and the Delaunay's criterion, VIII Conference on Finite Elements in Fluids, Barcelona, sept. 1993


La page de téléchargement du logiciel NEF


Page écrite par Alain Perronnet
Dernière mise à jour le 31 octobre 2007