J'ai adapté le nom des méthodes de contact conservatives :
Pour toute personne intéressée, les articles de référence sont les suivants :
Pour être sur et certain que les algorithmes de contact conservatif fonctionnent correctement, il faudrait d'une part corriger les méthodes de contact (Modifications du contenu des méthodes de contact et les calculs des composantes des forces dans les matériaux de contact) et d'autre part s'assurer que le schéma d'intégration conservatif correspond bel et bien à celui utilisé dans ces articles de référence.
Le cas de test de référence de l'impact d'une barre contre un plan rigide est repris dans l'article Formulation and analysis of conserving algorithms for frictionless dynamic contact/impact problems, F. Armero, E. Petöcz pour pouvoir valider les méthodes.
J'ai nettoyé la classe Augmented Lagrangian Manager. Notamment, cet objet n'apparait plus par défaut dans l'objet Metafor.
alm=AugmentatedLagrangianManager(metafor) alm.setMaxNbOfIterations(itma) alm.setAugLagMethodCriterion(criterion)
Inputs:
metafor | Référence vers une analyse metafor |
itma | Nombre d'augmentations max (10 par défaut) |
criterion | Critère d'arrêt |
ALM_CRITERION_NO = default |
|
ALM_CRITERION_GEO |
Le critère d'arrêt ALM_CRITERION_NO correspond à un nombre d'augmentation imposé par pas de temps. Le critère d'arrêt ALM_CRITERION_GEO correspond à une tolérance géométrique satisfaite en chaque nœud en contact par pas de temps. Si on ne parvient pas à atteindre la tolérance géométrique donnée en un nombre d'augmentation max, on recommence la calcul avec un pas de temps plus petit.
J'ai ajouté les matériaux suivants AugLagFrictionLessMaterial, AugLagStickingContactMaterial et AugLagCoulombContactMaterial. Les tolérances géométriques sur le gap normal et le gap tangentiel sont insérées au niveau du matériau !
J'ai déplacé la variable indiquant le nombre d'itération avant la première augmentation dans la classe Augmented Lagrangian Manager et ajouté la fonction getNumberOfIterationsForTimeStepEvaluation() dans la classe TimeIntegration. Il reste à mettre au point une règle heuristique de manière à adapter le pas de temps sur base du nombre d'augmentations par pas de temps et du nombre d'itérations mécaniques et/ou thermique.
A l'heure actuelle, j'ai désactivé en dur dans le code source les deux fonctionnalités suivantes :
Méthode du lagrangien augmenté :
[r]: [a]:mtMaterials/boundaries/AugLagStickingContactGpState.h [a]:mtMaterials/boundaries/AugLagStickingContactGpState.cpp [a]:mtMaterials/boundaries/AugLagStickingContactMaterial.h [a]:mtMaterials/boundaries/AugLagStickingContactMaterial.cpp [a]:mtMaterials/boundaries/AugLagCoulombContactGpState.h [a]:mtMaterials/boundaries/AugLagCoulombContactGpState.cpp [a]:mtMaterials/boundaries/AugLagCoulombContactMaterial.h [a]:mtMaterials/boundaries/AugLagCoulombContactMaterial.cpp [a]:mtMaterials/boundaries/AugLagFrictionLessContactGpState.h [a]:mtMaterials/boundaries/AugLagFrictionLessContactGpState.cpp [a]:mtMaterials/boundaries/AugLagFrictionLessContactMaterial.h [a]:mtMaterials/boundaries/AugLagFrictionLessContactMaterial.cpp [a]:mtMaterials/boundaries/AugLagMechanicalContactGpState.h [a]:mtMaterials/boundaries/AugLagMechanicalContactGpState.cpp [a]:mtMaterials/boundaries/AugLagMechanicalContactMaterial.h [a]:mtMaterials/boundaries/AugLagMechanicalContactMaterial.cpp [a]:mtMaterials/boundaries/AugLagNormalMechanicalContactGpState.h [a]:mtMaterials/boundaries/AugLagNormalMechanicalContactGpState.cpp [a]:mtMaterials/boundaries/AugLagNormalMechanicalContactMaterial.h [a]:mtMaterials/boundaries/AugLagNormalMechanicalContactMaterial.cpp [a]:mtMaterials/boundaries/AugLagFrictionalMechanicalContactGpState.h [a]:mtMaterials/boundaries/AugLagFrictionalMechanicalContactGpState.cpp [a]:mtMaterials/boundaries/AugLagFrictionalMechanicalContactMaterial.h [a]:mtMaterials/boundaries/AugLagFrictionalMechanicalContactMaterial.cpp [a]:mtMaterials/boundaries/AugLagTangentialMechanicalContactGpState.h [a]:mtMaterials/boundaries/AugLagTangentialMechanicalContactGpState.cpp [a]:mtMaterials/boundaries/AugLagTangentialMechanicalContactMaterial.h [a]:mtMaterials/boundaries/AugLagTangentialMechanicalContactMaterial.cpp [a]:mtMaterials/boundaries/PenaltyMechanicalContactGpState.h [a]:mtMaterials/boundaries/PenaltyMechanicalContactGpState.cpp [a]:mtMaterials/boundaries/PenaltyMechanicalContactMaterial.h [a]:mtMaterials/boundaries/PenaltyMechanicalContactMaterial.cpp
[r]:apps/bImp/contactLaursen.py [r]:apps/bImp/contactLaursenAugLag.py [r]:apps/bImp/contactLove.py [r]:apps/bImp/contactLoveAugLag.py [r]:apps/bImp/cylElastFrotLaursen.py [r]:apps/bImp/cylElastFrotLaursenAugLag.py [r]:apps/bImp/cylPlastLaursen.py [r]:apps/bImp/cylPlastLaursenAugLag.py [r]:apps/imp/contact3dDefoDefoAugLag1.py [r]:apps/imp/contact3dDefoDefoAugLag2.py [r]:apps/imp/contactAugLag1.py [r]:apps/imp/contactAugLag2.py [r]:apps/imp/contactAugLag3.py [a]:
— Gaëtan WAUTELET 2013/11/29