AllRuptureCriteria : l'élément est rompu si tous les points de Gauss ont atteint une valeur critique.mtElements/rupture pour pouvoir à présent utiliser n'importe quoi comme critère de rupture.InternalField, ce qui s'est vite avéré restrictif. En effet, on ne sait pas faire une loi avec des paramètres!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 regardeSiRompu.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).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.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).
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.MaterialProperties mais bien un MaterialID, ce qui intuitivement est plus logique (on passe l'identifiant du matériau à son constructeur)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.BidonContinuousDamage en DummyContinuousDamage vu que Romain n'avait pas osé le faire Physet dans les matériaux, les lois matérielles et les critères de rupture.FieldApplicator.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
— Pierre-Paul Jeunechamps 2007/11/21 20:50