Commit sur le contact XFEM.
Définition de lois matériaux de contact pour les XFEM (le dernier commit n'incluait que le contact glissant). Les quantités géométriques (pénétration, glissement, etc) sont désormais calculées et stockées par l’élément fini unidimensionel (XFEM1DContactElement) servant à l'intégration numérique sur l'élément XFEM 2D (XFEMContactElement). Le matériau de contact (XFEMContactMaterial) calcule les pressions appliquées en fonction de la loi de frottement et de ces quantités géométriques. L’élément XFEM de contact (XFEMContactElement) intègre la formulation sur les nœuds du quadrangle.
D'un point de vue utilisateur, les changement sont mineurs (on se rapproche de ce qui est fait dans le cas général sous Metafor). Avant les coefficients de pénalité étaient associés à l'élément, ils sont désormais associés au matériau, lui même associé à l'élément :
Mat.define(2,XFEMStickingContactMaterial) Mat(2).put(NPENALTY, 1.e8) Mat(2).put(TPENALTY, 1.e7) Mat(2).put(UNILAT, 0) prp2 = ElementProperties(XFEMContactElement) prp2.put(MATERIAL, 2) prp2.put(XNGP, 6)
La condition unilatéral permet (avec un matériau collant) de définir les conditions limites de Dirichlet par pénalité. Si le calcul ne converge pas, n'hésitez pas a demander une précision plus importante (si un calcul ne passe pas avec une tolérance 1.e-2, essayez 1.e-4). Je ne sais pas encore à quoi cela est dû.
Le paramètre XNPG définit le nombre de points de Gauss pour l'intégration des conditions de contact (semble donner des résultats corrects pour le paramètre “minimum” XNPG = 2 dans des cas académiques)
Pour l'élément de contact, j'ai eu des difficultés à coder l'influence des grandes déformations sur le contact. J'ai donc implanté le calcul d'une matrice de raideur numérique. Même sans la prise en compte des grandes déformations pour la méthode analytique, les résultats sont sensiblement les mêmes. Pour des coefficients de pénalité importants, la matrice de raideur numérique semble par contre plus stable.
Pour le calcul numérique de la matrice de raideur, il faut définir dans l'ElementProperties le paramètre STIFFMETHOD
prp3 = ElementProperties(XFEMContactElement) prp3.put(MATERIAL, 3) prp2.put(STIFFMETHOD,STIFF_NUMERIC)
Remarque : Je commite ca sous peu (modifications locales a mtXFEM), la version courante n'est pas complètement à jour.
J'ai voulu nettoyer les warnings détectés par chkrep.py. J'ai corrigé la plupart des problèmes. Il restait des warnings dues aux importations de fichiers externes (*.txt *.msh et autres). Pour alléger l'affichage et mieux voir les chkreps “importants”, j'ai supprimé le warning pour ces fichiers (ajout du “if not ext in” ligne 169)
if instr.find("$Id")==-1: if not ext in ['.geo', '.msh', '.txt']: "<font color=\"#0B610B\">'Id' string missing in %s</font><br />" % javalink
Reste des warnings dans geniso. Je prendrais le temps de les faire la prochaine fois si personne ne s'en occupe d'ici là :).
[a]:oo_meta/XFEM/XFEMContactMaterial.h [a]:oo_meta/XFEM/XFEMContactMaterial.cpp [a]:oo_meta/XFEM/XFEMCoulombContactMaterial.h [a]:oo_meta/XFEM/XFEMCoulombContactMaterial.cpp [a]:oo_meta/XFEM/XFEMFrictionLessContactMaterial.h [a]:oo_meta/XFEM/XFEMFrictionLessContactMaterial.cpp [a]:oo_meta/XFEM/XFEMStickingMaterial.h [a]:oo_meta/XFEM/XFEMStickingMaterial.cpp [a]:oo_meta/XFEM/XFEMContactValueExtractor.h [a]:oo_meta/XFEM/XFEMContactValueExtractor.cpp [a]:oo_meta/XFEM/XFEMVolumeValueExtractor.h [a]:oo_meta/XFEM/XFEMVolumeValueExtractor.cpp [a]:oo_meta/apps/XFEM/a_debug_cl.py (renommé dans la prochaine version en ironing)