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 (et on ne peut pas tout à fait leur donner tort!). Ca impliquerait de programmer dans chaque matériau une fonction du genre 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