Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2007:11_22



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 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.

1)

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

1)
Mais comme ce n'est pas de la science, je laisse ça à Ludo…
commit/2007/11_22.txt · Last modified: 2016/03/30 15:23 (external edit)