Dans le but de faire une interface générale pour l'accès des données des GPState
s (pour l'ALE), je veux permettre un meilleur typage des InternalField
s. En particulier, j'aimerais pouvoir accéder aux grandeurs contenue dans les GPState
s sous leur forme mathématique initiale (matrice, vecteur, scalaire, etc). Actuellement, toutes ces grandeurs sont des scalaires.
Pour y arriver, je dois définir les InternalFieldID
d'une manière similaire à ce qui a été fait pour les NatureID
dans le cadre de la refonte des Lock
s. L'idéal serait de fusionner ces deux structures pour unifier complètement la gestion des inconnues dans Metafor.
Le problème, c'est que le nombre total de NatureID
influence directement la taille interne du DofSet
et de tous les StrVector
. J'ai donc commencé par nettoyer le DofSet
pour y introduire une gestion plus subtile de l'accès aux degrés de liberté. Au lieu d'utiliser un gros std::vector
tout pourri et une indexation via de simples entiers (DofIndex
), il faudrait utiliser une map avec une bonne fonction de hachage. C'est ce que j'ai fait.
J'ai également supprimé la visiblité de DofIndex
à l'extérieur du DofSet
. Cela signifie par exemple que le LOCEL de l'élément n'est plus un tableau d'entiers mais un accès direct aux Dof
s.
Ca donne à l'affichage (de cont2
):
avant:
Connexion with 3 parts & 2728 dofs part #1 : 220 dofs part #2 : 22 dofs part #3 : 0 dofs
après
Connexion with 3 parts & 242 dofs part #1 : 220 dofs part #2 : 22 dofs part #3 : 0 dofs
Côté perfs, on observe une perte de perf (de 15%) qui, à mon avis, est due au fait que j'ai modifié StrVector
. L'update est beaucoup plus coûteux qu'auparavant pour tous les vecteurs basés hors de la DB. Cependant, il serait possible d'éviter ceci est déplaçant le code de mise à jour dans la fonction rebuild
(et appeler cette fonction lorsque le profil de la ligne de ciel change). Je ferai ça pour le prochain commit.
mtFEMBase/DofIndex.h deleted
— Romain BOMAN 2008/06/27 08:48