Table of Contents
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 lesisohard
,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 genreregardeSiRompu
. - 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 leFieldApplicator
n'est pas assez typé et comprend aussi les mécanismes. Il faudrait donc faire unFieldApplicator
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 pour la rupture.
Matériaux/Lois matérielles
Material
dérive maintenantMaterialProperties
etMaterialLaw
dérive maintenantMaterialLawProperties
deMaterialLaw
. Ca permet d'éviter une volée de redéfinitions de fonctionsget
,put
,depend
qui n'avaient de raison d'être dans les classes de baseMaterial
etMaterialLaw
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 unMaterialID
, 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 plusVIRTUAL_OBJECT
vu qu'on avait le problème que lesPhyset
et lesMaterialID
dérivent tous les deux deVirtualObject
. La solution consisterait à virer lePhyset
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
enDummyContinuousDamage
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
.
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
— Pierre-Paul Jeunechamps 2007/11/21 20:50