Table of Contents



Commit 2007-11-21

Modifs

Nettoyages

Fac Texte Amélioré (XML)

Lorsque j'ai débugué le Fac pour la création des Fields, j'ai eu beaucoup de mal à comprendre ce qui était sauvé sur disque et où les problèmes se trouvaient. Je suis passé alors en mode “Texte” mais la tâche restait difficile vu que la sortie est, en fait, quelques très longues lignes de texte.

Pour éviter d'avoir ce genre de problème, j'ai modifié la sortie du Fac texte (TextArchive) pour qu'elle soit réellement exploitable lors de phases de debug. Pour structurer les données et traduire la hiérarchie des objets dans un fichier, j'ai choisi le format XML qui a l'avantage d'être un standard reconnu.

Ecriture XML

Pour l'écriture des données au format XML, j'ai ajouté du code dans les routines de sérialisation des objets.

archive.begin(className());
archive << ...               // [variables de l'objet]
archive.end(className());

Elles permettent d'écrire les tags XML. Ces appels n'influencent pas l'écriture binaire du Fac.

J'ai ajouté aussi une macro et des templates pour que la commande:

archive << ARCITEM(version);

écrive le nom de la variable dans les tags et que la bonne fonction d'écriture soit appelée en fonction du type de la variable.

Le résultat ressemble à ça:

<Archive>
    <head>
        <version>
        13
        </version>
    </head>
    <MetaFac>
        <Metafor>
            <TdFieldSavedValues>
 1.27738386E+000 2.71438585E+002
            </TdFieldSavedValues>
            <TimeStepManager>
 3.37278283E-002 1.06212215E-001        35        34
            </TimeStepManager>
            <IterationManager>
         2       106
            </IterationManager>
            <IterationManager>
         0         0
            </IterationManager>
        </Metafor>
        <Step>
 2.00000000E+000        14
            <DBSet>
TXTYTZ
RE
       128
 0.00000000E+000 0.00000000E+000 0.00000000E+000
 0.00000000E+000 0.00000000E+000 0.00000000E+000
 0.00000000E+000 0.00000000E+000 0.00000000E+000
 0.00000000E+000 0.00000000E+000 0.00000000E+000

...

C'est pas encore l'idéal (l'indentation n'est pas encore toujours respectée) mais ça a déjà une meilleure tête.

Et ça peut être ouvert avec des logiciels du type Bonfire Studio:

Fac au format XML

Tiens, ça ressemble à l'ObjectBrowser… :-D (Une idée serait de lire les objets de Metafor à partir de l'ObjectBrowser avec un objet Archive…)

Lecture XML

La difficulté est la relecture du XML. C'est vraiment pas pour les tapettes… Faut-il utiliser une bibliothèque toute faite (parsers SAX, DOM de Qt par exemple)? L'avantage c'est que le format peut être rendu très libre. L'inconvénient c'est qu'il est difficile alors de maintenir un Fac binaire avec la même interface…

Je crois que ce n'est pas nécessaire. Actuellement, les tags doivent être seuls sur leur ligne et ça fonctionne. Plus tard, il faudra essayer d'étendre le système si le XML est régulièrement utilisé.

Split lecture/écriture

J'ai séparé les classes Archive d'écriture et de lecture. Ca permet de ne pas se tromper (par exemple, le matériau thixo écrivait sur le Fac lors de la lecture…

Incompatibilité

Le nouveau Fac est incompatible avec l'ancien:

La config VizWin (vizwin.conf) a également changé de format. Supprimez le fichier de votre répertoire de travail si vous en avez un.

oo_nda/arcelor

Warnings

#pragma warning( disable : 4018)  // signed/unsigned mismatch
#pragma warning( disable : 4267)  // conversion de 'size_t' en 'int'

A Faire:

Fichiers ajoutés/supprimés

Certains fichiers ne sont pas splittés. D'autres devront passer de Oofelie à Metafor.

mtFEMBase/DofType.cpp	added
mtFEMBase/DofTypeMask.cpp	added
mtFEMBase/DofTypeMask.h	added
mtKernel/FieldList.h	added (+)
mtFEMBase/DofType.inl	added
mtFEMBase/DofTypeMask.inl	added
mtKernel/DBPointer.inl	added
mtKernel/Field.inl	added
mtKernel/DBIndex.cpp	deleted
mtFEMBase/PartIndex.h	deleted
mtKernel/KeyList.h	deleted
apps/ale/pstArcelor3d.py	deleted
apps/qs/pstAbaqus2d.py	deleted
oeFEMBase/Locel.cpp	added
oeFEMBase/Locinv.cpp	added
oeFEMBase/PartDofList.cpp	added
oeFEMBase/Locel.h	added
oeFEMBase/Locinv.h	added
oeFEMBase/LocinvItem.h	added
oeFEMBase/PartDofIndex.h	added
oeFEMBase/PartDofList.h	added
oeFEMBase/PartIndex.h	added (+)
oeFEMBase/Locel.inl	added
oeFEMBase/Locinv.inl	added
oeFEMBase/LocinvItem.inl	added
oeFEMBase/PartDofList.inl	added
oeKernel/DBValue1D.inl	added
oeKernel/DBValue.cpp	deleted
arcelor	added
arcelor/__init__.py	added
arcelor/tests	added
arcelor/tests/__init__.py	added
arcelor/tests/pstAbaqus2d.py	added (+)
arcelor/tests/pstArcelor3d.py	added (+)

Romain BOMAN 2007/11/21 09:14