====== Commit 2007-11-22 ====== ===== Modifs ===== ==== Rupture ==== * Nettoyage des cas-tests de rupture pour éviter les copier-coller et éviter de me faire taper dessus par Romain. * Nouveau type de critère de rupture des éléments ''AllRuptureCriteria'' : l'élément est rompu si tous les points de Gauss ont atteint une valeur critique. * Nouveaux cas-tests pour tester ces méthodes. * Nouvelle organisation du source de ''mtElements/rupture'' pour pouvoir à présent utiliser n'importe quoi comme critère de rupture. * Pourquoi? Jusque maintenant, on était limité à un critère de rupture lié à une valeur critique d'un ''InternalField'', ce qui s'est vite avéré restrictif. En effet, on ne sait pas faire une loi avec des paramètres! * Solution bête : faire un nouveau type de ''materialLaws'' comme les ''isohard'', ''plastVisco'' au niveau du matériau... J'ai vite renoncé de peur que Luc et Romain refusent à tout jamais de me parler =) (et on ne peut pas tout à fait leur donner tort!). Ca impliquerait de programmer dans chaque matériau une fonction du genre ''regardeSiRompu''. * Autre solution : faire une structure analogue au matériau pour permettre l'utilisation de fonction ''put'', ''depend''... et donc introduire des paramètres matériau au niveau du critère de rupture tout en restant au niveau de l'élément. C'est donc plus propre : on ne mélange pas matériau et critère de rupture de l'élément (même si la rupture de l'élément est physiquement fonction du matériau utilisé). Avantage, tous les matériaux peuvent avoir un critère de rupture (bon, faut être un peu malin et ne pas avoir un critère de rupture en défo plastique avec un matériau élastique). * Problème annexe : je n'ai pas réussi à mettre tous les fichiers de rupture dans le répertoire ''mtElements/rupture'' (et donc par effet de bord ça laisserait une possibilité de faire une belle dll de rupture) à cause du fait le le ''FieldApplicator'' n'est pas assez typé et comprend aussi les mécanismes. Il faudrait donc faire un ''FieldApplicator'' pour les mécanismes pour s'affranchir de cette limite. * Modification de la façon de rentrer un critère de rupture. Avant, on écrivait pour obtenir un critère de rupture en défo plastique dont l'élément était rompu si le critère était rompu en moyenne sur l'élément : RC = MeanRuptureCriteria(IF_EPL,0.2) app = FieldApplicator(1) app.push(1, SIDE_ID) app.addRuptureCriteria(RC) intset = domain.getInteractionSet() intset.copy(app) del RC On voit donc qu'on est limité à une valeur critique d' ''InternalField'' pour définir le critère de rupture. Si le critère est plus compliqué, on se retrouve bête. Maintenant, on écrit: rc = EplRuptureCriterion() rc.put(RUPT_CRIT_VALUE, 0.2) rc.put(RUPT_TYPE_CRIT, ONEBROKEN) app = FieldApplicator(1) app.push(1, SIDE_ID) app.addRuptureCriterion(rc) intset = domain.getInteractionSet() intset.copy(app) del rc Donc, on a un critère de rupture de type ''EplRuptureCriterion'' qui comme son nom l'indique est vérifié pour une valeur critique de la défo plastique de 0.2. L'élément est rompu si le critère est vérifié en un point de Gauss (paramètre ''RUPT_TYPE_CRIT''). On peut aussi choisir de rompre l'élément si le critère est vérifié sur tous les points de Gauss (''RUPT_TYPE_CRIT'' = ''ALLBROKEN'') ou en moyenne sur tous les points de Gauss (''RUPT_TYPE_CRIT'' = ''MEANBROKEN''). Supposons à présent qu'on ait un critère de rupture ''Machin'' qui dépend de la pression, de l'endommagement et de la défo plastique en fonction de paramètre ''P_1'', ''P_2'' et ''P_3''. Il suffit d'implémenter le critère ''MachinRuptureCriterion'' en modifiant dans la classe la fonction ''examineIfElementIsBroken'' qui évalue le critère à chaque point de Gauss, exactement comme on fait quand on met une nouvelle loi d'écrouissage pour évaluer la limite élastique. On introduit les codes des nouveaux paramètres, on interface dans SWIG et hop ça marche! On aurait donc dans le jeu de données: rc = MachinRuptureCriterion() rc.put(RUPT_CRIT_VALUE, 0.2) rc.put(RUPT_TYPE_CRIT, ONEBROKEN) rc.put(P_1, 5.0) rc.put(P_2, 3.0) rc.put(P_3, 1.6) app = FieldApplicator(1) app.push(1, SIDE_ID) app.addRuptureCriterion(rc) intset = domain.getInteractionSet() intset.copy(app) del rc Les paramètres communs à tous les critères de rupture sont la valeur critique ''RUPT_CRIT_VALUE'' et le type de rupture de l'élément (il se rompt si le critère de rupture est vérifié en un point de Gauss, à tous les points de Gauss ou en moyenne sur les points de Gauss). * Mise à jour de la [[doc:user:rupture|doc]] pour la rupture. ==== Matériaux/Lois matérielles ==== * ''Material'' dérive maintenant ''MaterialProperties'' et ''MaterialLaw'' dérive maintenant ''MaterialLawProperties'' de ''MaterialLaw''. Ca permet d'éviter une volée de redéfinitions de fonctions ''get'', ''put'', ''depend'' qui n'avaient de raison d'être dans les classes de base ''Material'' et ''MaterialLaw'' que parce qu'on avait cette structure. * Effets de bord : * Tous les constructeurs des matériaux sont modifiés : on ne rentre plus un ''MaterialProperties'' mais bien un ''MaterialID'', ce qui intuitivement est plus logique (on passe l'identifiant du matériau à son constructeur) * Tous les matériaux et toutes les lois matérielles sont maintenant des classes ''ABSTRACT_OBJECT'' et non plus ''VIRTUAL_OBJECT'' vu qu'on avait le problème que les ''Physet'' et les ''MaterialID'' dérivent tous les deux de ''VirtualObject''. La solution consisterait à virer le ''Physet'' du constructeur. * J'ai pu programmer plus facilement une formulation générale des critères de rupture comme expliqué plus haut. * Renommage de ''BidonContinuousDamage'' en ''DummyContinuousDamage'' vu que Romain n'avait pas osé le faire ;-). ===== Todo List ===== * Supprimer la dérivation de ''Physet'' dans les matériaux, les lois matérielles et les critères de rupture. * Typer correctement le ''FieldApplicator''. ((Mais comme ce n'est pas de la science, je laisse ça à Ludo...)) ===== Fichiers ajoutés/supprimés ===== mtMaterialLaws/damage/DummyContinuousDamage.cpp added (+) mtMaterialLaws/damage/DummyContinuousDamage.h added (+) mtMaterialLaws/damage/BidonContinuousDamage.cpp deleted mtMaterialLaws/damage/BidonContinuousDamage.h deleted mtElements/rupture/DamRuptureCriterion.cpp added mtElements/rupture/EplRuptureCriterion.cpp added mtElements/rupture/RuptureCriterion.cpp added mtElements/rupture/RuptureCriterionIDList.cpp mtElements/rupture/RuptureCriterionProperties.cpp mtElements/rupture/DamRuptureCriterion.h added mtElements/rupture/EplRuptureCriterion.h added mtElements/rupture/RuptureCriterion.h added mtElements/rupture/RuptureCriterionFactoryArgs.h added mtElements/rupture/RuptureCriterionIDList.h added mtElements/rupture/RuptureCriterionProperties.h added mtElements/RuptureCriterionID.h added mtElements/RuptureCriterionPropertyID.h added mtElements/rupture/MaxRuptureCriteria.cpp deleted mtElements/rupture/MeanRuptureCriteria.cpp deleted mtElements/rupture/RuptureCriteria.cpp deleted mtElements/rupture/MaxRuptureCriteria.h deleted mtElements/rupture/MeanRuptureCriteria.h deleted mtElements/rupture/RuptureCriteria.h deleted apps/imp/ruptureAll1.py added apps/imp/ruptureAll2.py added apps/imp/ruptureCont2All.py added apps/imp/ruptureCont2Max.py added (+) apps/imp/ruptureCont2Mean.py added apps/imp/ruptureCont2.py deleted --- //[[ppjeunechamps@ulg.ac.be|Pierre-Paul Jeunechamps]] 2007/11/21 20:50//