En analysant la procédure d'initialisation des schémas d'intégration, j'ai réussi à me débarrasser de cette crasse :
// -- ajout RoBo [A revoir] // initialisation "propre des CI": difficile a faire ici où la structure est "un peu" // confuse. Pour m'en sortir, j'applique les CI avant d'appeler l'initialisation des 2 // schémas (qui ont besoin de la matrice des masses qui ne peut etre initialisée sans CI). // Au final, les CI seront reappliquées par "DynamicTimeIntegration::initialise(true);" if(!metafor.isARestart()) { // applique les CLs metafor.getInitialConditionSet().update(metafor.getCurrentTime()); // allouer la méthode de contact en fonction du schéma d'intégration setContactMethod(); //pour les contacts precontraints: avoir l'origine du frottement elementsInitialisation(); } // -- fin ajout RoBo [A revoir]
Pour se faire, il suffisait de surcharger la fonction buildStrVector() et la fonction strVectorInitialisation() pour chaque schéma d'intégration dynamique dès que nécessaire.
Maintenant, la crasse proprement dit est localisée dans buildStrVector() de IeTimeIntegration() :
if(updateRoot) DynamicTimeIntegration::buildStrVector(updateRoot); //debut crasse //Cette etape est indispensable. Elle fait en sorte que les connexions de chaque schéma d'intégration //implicite et explicite (ainsi que les vecteurs structuraux commum dynamiques) soient les mêmes. static_cast<DynamicTimeIntegration &>(getImplicitTimeIntegration()) = (*this); static_cast<DynamicTimeIntegration &>(getExplicitTimeIntegration()) = (*this); //fin crasse getExplicitTimeIntegration().buildStrVector(); getImplicitTimeIntegration().buildStrVector();
Il est à noter que les connexions des schémas explicites et implicites ajoutées dans le ConnexionSet ne sont plus synchronisés suite à cette modification.
De la même manière, j'ai inséré une fonction initialiseTimeStep() pour le timeStepManager, pour initialiser le pas de temps correctement de le cas du schéma explicite (estimation du pas de temps critique).
Les paramètres insérées par l'utilisateur sont immédiatement vérifiés. Dès lors, l’objet se trouve dans un état cohérent avant la phase initialise invoquée par le schéma d'intégration.
[r]: [a]:
[r]: [a]:
— Gaëtan WAUTELET 2015/10/02