Le commit porte uniquement sur la routine oofelie.c
qui écrit le fichier ".e"
à partir de l'état de la mémoire de Z-Mesh.
Ajout des fonctionnalités suivantes :
Exportation de la géométrie (points, courbes, contours,
faces et domaines). Les entités géométriques sont stockées dans dom[GEOMETRY_PO].
Les positions des points sont ajoutées au Positset
après celles des noeuds.
Exportation des noeuds. Les noeuds n'étaient pas exportés
sous forme d'objets C++ (Node).
Ca ne sert à rien pour l'instant puisque les objets
Node ne sont pas encore utilisés en pratique.
Exportation des attributs. Les attributs BACON ou Z-Mesh (qui ne
sont qu'un numéro entier strictement positif pour chaque élément)
sont exportés vers oofelie. Des groupes (GROUPE_PO)
dont le numéro est le numéro de l'attribut sont créés
et ajoutés à la structure de géométrie dans l'ensemble
des groupes (GROUPSET_PO).
On assigne alors à chaque élément son groupe père
avec la commande set_pere().
Toutes les propriétés correspondant à l'attribut sont
stockées au niveau du groupe via le mécanisme Physet ; si bien
qu'un get() au niveau de l'élément
est transparent et fournit la valeur correspondant à l'attribut de
l'élément. Cette manière de faire permet d'éviter
la duplication des propriétés au niveau de chaque élément.
Exportation des sélections/groupes (.sel). Le même
mécanisme que pour les attributs est utilisé aussi ici. On crée
un groupe et on assigne aux entités de la sélection un groupe
(GROUP_PO) parent adhoc. Le
seul problème est un conflit éventuel entre les numéros
de groupes et d'attributs qui est réglé par la création
d'une std::map (les numéros
de sélections sont renumérotés de sorte qu'ils ne correspondent
pas à un numéro attribué à un attribut. Quelques
routines C pour gérer ces maps sont en fin de fichier (c'est pas très
optimisé mais ça marche).
Exportation des éléments de contact. Les éléments
de contact ne sont pas de vrais éléments dans Metafor. On s'arrange
alors pour traduire la commande .mco.
A cette fin, une classe CInteraction
(Contact Interaction) a été définie dans Oofelie et il
suffit de créer un objet de ce type définissant une interaction
entre une sélection et une entité géométrique
non maillée.
Gestion du mouvement des matrices de contact. Les matrices de contact
peuvent subir des translations uniquement à l'heure actuelle. On définit
pour chaque commande .mfl un
Excitaset approprié.
Rien
Nouveaux développements :
Ajout de nouvelles classes dans la structure géométrie
: Group(GROUP_PO),GroupSet(GROUPSET_PO)
et GObjectSet(GOBJECTSET_PO).
La classe Group est un GObjectSet
et permet de grouper des entités géométriques. Le Group
est au même niveau que les classes Point,
Curve, Contour, etc dans la hiérarchie des classes de géométrie.
Le Group permet de créer
des attributs, des sélections et de gérer les noeuds des éléments
de contact 2D.
Ajout de nouvelles fonctionnalités aux classes géométriques
: il est maintenant possible de projeter un point sur n'importe quelle entité
2D et de calculer des glissements (pour le contact avec frottement). Cela
concerne tous les types de courbes, les contours et les faces.
Création d'un élément de contact. Cet élément
est nommé "Crd2d" comme "Contact rigide défo 2D".
La loi de Coulomb a été implémentée et la pénalisation,
bien entendu.
Création des classes "Interaction". Ces classes (pour l'instant
une seule classe est dérivée) permettent de gérer des
éléments d'interaction entre deux entités géométriques.
Par exemple, la classe CInteraction
qui dérive de Interaction
permet de gérer le contact entre deux lignes, deux contours, etc. Le
classe Interaction permet aussi
de générer automatiquement les éléments de contact
2D rigide - défo (Crd2d).
Modification de la classe "Excitaset". On peut désormais
appliquer des excitations (.fnn
et .cha mais aussi déplacer
des matrices - .mfl) sur des
entités géométriques. L'exciation est alors répercutée
sur les points et les noeuds de l'entité.
Ajout des nouvelles fonctionnalités dans l'interpréteur.
Grâce a ce travail, il est désormais possible de créer
un cas-test de contact assez facilement via un ".e"
(voir fichier meta_apps.d/qs_e.d/cont.e
par exemple).
Ajout de 4 nouveaux cas-tests dans la batterie :
qs.d/amor.zdat : l'amortisseur
bien connu de metafor (axisym - quasistatique - pas de frottement)
qs_e.d/cont.e : Ecrasement
vertical d'un lopin carré par un plan non horizontal (epd - qs
- pas de frottement)
qs_e.d/cont2.e : Idem
avec un cercle.
qs_e.d/cont3.e : Ecrasement
et glissement d'un lopin sous un plan (epd - qs - frottement)