====== Commit 2007-09-12 ====== ===== Modifs ===== === Introduction de la rupture dans Metafor === * La méthode utilisée est la plus simple : on désactive les éléments rompus selon un critère (par exemple une valeur critique de défo plastique ou d'endommagement). On a donc une perte de masse de la structure. La solution consisterait à ne désactiver que les forces internes et à ne calculer que les forces d'inertie en ces noeuds. J'ai essayé mais ça marche moins bien. L'avantage de la méthode est qu'on ne touche pas à la base de données en rajoutant des noeuds. * Tant que maintenant, le critère de rupture est la valeur critique d'un ''InternalField'', mais on peut compliquer le bazar par la suite (c'est pas très compliqué). Je compte faire un machin du style des ''MaterialLaws''. * Deux solutions sont possibles pour rompre l'élément : soit la valeur critique est atteinte en un point de Gauss (''MaxRuptureCriteria'') de l'élément, soit elle est atteinte en moyenne sur les points de Gauss l'élément (''MeanRuptureCriteria''). * Le critère de rupture est appliqué sur un ''FieldApplicator'' en fin de pas et pas à toutes les itérations d'un pas de temps. C'est choisi comme ça pour travailler sur un pas de temps convergé. Si il y a rupture, on reconstruit les connexions et la matrice de raideur (analytique ou numérique). * Comment qu'on rentre un critère de rupture? Facile: app = FieldApplicator(1) app.push(1, SIDE_ID) RC = MeanRuptureCriteria(IF_EPL,0.12) app.addRuptureCriteria(RC) intset = domain.getInteractionSet() intset.copy(app) del RC Ce qui veut dire qu'on créé un objet de type critère de rupture moyen sur l'élément dont la valeur critique est une déformation plastique moyenne sur l'élément de 0.12. Cet objet est appliqué sur le ''FieldApplicator'' associé à la ''Side'' 1. === Ce qui reste à faire (et il y a encore du boulot!) === * Vizu : désactiver les éléments rompus dans le ''dataset'' ou les mettre en grisé (encore mieux). * Element de contact : on a un pivot nul lorsqu'on a un noeud de contact relié à aucun élément et en plus, il s'en va n'importe où (c'est normal, il reçoit un force et il n'y a rien pour le retenir), ce qui en plus ralentit la vizu et est très laid. * Même type de problème quand un noeud libre n'est plus relié à rien. * Tester l'explicite (normalement, c'est OK) * Laisser le choix à l'utilisateur de garder une masse aux éléments rompus (pour conserver la masse totale) et ça permettrait d'introduire des débris. * Tester (mais je cherche la chtite bête) le changement de stage en même temps que la rupture. * Régler l'extrapolation aux noeuds pour les éléments rompus : on ne met à zéro que les valeurs aux points de Gauss et pas les grandeurs aux noeuds. En pratique, ça ne pose pas de problème, mais c'est pas propre. === Divers (et d'été) === * Correction d'un bug dans l'endommagement (on divisait par 0). * ''TmMaterial'' : suppression de variable inutile. ===== Plaisir des yeux ===== ===== Fichiers ajoutés/supprimés ===== mtElements/rupture added mtElements/rupture/MaxRuptureCriteria.cpp added mtElements/rupture/MeanRuptureCriteria.cpp added mtElements/rupture/RuptureCriteria.cpp added mtElements/rupture/MaxRuptureCriteria.h added mtElements/rupture/MeanRuptureCriteria.h added mtElements/rupture/RuptureCriteria.h added apps/imp/ruptureCarre.py added apps/imp/ruptureCarreEndo.py added apps/imp/ruptureCont2.py added apps/imp/ruptureMax1.py added apps/imp/ruptureMax2.py added apps/imp/ruptureMean1.py added apps/imp/ruptureMean2.py added --- //[[ppjeunechamps@ulg.ac.be|Pierre-Paul Jeunechamps]] 2007/09/11 14:03//