Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2017:04_22

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
commit:2017:04_22 [2017/04/25 19:22] – [Lagrangien Augmenté] wauteletcommit:2017:04_22 [2017/04/26 14:50] (current) wautelet
Line 1: Line 1:
  
  
-===== Commit 2017-04-22 ======+===== Commit 2017-04-26 ======
  
 Ce commit est pour améliorer quelques routines liées au contact et pour mettre progressivement mes développements sur la version courante. Ce commit est pour améliorer quelques routines liées au contact et pour mettre progressivement mes développements sur la version courante.
Line 17: Line 17:
 === Méthode interfacée === === Méthode interfacée ===
  
-Après un petit refactoring, pour ne pas changer, j'ai scindé en deux les méthodes de Newton Raphson Modifiée : CpuModifiedNRStiffnessUpdateCriterion et PeriodicModifiedNRStiffnessUpdateCriterion. Évidemment, la méthode par défaut est NRStiffnessUpdateCriterion. Toutes ces méthodes dérivent de StiffnessUpdateCriterionBase et ont pour but de décider si nous devons mettre à jour la matrice de raideur tangente lors du calcul de la correction des positions.+Après un petit refactoring, pour ne pas changer, j'ai scindé en deux les méthodes de Newton Raphson Modifiée : CpuModifiedNRStiffnessUpdateCriterion et PeriodicModifiedNRStiffnessUpdateCriterion. Par ailleur, la méthode par défaut pour la stratégie de mise à jour de la matrice de raideur tangente est la méthode de Newton Raphson NRStiffnessUpdateCriterion. Toutes ces méthodes dérivent de StiffnessUpdateCriterionBase et ont pour but de décider si nous devons mettre à jour la matrice de raideur tangente lors du calcul de la correction des positions.
  
 === Stratégie de la méthode de Newton Raphson Modifiée  ===  === Stratégie de la méthode de Newton Raphson Modifiée  === 
Line 30: Line 30:
  
 Voici les méthodes disponibles et les options associées. Voici les méthodes disponibles et les options associées.
 +
 +== NRStiffnessUpdateCriterion (Méthode Par défaut)==
 +
 +<code>
 +    mim = metafor.getMechanicalIterationManager()
 +    stiffUpdate = NRStiffnessUpdateCriterion(mim)
 +    stiffUpdate.setDebug(parameters['StiffUpdateDebug']); Default = False
 +    stiffUpdate.setVerbose(parameters['StiffUpdateVerbose']); Default = False
 +    mim.setStiffnessUpdateCriterion(stiffUpdate)
 +</code>
 +
 +== StiffnessUpdateCriterion (Ancienne méthode de mise à jour de la matrice de raideur tangente) ==
 +
 +<code>
 +    mim = metafor.getMechanicalIterationManager()
 +    stiffUpdate = StiffnessUpdateCriterion(mim)
 +    stiffUpdate.setNbOfIterationsForStiffUpdate(parameters['NbOfIterationsForStiffUpdate']); Default = 1
 +    stiffUpdate.setCpuDependency(parameters['CpuDependency']); Default = False
 +    stiffUpdate.setDebug(parameters['StiffUpdateDebug']); Default = False
 +    stiffUpdate.setVerbose(parameters['StiffUpdateVerbose']); Default = False
 +    mim.setStiffnessUpdateCriterion(stiffUpdate)
 +</code>
 +
 +== CpuModifiedNRStiffnessUpdateCriterion ==
 +
 +<code>
 +    mim = metafor.getMechanicalIterationManager()
 +    stiffUpdate = CpuModifiedNRStiffnessUpdateCriterion(mim)
 +    stiffUpdate.setKeepStepStiffness(parameters['KeepStepStiffness']); Default = True
 +    stiffUpdate.setDebug(parameters['StiffUpdateDebug']); Default = False
 +    stiffUpdate.setVerbose(parameters['StiffUpdateVerbose']); Default = False
 +    mim.setStiffnessUpdateCriterion(stiffUpdate)
 +</code>
 +
 +== PeriodicModifiedNRStiffnessUpdateCriterion ==
 +
 +<code>
 +    mim = metafor.getMechanicalIterationManager()
 +    stiffUpdate = PeriodicModifiedNRStiffnessUpdateCriterion(mim)
 +    stiffUpdate.setMaxNbOfModifiedNRIterations(parameters['MaxNbOfModifiedNRIterations']); Default = 1
 +    stiffUpdate.setResidualDecreaseFactor(parameters['ResidualDecreaseFactor']); Default = 1.0
 +    stiffUpdate.setKeepStepStiffness(parameters['KeepStepStiffness']); Default = True
 +    stiffUpdate.setDebug(parameters['StiffUpdateDebug']); Default = False
 +    stiffUpdate.setVerbose(parameters['StiffUpdateVerbose']); Default = False
 +    mim.setStiffnessUpdateCriterion(stiffUpdate)
 +</code>
 +
 +Le paramètre keepStepStiffness permet de conserver la matrice de raideur tangente d'un pas de temps à l'autre, uniquement si le pas de temps est quasi-identique. Sinon, on force la mise à jour de la matrice de raideur tangente.
  
  
Line 51: Line 99:
 Ainsi, il semble intéressant d'utiliser la méthode de Newton Raphson modifiée pour éviter de mettre à jour la matrice de raideur tangente à chaque itération mécanique. En pratique, la difficulté de résolution du problème mécanique réside dans les non-linéarités (contact, géométrie, matériau) présentes au pas de temps courant. Si le problème mécanique est quasi linéaire, le problème se résout en quasi une seule itération comme en élasticité linéaire. Il est possible d'envisager un basculement entre la méthode de Newton Raphson et la méthode de Newton Raphson modifiée au travers des augmentations. Lors du passage à la méthode de Newton Raphson modifiée, il est intéressant aussi de mettre à jour les paramètres ResidualDecreaseFactor et MaxNbOfModifiedNRIterations en fonction du nombre d'augmentations réalisés. On constate que la valeur du premier résidu d'une résolution d'équilibre mécanique décroit au fur et à mesure des augmentations (Attention, ceci n'est pas toujours cas, surtout si on a des status de contact changeant d'une augmentation à l'autre !), ce qui se traduit par une diminution du nombre d'itérations mécaniques pour atteindre la tolérance prescrite sur la procédure itérative de Newton Raphson. Il serait intéressant de faire une moyenne pondérée entre ce rapport entre les premiers résidus entre deux augmentations successives et celui entre deux itérations mécaniques. Ainsi on corrige progressivement les valeurs des deux paramètres et nous pouvons admettre plus de souplesse dans la résolution de l'équilibre mécanique par la méthode de Newton Raphson modifiée puisque le problème devient plus en plus "linéaire" au fur et à mesure des augmentations. Ainsi, il semble intéressant d'utiliser la méthode de Newton Raphson modifiée pour éviter de mettre à jour la matrice de raideur tangente à chaque itération mécanique. En pratique, la difficulté de résolution du problème mécanique réside dans les non-linéarités (contact, géométrie, matériau) présentes au pas de temps courant. Si le problème mécanique est quasi linéaire, le problème se résout en quasi une seule itération comme en élasticité linéaire. Il est possible d'envisager un basculement entre la méthode de Newton Raphson et la méthode de Newton Raphson modifiée au travers des augmentations. Lors du passage à la méthode de Newton Raphson modifiée, il est intéressant aussi de mettre à jour les paramètres ResidualDecreaseFactor et MaxNbOfModifiedNRIterations en fonction du nombre d'augmentations réalisés. On constate que la valeur du premier résidu d'une résolution d'équilibre mécanique décroit au fur et à mesure des augmentations (Attention, ceci n'est pas toujours cas, surtout si on a des status de contact changeant d'une augmentation à l'autre !), ce qui se traduit par une diminution du nombre d'itérations mécaniques pour atteindre la tolérance prescrite sur la procédure itérative de Newton Raphson. Il serait intéressant de faire une moyenne pondérée entre ce rapport entre les premiers résidus entre deux augmentations successives et celui entre deux itérations mécaniques. Ainsi on corrige progressivement les valeurs des deux paramètres et nous pouvons admettre plus de souplesse dans la résolution de l'équilibre mécanique par la méthode de Newton Raphson modifiée puisque le problème devient plus en plus "linéaire" au fur et à mesure des augmentations.
  
-=== Récapitulatif des méthodes ===+=== Récapitulatif === 
 + 
 +Voici les méthodes disponibles et les options associées. 
 + 
 +== AlmCpuModifiedNRStiffnessUpdateCriterion == 
 + 
 +<code> 
 +    alm = StandardAugmentedLagrangianManager(metafor) 
 +    mim = metafor.getMechanicalIterationManager() 
 +    stiffUpdate = AlmCpuModifiedNRStiffnessUpdateCriterion(mim,alm) 
 +    stiffUpdate.setAugmentationThreshold(parameters['AugmentationThreshold']); Default = 0 
 +    stiffUpdate.setKeepStepStiffness(parameters['KeepStepStiffness']); Default = True 
 +    stiffUpdate.setKeepAugmentationStiffness(parameters['KeepAugmentationStiffness']); Default = True 
 +    stiffUpdate.setDebug(parameters['StiffUpdateDebug']); Default = False 
 +    stiffUpdate.setVerbose(parameters['StiffUpdateVerbose']); Default = False 
 +    mim.setStiffnessUpdateCriterion(stiffUpdate) 
 +</code> 
 + 
 +== AlmPeriodicModifiedNRStiffnessUpdateCriterion == 
 + 
 +<code> 
 +    alm = StandardAugmentedLagrangianManager(metafor) 
 +    mim = metafor.getMechanicalIterationManager() 
 +    stiffUpdate = AlmPeriodicModifiedNRStiffnessUpdateCriterion(mim,alm) 
 +    stiffUpdate.setMaxNbOfModifiedNRIterations(parameters['MaxNbOfModifiedNRIterations']); Default = 1 
 +    stiffUpdate.setResidualDecreaseFactor(parameters['ResidualDecreaseFactor']); Default = 1.0 
 +    stiffUpdate.setAugmentationThreshold(parameters['AugmentationThreshold']); Default = 0 
 +    stiffUpdate.setKeepStepStiffness(parameters['KeepStepStiffness']); Default = True 
 +    stiffUpdate.setKeepAugmentationStiffness(parameters['KeepAugmentationStiffness']); Default True 
 +    stiffUpdate.setDebug(parameters['StiffUpdateDebug']); Default False 
 +    stiffUpdate.setVerbose(parameters['StiffUpdateVerbose']); Default False 
 +    mim.setStiffnessUpdateCriterion(stiffUpdate) 
 +</code> 
 + 
 +Le paramètre keepAugmentationStiffness permet de conserver la matrice de raideur tangente après une augmentation, uniquement si le premier résidu avant l'augmentation est plus grand que le premier résidu après l'augmentation. Sinon, on force la mise à jour de la matrice de raideur tangente.
  
 +Le paramètre augmentationThreshold permet de spécifier à partir de quel numéro d'augmentation, nous passons d'une méthode du type Newton Raphson à une méthode du type Newton Raphson modifiée. Si cette valeur est prise à -1, nous commençons d'office par une méthode du type Newton Raphson modifiée avant la première augmentation. 
  
 +Finalement, l'algorithme est suffisamment malin pour passer à une méthode du type Newton Raphson modifiée si nous ne sommes pas en contact (avant et après impact, après springback), quelque soit la valeur de augmentationThreshold. 
 +    
 ===== Formulation AIC ===== ===== Formulation AIC =====
  
Line 61: Line 146:
  
 <code> <code>
-[a]:+[a]:mtFEM/algos/AlmCpuModifiedNRStiffnessUpdateCriterion.cpp 
 +[a]:mtFEM/algos/AlmPeriodicModifiedNRStiffnessUpdateCriterion.cpp 
 +[a]:mtFEM/algos/AlmStiffnessUpdateCriterion.cpp 
 +[a]:mtFEM/algos/CpuModifiedNRStiffnessUpdateCriterion.cpp 
 +[a]:mtFEM/algos/ModifiedNRStiffnessUpdateCriterion.cpp 
 +[a]:mtFEM/algos/NRStiffnessUpdateCriterion.cpp 
 +[a]:mtFEM/algos/PeriodicModifiedNRStiffnessUpdateCriterion.cpp 
 +[a]:mtFEM/algos/StiffnessUpdateCriterionBase.cpp 
 +[a]:mtFEM/algos/StiffnessUpdateMethods.cpp 
 +[a]:mtFEM/algos/AlmCpuModifiedNRStiffnessUpdateCriterion.h 
 +[a]:mtFEM/algos/AlmPeriodicModifiedNRStiffnessUpdateCriterion.h 
 +[a]:mtFEM/algos/AlmStiffnessUpdateCriterion.h 
 +[a]:mtFEM/algos/CpuModifiedNRStiffnessUpdateCriterion.h 
 +[a]:mtFEM/algos/ModifiedNRStiffnessUpdateCriterion.h 
 +[a]:mtFEM/algos/NRStiffnessUpdateCriterion.h 
 +[a]:mtFEM/algos/PeriodicModifiedNRStiffnessUpdateCriterion.h 
 +[a]:mtFEM/algos/StiffnessUpdateCriterionBase.h 
 +[a]:mtFEM/algos/StiffnessUpdateMethods.h
 [r]: [r]:
 </code> </code>
Line 68: Line 170:
  
 <code> <code>
-[a]:+[a]:apps/bImp/cyl3DDynAnaModifiedNR.py 
 +[a]:apps/qs/cont2AugLagModifiedNR1.py 
 +[a]:apps/qs/cont2AugLagModifiedNR2.py 
 +[a]:apps/qs/cont2AugLagModifiedNR3.py 
 +[a]:apps/qs/cont2AugLagModifiedNR4.py 
 +[a]:apps/qs/cont2AugLagModifiedNR5.py 
 +[a]:apps/qs/cont2ModifiedNR.py 
 +[a]:mtContact/tests/twoToriContactTestAugLag.py 
 +[a]:mtContact/tests/twoToriContactTestAugLagModifiedNR.py 
 +[a]:mtContact/tests/twoToriContactTestModifiedNR.py
 [r]: [r]:
 </code> </code>
  
- --- //[[gwautelet@ulg.ac.be|gaëtan]] 2017/04/22 22:37//+ --- //[[gwautelet@ulg.ac.be|gaëtan]] 2017/04/26 22:37//
  
  
commit/2017/04_22.1493140948.txt.gz · Last modified: 2017/04/25 19:22 by wautelet

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki