Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2014:10_29

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:2014:10_29 [2014/10/29 18:25] wauteletcommit:2014:10_29 [2016/03/30 15:23] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====== Commit 2014-03-19 ======+====== Commit 2014-10-29 ======
  
 ===== Modifications ===== ===== Modifications =====
  
-==== Nettoyage de l'interfaçage du Lagrangien Augmenté  ====+==== Nouvel Interfaçage du Lagrangien Augmenté  ====
  
-J'ai nettoyé l'interfaçage du Lagrangien Augmenté avec l'objet TimeIntegration et l'objet Metafor. +L'algorithme du Lagrangien Augmenté pour la gestion du contact est implementé sous les formes suivantes : 
-Désormais, on a uniquement "AugmentedLagrangianManager.h" dans ces deux objets là et non dans tous les schémas d'intégration.+
  
-==== Nettoyage Electric Iteration Manager  ====+  - Version standard (On effectue un nombre fixe d'augmentations par pas de temps sur les interactions de contact sélectionnées.) : 
 +<code> 
 +alm StandardAugmentedLagrangianManager(metafor) 
 +alm.setNbOfIterationsPerStep(parameter['NbreAugmentation']) 
 +             
 +augLagAugmentation AugLagClassicalAugmentation(alm) 
 +ci.setAugLagAugmentation(augLagAugmentation) 
 +             
 +alm.addContactInteraction(ci) 
 +</code> 
 +  - Version automatique (On effectue un nombre d'augmentations par pas de temps de manière à satisfaire un critère donné (Critère géométrique ou en force), et ce nombre ne peut pas être supérieur à une valeur maximale donnée.) :  
 +<code> 
 +alm AutomaticAugmentedLagrangianManager(metafor) 
 +alm.setMaxNbOfIterations(parameter['NbreAugmentationMax']) 
 +             
 +augLagCriterion AugLagGeoCriterion(alm) 
 +augLagCriterion.setNormalGapPrec(parameter['gapNTol']) 
 +augLagCriterion.setTangentialGapPrec(parameter['gapTTol'])             
 +ci.setAugLagCriterion(augLagCriterion) 
 +             
 +augLagAugmentation = AugLagClassicalAugmentation(alm) 
 +ci.setAugLagAugmentation(augLagAugmentation) 
 +             
 +alm.addContactInteraction(ci) 
 +</code> 
 +Il existe 4 critères de base :  
 +  - Critère géométrique  
 +<code> 
 +augLagGeoCriterionAugLagGeoCriterion(alm) 
 +augLagGeoCriterion.setNormalGapNorm(ALM_MAX_NORM) 
 +augLagGeoCriterion.setTangentialGapNorm(ALM_MEAN_NORM) 
 +augLagGeoCriterion.setNormalGapPrec(parameter['gapNTol']) 
 +augLagGeoCriterion.setTangentialGapPrec(parameter['gapTTol']) 
 +</code>         
 +  - Critère géométrique normalisé 
 +<code> 
 +augLagNormalisedGeoCriterionAugLagNormalisedGeoCriterion(alm) 
 +augLagNormalisedGeoCriterion.setNormalGapNorm(ALM_MAX_NORM) 
 +augLagNormalisedGeoCriterion.setTangentialGapNorm(ALM_MEAN_NORM) 
 +augLagNormalisedGeoCriterion.setNormalGapPrec(parameter['gapNTol']) 
 +augLagNormalisedGeoCriterion.setTangentialGapPrec(parameter['gapTTol']) 
 +</code>         
 +  - Critère force ou pression/cisaillement (si on utilise la méthode area in contact)  
 +<code> 
 +augLagForceCriterionAugLagForceCriterion(alm) 
 +augLagForceCriterion.setContactPressureNorm(ALM_MAX_NORM) 
 +augLagForceCriterion.setContactShearNorm(ALM_MEAN_NORM) 
 +augLagForceCriterion.setContactPressurePrec(parameter['contactPressureTol']) 
 +augLagForceCriterion.setContactShearPrec(parameter['contactShearTol']) 
 +</code>         
 +  - Critère force ou pression/cisaillement normalisé (si on utilise la méthode area in contact)  
 +<code>  
 +augLagNormalisedForceCriterionAugLagNormalisedForceCriterion(alm) 
 +augLagNormalisedForceCriterion.setContactPressureNorm(ALM_MAX_NORM) 
 +augLagNormalisedForceCriterion.setContactShearNorm(ALM_MEAN_NORM) 
 +augLagNormalisedForceCriterion.setContactPressurePrec(parameter['contactPressureTol']) 
 +augLagNormalisedForceCriterion.setContactShearPrec(parameter['contactShearTol']) 
 +</code>         
 +Il est possible de les combiner pour faire un critère multiple :         
 +<code>         
 +augLagGeoForceCriterion = AugLagMultipleCriterions(alm) 
 +augLagGeoForceCriterion.add(augLagGeoCriterion) 
 +augLagGeoForceCriterion.add(augLagNormalisedForceCriterion) 
 +</code>         
 +Il est possible d'enlever un critère du critère multiple : 
 +<code> 
 +augLagGeoForceCriterion.remove(augLagNormalisedForceCriterion) 
 +</code> 
 +Pour finir, il faut associer le matériau suivant pour chaque interaction de contact sélectionnée :  
 +<code> 
 +        if(parameter['ContactType']=='Frictionless'): 
 +            materset.define (2, AugLagFrictionlessContactMaterial)         
 +            materset(2).put(PROF_CONT,  parameter['Prof'])                 
 +            materset(2).put(PEN_NORMALE, parameter['CN'])                 
 +            materset(2).put(TYPE_CONT,parameter['ContactDetection'])    
 +            print "Frictionless Contact Material" 
 +        elif(parameter['ContactType']=='Sticking'): 
 +            materset.define (2, AugLagStickingContactMaterial)             
 +            materset(2).put(PROF_CONT,  parameter['Prof'])                 
 +            materset(2).put(PEN_TANGENT,  parameter['CT'])                 
 +            materset(2).put(PEN_NORMALE, parameter['CN'])                
 +            materset(2).put(TYPE_CONT,parameter['ContactDetection'])     
 +            print "Sticking Contact Material" 
 +        elif(parameter['ContactType']=='Coulomb'): 
 +            materset.define (2, AugLagCoulombContactMaterial)                 
 +            materset(2).put(PROF_CONT,  parameter['Prof'])                  
 +            materset(2).put(COEF_FROT_STA,    parameter['MuSTA'])         
 +            materset(2).put(COEF_FROT_DYN,    parameter['MuDYN'])         
 +            materset(2).put(PEN_TANGENT,  parameter['CT'])                
 +            materset(2).put(PEN_NORMALE, parameter['CN'])                
 +            materset(2).put(TYPE_CONT,parameter['ContactDetection'])     
 +            print "Coulomb Contact Material" 
 +        else: 
 +            print "Bad definition of type contact" 
 +</code>             
 +**Étant donné que la configuration/état interne de l'objet "critère" et "augmentation" dépend du matériau associé à l'interaction de contact, il faut à chaque fois instancier un objet critère et augmentation pour chaque interaction de contact qui possède un matériau différent (Frictionless, Sticking et Coulomb).** 
  
-J'ai nettoyé l'ensemble du code source qui fait référence à cette objet, qui existait dans l'objet Metafor et qui n'est plus du tout utilisé suite à un commit précédent.  +<note important> 
 +Il est à noter que l'algorithme n'a pas été testé dans les cas suivants :
  
-==== Nettoyage LoadAdaptationManager  ====+  - ALE (Mise à jour du point de collement ?), 
 +  - en contact déformable - déformable, 
 +  - en contact 3D, ...  
 +</note>
  
-Par défaut, il y a une instance du LoadAdapationManager dans l'objet MetaforDésormais, il faut ajouter une référence à Metafor dans son constructeur pour l'ajouter à Metafor : +D'autres explications seront données dans la documentation de l'algorithme
  
-lam LoadAdapationManager(metafor)+==== Ajout d'une fonctionnalité sur l'extraction du cisaillement et de la force tangentielle de contact ==== 
  
-et nous n'avons plu dans la fenêtre de sortie de Metafor LoadAdaptationManager::initialise() quand on ne l'utilise pas+La gestion du contact tangentielle se fait au moyen d'une base locale associée à chaque nœud en contact construite à partir du gap tangentiel, de manière à ce que la direction tangentielle soit toujours alignée avec la direction du glissement. Ainsi, par construction, la valeur du cisaillement (force tangentiellede contact est toujours positive ou nulle
  
-J'ai adapté les 4 cas-tests dans oo_nda.sonaca.tests avec ce nouvel interface.+Dans certains cas de figure, afin de comparer avec des résultats de la littérature, il peut être intéressant d'utiliser la base locale de l'outil, qui est identique pour chaque nœud en contact, afin d'avoir une valeur du cisaillement (force tangentielle) de contact positive (c'est à dire que la force tangentielle de contact est alignée avec la tangente de l'outil) ou négative (cas contraire).  
 + 
 +Pour se faire, il suffit d'utiliser les commandes suivantes :  
 +<code> 
 +extractorFt = TangentForceValueExtractor(ci) 
 +extractorFt.setUseToolLocalSystemAxes(True) 
 +valuesmanager.add(1, extractorFt,'Ft')  
 +</code> 
 +**Cette fonctionnalité ne marche que pour l'instant en état plan déformation et en axisymétrique.**  
 + 
 +==== Ajout d'un Timer ==== 
 + 
 +Afin de tenir compte de la fraction du temps CPU passée dans les routines liées à l'algorithme du Lagrangien Augmenté (dès le début jusqu'à la fin de l'intégration temporelle), j'ai ajouté un timer dans le même ordre d'idée que ceux qui existent pour l'assemblage de la matrice de raideur tangente, la détection du contact, etc 
 + 
 +==== Ajout d'options globales pour debugger Metafor ==== 
 + 
 +Il est possible de  
 + 
 +  - de mettre à jour la fenêtre de visualisation à chaque augmentation 
 +  - de sauvegarder les grandeurs des extracteurs sur le disque dur à chaque augmentation
  
 ==== Modification des Cas Tests ====  ==== Modification des Cas Tests ==== 
Line 46: Line 163:
   - apps.qs.contactDefoDefoAugLag4   - apps.qs.contactDefoDefoAugLag4
  
-J'ai adapté l'interfaçage des cas-tests en modifiant les fonctions de la boite à outil apps.toolbox.createContactTests .+J'ai adapté l'interfaçage des cas-tests en modifiant les fonctions de la boite à outil apps.toolbox.createContactTests . Les cas-tests fonctionnent mais rien ne garantit que 
  
  
Line 61: Line 178:
  
 <code> <code>
-[r]: +[a]:mtContact/ActiveContactInteractionIterator.cpp 
-[a]:+[a]:mtContact/ActiveContactInteractionIterator.h 
 +[a]:mtContact/ActiveContactInteractionIterator.inl 
 +[a]:mtContact/AugLagAugmentation.cpp 
 +[a]:mtContact/AugLagAugmentation.h 
 +[a]:mtContact/AugLagAugmentationPart.cpp 
 +[a]:mtContact/AugLagAugmentationPart.h 
 +[a]:mtContact/AugLagClassicalAugmentation.cpp 
 +[a]:mtContact/AugLagClassicalAugmentation.h 
 +[a]:mtContact/AugLagCriterion.cpp 
 +[a]:mtContact/AugLagCriterion.h 
 +[a]:mtContact/AugLagCriterionNormMethod.cpp 
 +[a]:mtContact/AugLagCriterionNormMethod.h 
 +[a]:mtContact/AugLagCriterionPart.cpp 
 +[a]:mtContact/AugLagCriterionPart.h 
 +[a]:mtContact/AugLagCriterionStatus.cpp 
 +[a]:mtContact/AugLagCriterionStatus.h 
 +[a]:mtContact/AugLagForceCriterion.cpp 
 +[a]:mtContact/AugLagForceCriterion.h 
 +[a]:mtContact/AugLagFrictionalForceCriterion.cpp 
 +[a]:mtContact/AugLagFrictionalForceCriterion.h 
 +[a]:mtContact/AugLagFrictionalGeoCriterion.cpp 
 +[a]:mtContact/AugLagFrictionalGeoCriterion.h 
 +[a]:mtContact/AugLagFrictionalNormalisedForceCriterion.cpp 
 +[a]:mtContact/AugLagFrictionalNormalisedForceCriterion.h 
 +[a]:mtContact/AugLagFrictionalNormalisedGeoCriterion.cpp 
 +[a]:mtContact/AugLagFrictionalNormalisedGeoCriterion.h 
 +[a]:mtContact/AugLagGeoCriterion.cpp 
 +[a]:mtContact/AugLagGeoCriterion.h 
 +[a]:mtContact/AugLagMaxNorm.cpp 
 +[a]:mtContact/AugLagMaxNorm.h 
 +[a]:mtContact/AugLagMeanNorm.cpp 
 +[a]:mtContact/AugLagMeanNorm.h 
 +[a]:mtContact/AugLagMultipleCriterions.cpp 
 +[a]:mtContact/AugLagMultipleCriterions.h 
 +[a]:mtContact/AugLagNorm.cpp 
 +[a]:mtContact/AugLagNorm.h 
 +[a]:mtContact/AugLagNormalClassicalAugmentation.cpp 
 +[a]:mtContact/AugLagNormalClassicalAugmentation.h 
 +[a]:mtContact/AugLagNormalForceCriterion.cpp 
 +[a]:mtContact/AugLagNormalForceCriterion.h 
 +[a]:mtContact/AugLagNormalGeoCriterion.cpp 
 +[a]:mtContact/AugLagNormalGeoCriterion.h 
 +[a]:mtContact/AugLagNormalisedForceCriterion.cpp 
 +[a]:mtContact/AugLagNormalisedForceCriterion.h 
 +[a]:mtContact/AugLagNormalisedGeoCriterion.cpp 
 +[a]:mtContact/AugLagNormalisedGeoCriterion.h 
 +[a]:mtContact/AugLagNormalisedGeoCriterionPart.cpp 
 +[a]:mtContact/AugLagNormalisedGeoCriterionPart.h 
 +[a]:mtContact/AugLagNormalNormalisedForceCriterion.cpp 
 +[a]:mtContact/AugLagNormalNormalisedForceCriterion.h 
 +[a]:mtContact/AugLagNormalNormalisedGeoCriterion.cpp 
 +[a]:mtContact/AugLagNormalNormalisedGeoCriterion.h 
 +[a]:mtContact/AugLagSingleCriterion.cpp 
 +[a]:mtContact/AugLagSingleCriterion.h 
 +[a]:mtContact/AugLagTangentialClassicalAugmentation.cpp 
 +[a]:mtContact/AugLagTangentialClassicalAugmentation.h 
 +[a]:mtContact/AugLagTangentialForceCriterion.cpp 
 +[a]:mtContact/AugLagTangentialForceCriterion.h 
 +[a]:mtContact/AugLagTangentialGeoCriterion.cpp 
 +[a]:mtContact/AugLagTangentialGeoCriterion.h 
 +[a]:mtContact/AugLagTangentialNormalisedForceCriterion.cpp 
 +[a]:mtContact/AugLagTangentialNormalisedForceCriterion.h 
 +[a]:mtContact/AugLagTangentialNormalisedGeoCriterion.cpp 
 +[a]:mtContact/AugLagTangentialNormalisedGeoCriterion.h 
 +[a]:mtContact/AugmentedLagrangianAugmentationManager.cpp 
 +[a]:mtContact/AugmentedLagrangianAugmentationManager.h 
 +[a]:mtContact/AugmentedLagrangianConvergenceManager.cpp 
 +[a]:mtContact/AugmentedLagrangianConvergenceManager.h 
 +[a]:mtContact/AugmentedLagrangianIterationManager.cpp 
 +[a]:mtContact/AugmentedLagrangianIterationManager.h 
 +[a]:mtContact/AugmentedLagrangianManager.cpp 
 +[a]:mtContact/AugmentedLagrangianManager.h 
 +[a]:mtContact/AutomaticAugmentedLagrangianConvergenceManager.cpp 
 +[a]:mtContact/AutomaticAugmentedLagrangianConvergenceManager.h 
 +[a]:mtContact/AutomaticAugmentedLagrangianManager.cpp 
 +[a]:mtContact/AutomaticAugmentedLagrangianManager.h 
 +[a]:mtContact/ContactInteractionIterator.cpp 
 +[a]:mtContact/ContactInteractionIterator.h 
 +[a]:mtContact/ContactInteractionIterator.inl 
 +[a]:mtContact/ContactInteractionSet.cpp 
 +[a]:mtContact/ContactInteractionSet.h 
 +[a]:mtContact/StandardAugmentedLagrangianConvergenceManager.cpp 
 +[a]:mtContact/StandardAugmentedLagrangianConvergenceManager.h 
 +[a]:mtContact/StandardAugmentedLagrangianManager.cpp 
 +[a]:mtContact/StandardAugmentedLagrangianManager.h 
 +[a]:mtFEM/algos/AugmentedLagrangianBase.cpp 
 +[a]:mtFEM/algos/AugmentedLagrangianBase.h 
 +[r]:mtFEM/algos/AugmentedLagrangianManager.cpp 
 +[r]:mtFEM/algos/AugmentedLagrangianManager.h
 </code> </code>
  
Line 73: Line 278:
  
  
- --- //[[gwautelet@ulg.ac.be|Gaëtan WAUTELET]] 2014/08/11//+ --- //[[gwautelet@ulg.ac.be|Gaëtan WAUTELET]] 2014/10/29//
commit/2014/10_29.1414603559.txt.gz · Last modified: 2016/03/30 15:22 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki