\[\newcommand{\vector}[1]{\underline{#1}} \newcommand{\vectorZero}{\vector{0}} \newcommand{\tensTwo}[1]{\boldsymbol{#1}} \newcommand{\tensTwoZero}{\tensTwo{0}} \newcommand{\tensTwoUnit}{\tensTwo{I}} \newcommand{\tensFour}[1]{\mathbb{#1}} \newcommand{\inverse}[1]{{#1}^{-1}} \newcommand{\transpose}[1]{{#1}^{T}} \newcommand{\inverseTranspose}[1]{ {#1}^{-T}} \newcommand{\vectorCmp}[2]{#1_{\left(#2\right)}} \newcommand{\vectorCmpCO}[2]{#1_{\left(#2\right)}} \newcommand{\vectorCmpCT}[2]{#1^{\left(#2\right)}} \newcommand{\tensTwoCmpCO}[3]{#1_{\left(#2 #3\right)}} \newcommand{\tensTwoCmpCT}[3]{#1^{\left(#2 #3\right)}} \newcommand{\tensTwoInva}[2]{I^{#1}_{#2}} \newcommand{\tensTwoDevia}[1]{\boldsymbol{\tilde{#1}}} \newcommand{\tensFourCmpCO}[5]{#1_{\left(#2 #3 #4 #5\right)}} \newcommand{\tensFourCmpCT}[5]{#1^{\left(#2 #3 #4 #5\right)}} \newcommand{\domain}{\Omega} \newcommand{\domainRefe}{\domain^{0}} \newcommand{\domainCurr}{\domain^{t}} \newcommand{\bound}{\partial\domain} \newcommand{\boundRefe}{\bound^{0}} \newcommand{\boundCurr}{\bound^{t}} \newcommand{\boundN}{\bound_{\textrm{N}}} \newcommand{\boundNRefe}{\boundN^{0}} \newcommand{\boundNCurr}{\boundN^{t}} \newcommand{\boundD}{\bound_{\textrm{D}}} \newcommand{\boundDRefe}{\boundD^{0}} \newcommand{\boundDCurr}{\boundD^{t}} \newcommand{\normal}{\vector{n}} \newcommand{\normalRefe}{\normal^{0}} \newcommand{\normalCurr}{\normal^{t}} \newcommand{\posi}{\vector{x}} \newcommand{\posiRefe}{\posi^{0}} \newcommand{\posiCurr}{\posi^{t}} \newcommand{\disp}{\vector{u}} \newcommand{\dispVirt}{\delta\vector{v}} \newcommand{\funcTransfor}{\vector{\varphi}^{t}} \newcommand{\gradTransfor}{\tensTwo{F}} \newcommand{\jacobTransfor}{J} \newcommand{\posiIncr}{\vector{dx}} \newcommand{\posiIncrRefe}{\posiIncr^{0}} \newcommand{\posiIncrCurr}{\posiIncr^{t}} \newcommand{\strainCmp}{\varepsilon} \newcommand{\strain}{\tensTwo{\strainCmp}} \newcommand{\EGLCmp}{E} \newcommand{\ECGDroiteCmp}{C} \newcommand{\ECGGaucheCmp}{B} \newcommand{\ELOGCmp}{{E}_{ln}} \newcommand{\EGL}{\tensTwo{\EGLCmp}} \newcommand{\ECGDroite}{\tensTwo{\ECGDroiteCmp}} \newcommand{\ECGGauche}{\tensTwo{\ECGGaucheCmp}} \newcommand{\ELOG}{\tensTwo{\ELOGCmp}} \newcommand{\EDilCmp}{C^{\star}} \newcommand{\EDil}{\tensTwo{\EDilCmp}} \newcommand{\divTensTwo}[1]{\vector{\nabla} {\cdot} #1 } \newcommand{\divVector}[1]{\vector{\nabla} {\cdot} #1 } \newcommand{\gradScal}[1]{\vector{\nabla} #1 } \newcommand{\gradVector}[1]{\vector{\nabla} \times #1 } \DeclareMathOperator{\rand}{rand} \DeclareMathOperator{\round}{round} \DeclareMathOperator{\trace}{trace} \DeclareMathOperator{\rank}{rang} \DeclareMathOperator{\dev}{dev} \DeclareMathOperator{\cot}{cot} \newcommand{\metric} {\tensTwo{g}} \newcommand{\vectorBaseCV}[1]{\vector{g_{#1}}} \newcommand{\vectorBaseCT}[1]{\vector{g^{#1}}} \newcommand{\metricRefe} {\metric^{t}} \newcommand{\metricCurr} {\metric^{0}} \newcommand{\discVect}[1]{\lbrace #1 \rbrace} \newcommand{\discVectLigne}[1]{\langle #1 \rangle} \newcommand{\discVectZero}{\discVect{0}} \newcommand{\discVectCmp}[2]{\lbrace #1 \rbrace_{(#2)}} \newcommand{\discVectLigneCmp}[2]{\langle #1 \rangle_{(#2)}} \newcommand{\discMatr}[1]{\left[ #1 \right]} \newcommand{\discMatrZero}{\discMatr{0}} \newcommand{\discMatrCmp}[3]{\left[ #1 \right]_{(#2#3)}} \newcommand{\onQuadPoint}[2]{{#1}_{#2}} \newcommand{\onNode}[2]{{#1}^{#2}} \newcommand{\quadOrder}{k_{Q}} \newcommand{\nbQuadPoint}{n_Q} \newcommand{\quadWeight}[1]{\omega_{#1}} \newcommand{\quadPointIndex}{i_{\textrm{pg}}} \newcommand{\nodeIndex}{i_{\textrm{no}}} \newcommand{\pres}{p} \newcommand{\presRefe}{\pres^{0}} \newcommand{\presCurr}{\pres^{t}} \newcommand{\stressCmp}{\sigma} \newcommand{\stress}{\tensTwo{\stressCmp}} \newcommand{\stressPKTwoCmp}{S} \newcommand{\stressPKTwo}{\tensTwo{\stressPKTwoCmp}} \newcommand{\work}[1]{W^{#1}} \newcommand{\enerInterne}{\Psi_i} \newcommand{\yieldStress}{\sigmaCmp_{Y}} \newcommand{\youngModulus}{E} \newcommand{\youngModulusCplx}{E^{\star}} \newcommand{\poissonCoef}{\nu} \newcommand{\poissonCoefCplx}{\nu^{\star}} \newcommand{\shearModulus}{G} \newcommand{\bulkModulus}{K} \newcommand{\modulusTangent}{\tensFour{K}} \newcommand{\anglDila}{\psi} \newcommand{\anglFric}{\varphi} \newcommand{\cohesion}{c} \newcommand{\presCapi}{\pres_{c}} \newcommand{\presEau}{\pres_{w}} \newcommand{\presAir}{\pres_{a}} \newcommand{\shapeFunc}{\Phi} \newcommand{\shapeDFunc}{B} \newcommand{\measLine}{\, \mathrm{d} l} \newcommand{\measDomain}{\, \mathrm{d} \domain} \newcommand{\measBound}{\, \mathrm{d} \Gamma} \newcommand{\normEucl}[1]{\Vert{#1} \Vert } \newcommand{\valeAbs}[1]{\vert{#1} \vert } \newcommand{\derivee}[2]{#1_{, #2}} \newcommand{\soundSpeed}{c} \newcommand{\soundSpeedComp}{c_{P}} \newcommand{\soundSpeedCisa}{c_{S}} \newcommand{\posiTang}{\posi_{\tau}} \newcommand{\posiNorm}{{x}_{n}} \newcommand{\dispTang}{\disp_{\tau}} \newcommand{\dispNorm}{{u}_{n}} \newcommand{\basisVector}[1]{\vector{e}_{#1}} \newcommand{\sigmVector}{\vector{t}} \newcommand{\sigmVectorTang}{\sigmVector_{\tau}} \newcommand{\sigmVectorNorm}{t_{n}} \newcommand{\lameLambda}{\lambda} \newcommand{\lameMu}{\mu} \newcommand{\temp}{T} \newcommand{\therCp}{C_{p}} \newcommand{\therFlux}{\vector{q}} \newcommand{\therCondTher}{\lambda} \newcommand{\therSource}{s} \newcommand{\tempVirt}{\delta T} \newcommand{\beamArea}{S} \newcommand{\beamLength}{L} \newcommand{\setC}{\mathbb{C}} \newcommand{\setR}{\mathbb{R}}\]

4. Méthodologies#

Dans cette partie, on répond aux questions fréquemment posées lors des études avec du contact-frottement. Les techniques mises en place dans cette partie s’appuient souvent sur d’autres opérateurs que DEFI_CONTACT, on décrira brièvement les mot-clés à utiliser mais l’utilisateur pourra avantageusement se reporter aux documentations d’utilisation de ces commandes.

4.1. Quoi faire lorsqu’un calcul de contact ne converge pas ou ne converge pas vers la bonne solution ?#

Très souvent les problème de convergence en contact ont une origine physique et ne sont pas dus à un problème de robustesse de l’opérateur.

Les conseils que l’on donne par la suite ne sont qu’indicatifs. On propose en pratique de suivre la liste suivante:

  • N’activez pas toutes les non-linéarités en même temps. Toujours commencer par activer le contact seul en élasticité linéaire et voir si cela converge.

  • Pour les contacts très localisés ou ponctuels, peut-être que DEFI_CONTACT n’est pas l’opérateur adapté ( cf. AFFE_CHAR_MECA/LIAISON_MAIL, etc).

  • Pour les maillages incompatibles, pensez à utiliser la méthode LAC ou à changer votre maillage si c’est possible.

  • Pour les contacts permanents, le mot-clef GLISSIERE peut être utile.

  • En cas d’échec d’intégration de la loi de comportement, vérifier que ce n’est pas dû à un retournement de maille causé par la condition de contact-frottement ( cf. Figure ).

- Un calcul convergé au sens de Newton n’est pas forcément un calcul pertinent. Il appartient au responsable de l’étude de porter un regard critique sur les valeurs obtenues. Du point de vue du contact, il faut surveiller la présence d’oscillations de pressions de contact, contrôler les valeurs de CONT_NOEU/CONT_ELEM. Dans le cas d’un algorithme de pénalisation, il faut absolument regarder les valeurs de pénétration maximale visiblesdans le tableau de convergence. Une étude de convergence enmaillage ou la comparaison de la solution avec un résultat de référence peut être nécessaire pour confirmer la qualité de la solution obtenue.

- Lorsqu’un calcul a du mal à converger sur les statuts en un point de contact(en ALGO_CONT=”STANDARD”), l’algorithme propose automatiquement un basculement en mode de résolution pénalisation sur le point qui a du mal à converger. Le coefficient de pénalisation est choisi de sorte à limiter l’interpénétration et l’algorithme rebascule automatiquement en méthode standard dès que la convergence sur le statut est atteint. Il appartient à l’utilisateur de vérifier à la fin du calcul la qualité du résultat. Si on souhaite débrancher ce mécanisme, il faut utiliser ADAPTATION=”NON”.

_images/1000020100000298000000FF0E5E964DB8BE2FFF.png _images/100002010000041C000002629F05B36241D1EA39.png

Figure 4.1-1: Situation de maille retournée conduisant à l’échec intégration de la loi de comportement

  • Il arrive que le calcul avec contact converge en élasticité mais pose problème avec une non linéarité matériau ou de grandes transformations. Généralement, l’algorithme de résolution non-linéaire a du mal quand la solution calculée à la première itération de Newton (prédiction) est trop loin de la solution réelle. Dans ce cas, une solution est de démarrer le calcul avec un déplacement prédictif proche de la solution finale. Pour ce faire, le plus facile consiste à faire un premier calcul élastique sur un ou deux pas de temps proche de l’instant de non-convergence. Puis d’utiliser le déplacement élastique calculé comme le prédicteur pour le calcul totalement non linéaire: STAT_NON_LINE/NEWTON/PREDICTION = “DEPL_CALCULE”.

  • Utiliser avec beaucoup de prudence REAC_GEOM=”CONTROLE” et vérifier toujours votre résultat (visuellement et le tableau de convergence). Les méthodes adaptatives activées par le mot-clé ADAPTATION aident à la convergence mais ne peuvent rien contre les mauvaises mise en données.

  • Pour les calculs nécessitant la modélisation du frottement. commencer d’abord sans frottement. Activer ALGO_RESO_FROT=”POINT_FIXE” pour limiter les trop fortes variations du seuil de Coulomb.

  • Pour des calculs qui ne tiennent que par le contact, le premier conseil est d’utiliser des ressorts (DIS_T ou 2D_DIS_T, cf. § 4.4 ). Une autre solution est de faire un premier calcul piloté en déplacement pour initialiser le contact puis de continuer le calcul en pilotant en force. C’est le cas de la figure ci-dessous, où on a réalisé un premier pas de temps en déplacement imposé pour mettre le plateau en contact avec la bague puis le calcul a été piloté en déplacement.

_images/10000201000004840000026476CE6DA5FD49239E.png
  • En termes de qualité de la solution, ne pas post-traiter directement les degrés de liberté LAGS_C. Préférer les champs contenus dans CONT_NOEU ou CONT_ELEM voire ceux produits par la commande CALC_PRESSION si le modèle le permet.

  • Pour contrôler la qualité de la solution, toujours vérifier, en méthode STANDARD ou PENALISATION, si les mailles maîtres ne sont pas rentrées dans les mailles esclaves. En effet, en méthode dite Noeud-Segment, la maille maître n’a pas le même rôle que la maille esclave. Seule la maille esclave respecte strictement la loi de non-interpénétration. Dans ce cas, c’est que le maillage est généralement trop grossier. Pensez à le raffiner ( cf. § 2.2 ). Une autre astuce consiste à multiplier le nombre de points de contact esclave si on ne veut pas retravailler le maillage (INTEGRATION=”NCOTES”, ORDRE_INT=6).

  • Pour contrôler la qualité de la solution, vous disposez d’un diagnostic du nombre de liaisons de contact réellement actives à la fin de chaque pas de temps. Cela peut aider à comprendre le mécanisme étudié.

  • Nombre de liaisons de contact : 6

4.2. Post-traitement de CONT_NOEU#

Le champ CONT_NOEU est généré quand on utilise la formulation discrète ou continue (avec INTEGRATION=”AUTO”). Ce champ contient en particulier des quantités vectorielles comme les efforts de glissements (RTGX, RTGY, RTGZ), d’adhérence (RTAX, RTAY, RTAZ), les efforts normaux (RNX, RNY, RNZ). Elles sont toujours exprimées dans le repère global mais on peut utiliser MODI_REPERE pour le changer. Par exemple:

RESU=MODI_REPERE(

RESULTAT = EVOLNOLI,

NUME_ORDRE = 1,

MODI_CHAM = (_F(NOM_CHAM= “CONT_NOEU”,

NOM_CMP =(“RNX”,”RNY”,”RNZ”,),

TYPE_CHAM= “VECT_3D”,),),

REPERE = “UTILISATEUR”,

AFFE = _F(ANGL_NAUT=(45,45,0),),

)

4.3. Récupérer la pression de contact#

4.3.1. présentation de CALC_PRESSION#

En post-traitement d’un calcul de contact, on souhaite généralement accéder aux efforts de contact-frottement. Plus précisément, on souhaite connaître la contrainte normale et tangentielle sur le bord des solides en contact.

La formulation continue du contact donne directement accès à une estimation de pression de contact-frottement, tandis que les formulations discrètes nécessitent de l’approximer par les contraintes sur le bord.

Un exemple de mise en œuvre pour les deux formulations existe dans le cas-test SSNP154 [V6.03.154]. CALC_PRESSION [U4.81.43] fournit un CHAM_GD de pression de contact imprimable au format table par exemple.

La pression de contact s’écrit :

(4.1)#\[\lambda = \transpose{\normal} \tensTwo{\sigma} \normal\]

où \(\normal\) est la normale à la surface de contact en configuration déformée et \(\tensTwo{\sigma}\) le tenseur des contraintes de Cauchy.

Le vecteur tangentiel de l’effort de contact s’écrit :

(4.2)#\[\vector{s} = (\tensTwo{\sigma} - \lambda \tensTwoUnit).\normal\]

L’encadré ci-dessous montre comment on peut calculer la pression nodale de contact en utilisant CALC_PRESSION.

# calcul de la pression de contact: p_appr_F
p_appr_F=CALC_PRESSION(
    MAILLAGE=MESH,
    RESULTAT=RESU,
    GROUP_MA=('Bottom_C','Top_B',),
    INST=1.0,
)

Pour un calcul en grands déplacements, la normale doit être calculée sur la configuration déformée. Pour cela il faut renseigner le mot-clef GEOMETRIE='DEFORMEE'.

Dans l’exemple ci-dessus, on utilise la formule tirée de pour calculer explicitement la pression de contact. Dans le cas particulier où le bord sur lequel on extrait la pression est parallèle aux axes du repère, la pression est directement égale à une des composantes diagonales du tenseur des contraintes de Cauchy (SIXX, SIYY ou SIZZ). À l’heure actuelle, on ne peut pas utiliser CALC_PRESSION s’il y a des éléments de structures dans le modèle.

4.3.2. Cas de la formulation continue#

En formulation continue, le champ DEPL contient une ou plusieurs inconnues supplémentaires:

  • LAGS_C représente la densité surfacique d’effort de contact exprimée sur la configuration de référence.

  • LAGS_F1 et LAGS_F2 représentent les coordonnées d’un vecteur directeur dans le plan tangent. Ce vecteur de norme inférieure ou égale à 1 indique la direction de glissement ou d’adhérence lorsque que l’on prend en compte le frottement.

Ces grandeurs sont définies en tout point de la surface esclave de contact. On peut donc facilement accéder à la pression de contact. On notera cependant qu’en grands déplacements, configuration initiale et finale n’étant plus confondues, le degré de liberté LAGS_Cn’a plus la signification d’une pression.

Pour accéder à la densité surfacique d’effort de frottement (en phase d’adhérence comme de glissement), il faut réaliser un calcul supplémentaire: la norme du vecteur directeur dans le plan tangent donne en effet l’amplitude par rapport au seuil de frottement.

Si on note \(\lambda\) la pression de contact alors la densité d’effort de frottement \(\tau\) s’écrit:

(4.3)#\[\tau =\mu .\lambda .\sqrt{({\mathit{LAGS}}_{\mathit{F1}}^{2}+{\mathit{LAGS}}_{\mathit{F2}}^{2})}\]

En formulation pénalisée (ALGO_CONT=”PENALISATION”), les degrés de liberté de pression continuent d’exister, on peut donc appliquer ce qui précède.

Il arrive parfois que la pression de contact relevée par cette méthode présente des oscillations, en particulier pour des géométries courbes. Dans ce cas, il est préférable d’utiliser CALC_PRESSION qui calcule la pression de contact à partir du tenseur descontraintes de Cauchy.

4.3.3. Formulation discrète#

En formulation discrète, aucun degré de liberté n’est rajouté aux inconnues principales. Le problème de contact étant formulé sur le système discret, les éventuels multiplicateurs de Lagrange utilisés n’ont même pas la dimension d’une pression mais celle de forces nodales.

Cette absence oblige à calculer le tenseur des contraintes de Cauchy sur le bord des surfaces en contact. On a une seule alternative donc: CALC_PRESSION.

4.4. Mouvements de corps rigide bloqués par le contact#

Ce paragraphe ne s’applique qu’aux études en statique. En dynamique, les mouvements de corps rigide sont permis.

Il arrive dans les études que le contact permette de bloquer les mouvements de corps rigide de certains solides (et faire en sorte que ceux-ci se déforment). La non-prise en compte initiale de ce phénomène entraînera donc la singularité de la matrice de rigidité (et donc l’impossibilité de résoudre).

Les formulations discrètes ne sont pas adaptées à une prise en compte initiale du contact, la réalisation d’études avec des solides uniquement tenus par le contact va donc nécessiter dans ce cas un enrichissement de la modélisation.

La formulation continue permet de tenir naturellement compte d’un contact initial et à ce titre est donc bien adaptée à l’étude de mécanismes.

Pour des études en trois dimensions, il existe 6 mouvements de corps rigide possibles: 3 translations, 3 rotations. Pour des études en deux dimensions (modélisations D_PLAN, C_PLAN), il existe 3 mouvements de corps rigide: 2 translations et une rotation. La modélisation axisymétrique (AXIS) est particulière: il n’existe qu’un seul mouvement de corps rigide, la translation suivant l’axe \(\mathit{Oy}\) (axe de la symétrie cylindrique).

Lorsque l’on constate l’existence de mouvements de corps rigide dans sa modélisation, on commencera toujours par vérifier qu’il n’existe pas des symétries dans la structure et son chargement . Les conditions de symétrie permettent en effet de supprimer une grande partie des mouvements de corps rigide.

Un exemple de blocage de mouvements de corps rigide en formulation continue (par CONTACT_INIT) et en formulation discrète (par des ressorts) est disponible dans le cas-test SSNA122 [V6.01.122].

4.4.1. Formulation continue#

En formulation continue, la prise en compte d’un contact initial est assurée zone par zone avec le mot-clé CONTACT_INIT. Par défaut au début d’un calcul toutes les liaisons à jeu nul (ou interpénétrées) sont activées (CONTACT_INIT=”INTERPENETRE”). La tolérance, pour déterminer si un jeu est nul ou interpénétré, est fixée en interne dans le programme à \({10}^{-6}\times {a}_{min}\) où \({a}_{min}\) représente la plus petite arête non nulle du maillage.

Il est possible de désactiver cette activation automatique (CONTACT_INIT=”NON”). Lorsque l’on fait des calculs non-linéaires avec reprise (c’est-à-dire avec le mot-clé ETAT_INIT de STAT_NON_LINE), il est indispensable d’utiliser la valeur par défaut (“INTERPENETRE”) afin d’assurer une reprise à partir du vrai état de contact (et non pas d’un état vierge).

Enfin, si l’on veut coller initialement toutes les surfaces de contact indépendamment du jeu initial, on pourra sélectionner CONTACT_INIT=”OUI” (cela peut être utile si les maillages ne sont pas parfaitement en contact).

Dans tous les cas de figure où un contact initial est déclaré, des efforts seront générés: il ne s’agit pas d’un simple repositionnement géométrique visant à coller les maillages.

L’activation d’un contact initial bloque les mouvements de corps rigide suivant la direction normale à la surface. Si l’on veut prendre en compte un état adhérent initial afin de bloquer la direction tangente, on pourra spécifier un seuil initial de contact non nul via SEUIL_INIT. Ce paramètre renseigne la valeur initiale de la pression de contact (homogène à une densité de force surfacique). Par défaut, si le calcul est issu d’une poursuite alors on reconstruit automatiquement la valeur du seuil initial en utilisant les valeurs de LAGS_C contenus dans ETAT_INIT/STAT_NON_LINE.

Il convient de noter que l’utilisation d’un contact initial en formulation continue permet aussi de s’affranchir de la non-convergence lorsque qu’une structure n’est soumise qu’à des déplacements. Par exemple, lorsque deux solides initialement en contact sont pressés l’un contre l’autre par des déplacements (il s’agit donc d’un mouvement de corps rigide).

4.4.2. Formulation discrète#

En formulation discrète, on est obligé de bloquer manuellement les mouvements de corps rigide du solide incriminé par des ressorts de faible raideur. Par «faible» on entend suffisamment petite pour ne générer que des forces nodales négligeables devant les forces nodales mises en jeu dans le calcul.

Le but des ressorts est de faire en sorte que le calcul sans contact soit capable de tourner en mécanique linéaire (c’est-à-dire dans l’opérateur MECA_STATIQUE ou bien dans STAT_NON_LINE une fois retiré les conditions de contact).

Il existe deux approches pour l’ajout de ressorts:

  • rajouter un ressort de faible raideur en tout point de la structure

  • ajouter des ressorts en des points bien choisis pour bloquer les mouvements de corps rigide de la structure

La première approche a l’avantage de la généricité mais peut parfois trop perturber la solution (quelle que soit la raideur des ressorts). En effet une telle approche revient à ajouter sur tous les termes diagonaux de la matrice un terme positif qui la rend inversible.

La seconde approche ne rajoute des ressorts que là où c’est nécessaire. Lorsqu’il existe des points de la structure qui seront amenés à avoir un déplacement faible (donc à ne générer qu’une force nodale faible dans le ressort), cette approche est plus adaptée.

Pour appliquer un ressort dans Code_Aster , il faut créer des mailles de type POI1 à partir de nœuds. Pour cela on utilise l’opérateur CREA_MAILLAGE/CREA_POI1. Pour utiliser la première approche on choisira de créer ce groupe de mailles sur toute la structure (TOUT=”OUI”), tandis que pour la seconde approche, on indiquera le groupe de nœuds souhaité. Le groupe de mailles nouvellement créé servira à affecter une modélisation de type “DIS_T” ou “2D_DIS_T” dans AFFE_MODELE.

La définition des caractéristiques du ressort s’effectue dans l’opérateur AFFE_CARA_ELEM. Par défaut, les raideurs sont entrées dans le repère global. Si par exemple on souhaite bloquer un mouvement de corps rigide dans une direction parallèle aux axes du repère global, on ne définira une raideur non nulle que suivant cette direction. Ci-dessous un exemple de définition d’une raideur pour un calcul 2D suivant la direction DY.

RESSORT=AFFE_CARA_ELEM(MODELE=model,

DISCRET_2D=_F(CARA=”K_T_D_N”,

GROUP_MA=”SPRING”,

VALE=(0.,1.0e-1,),),);

Dans les cas où la direction à bloquer n’est pas parallèle aux axes, deux alternatives sont possibles:

  • définir une raideur suivant toutes les directions

  • définir la raideur dans un repère local. Il faut alors définir l’orientation de ce repère (mot-clé ORIENTATION de AFFE_CARA_ELEM) ou bien utiliser des ressorts s’appuyant non plus sur des mailles POI1 mais SEG2.

Pour un exemple d’utilisation de ressorts, on consultera le cas-test ZZZZ237 et sa documentation [V1.01.237].

4.5. Grandes déformations, grands déplacements et contact#

La prise en compte de conditions de contact-frottement est totalement découplée de la prise en compte de grands déplacements ou de grandes déformations. Plus généralement, toute non-linéarité quelle soit d’ordre matériau ou géométrique est a priori compatible avec l’utilisation du contact.

En pratique, on constate souvent des difficultés de convergence dans des études mêlant les trois non-linéarités. On donne dans la suite de cette section la démarche à adopter dans ce cas.

Des exemples de calcul mélangeant les trois non-linéarités sont disponibles dans les cas-tests SSNP155 [V6.03.155], SSNP157 [V6.03.157] et SDNV103 [V5.03.103].

Pour la méthode LAC, il est possible d’utiliser TYPE_JACOBIEN=”ACTUALISE” au lieu de “INITIALE” dans le cas de grandes transformations.

4.5.1. Découpler les non-linéarités#

Lorsque qu’un tel calcul échoue, la première démarche est de revenir en arrière: en découplant les non-linéarités et en essayant d’appliquer les bonnes pratiques en non-linéaire ( cf. [U2.04.01]).

Cela signifie:

  • réaliser un calcul élastique en petites perturbations avec le contact activé. Si ce calcul échoue, appliquez les conseils livrés dans la première partie de ce document (orientation des normales, choix des surfaces maîtres et esclaves, choix de l’algorithme de résolution, …)

  • réaliser un calcul avec une loi de comportement non linéaire mais sans contact. Si celui-ci échoue, alors le problème vient de l’intégration du comportement. On se rapportera alors aux documentations [U2.04.02] et [U2.04.03].

  • si nécessaire réaliser un calcul en grands déplacements mais sans contact et sans non-linéarité matériau. Si ce calcul ne fonctionne pas, essayez d’utiliser un autre modèle parmi ceux de grands déplacements disponibles dans Code_Aster (“SIMO_MIEHE”, “GDEF_LOG”, “PETIT_REAC”).

4.5.2. Bien paramétrer l’algorithme de Newton#

Si le calcul complet (mêlant toutes les non-linéarités) ne converge pas malgré l’application des conseils précédents alors on peut essayer de jouer sur les paramètres de l’algorithme de Newton. Cela part du constat suivant:

Lorsque l’on couple contact et non-linéarité matériau par exemple, il est possible (par la correction «brusque» du contact) de déclencher dans la loi de comportement des mécanismes (sortie du domaine élastique, décharge) qui ne devraient pas être actifs dans la solution finale et qui risquent de dégrader la matrice tangente (jusqu’à la rendre non inversible). Cela rend alors toute convergence impossible.

On propose donc d’utiliser les réglages suivants dans l’algorithme de Newton (opérateur STAT_NON_LINE ou DYNA_NON_LINE):

  • réactualisation de la matrice tangente à chaque itération (REAC_ITER=1)

  • utilisation d’une prédiction élastique (PREDICTION=”ELASTIQUE”)

  • en grandes déformations (DEFORMATION=”SIMO_MIEHE”), la matrice tangente est non symétrique, il faut donc bien veiller à renseigner SYME=”NON” dans le mot-clé SOLVEUR.

Lorsque le calcul a encore du mal à converger, il faut revenir à la modélisation:

  • est-ce que mon calcul provoque des problèmes d’incompressibilité? Dans ce cas, consultez les documentations [U2.04.01][U2.04.02] et essayez d’utiliser des éléments finis adaptés (sous-intégrés, à formulation mixte).

  • est-ce que le comportement que j’utilise dispose d’une matrice tangente cohérente? Si ce n’est pas le cas, on peut essayer en dernier recours d’utiliser une matrice “ELASTIQUE” et augmenter le nombre d’itérations de Newton.

  • Cas plasticité+contact+grandes transformations: si la solution initiale est loin de la solution recherchée alors Newton échoue. Dans certains cas, il peut être nécessaire de faire un premier calcul prédictif (contact remplacé par exemple par LIAISON_MAIL) puis d’injecter le résultat issu de ce calcul prédictif dans le calcul que l’on souhaite réaliser.

  • Privilégier le mode tout PENALISATION en réglant la pénétration maximum autorisée est également une alternative: PENE_MAXI.

4.5.3. Résolution d’un problème quasi-statique en dynamique lente#

En dernier recours, pour les problèmes quasi-statiques, réaliser un calcul dynamique en temps long peut apporter une solution. La matrice de masse a pour effet de stabiliser la structure, il faut toutefois s’assurer que les forces d’inertie restent alors faibles devant les forces internes du système.

On conseille pour ce type de modélisation d’affecter à la structure sa vraie masse volumique (c’est de toute manière obligatoire en présence de chargement de pesanteur) et de réaliser le calcul en utilisant de grands pas de temps.

Un exemple de mise en œuvre est disponible dans le cas-test SSNP155 [V6.03.155].

4.6. Surface rigide et contact#

On souhaite parfois modéliser dans les études des solides rigides qui entrent en contact avec des solides déformables. Dans cette section, on explique comment optimiser de telles études.

Afin de ne pas alourdir la modélisation les solides rigides ne seront pas modélisés entièrement: seul leur bord portera des degrés de liberté . Afin de faciliter l’orientation des normales de ce solide rigide le maillage comportera cependant le solide complet.

Après avoir orienté les normales, on affectera donc dans AFFE_MODELE uniquement des éléments de bord à la peau du solide rigide: comme les éléments de bord ne portent pas de rigidité, une alarme est émise pour prévenir du risque de matrice de rigidité non inversible. Cette alarme est normale dans ce cas et peut être ignorée.

Pour empêcher que la matrice de rigidité soit singulière, il faut imposer le déplacement de tous les degrés de liberté portés par le bord rigide . Cela est fait avec les commandes:

  • AFFE_CHAR_CINE/MECA_IMPO dont l’avantage est d’éliminer les inconnues

  • AFFE_CHAR_MECA/DDL_IMPO qui ajoute des inconnues supplémentaires au problème.

On conseille donc d’éliminer les inconnues (AFFE_CHAR_CINE).

La surface rigide sera déclarée comme surface maître dans DEFI_CONTACT comme expliqué au § 2.2.1 .

On pourra se reporter au cas-test SSNV506 [V6.04.506] pour un exemple de contact avec surface rigide.

4.7. Redondance entre conditions de contact-frottement et conditions aux limites (symétrie) : méthodes autre que LAC#

En présence de symétries dans la structure étudiée, il est courant que les conditions de frottement entrent en conflit avec les conditions aux limites de symétrie. La montre l’exemple de deux cubes en contact-frottement, la partie hachurée représente les faces des cubes soumis à une condition de symétrie (DX=0).

Dans cet exemple, l’arête du cube supérieur en trait épais appartient à la surface esclave et porte également la condition de symétrie. Cette condition entre en conflit avec la condition de frottement écrite dans le plan tangent (ici le plan \(\mathit{xOz}\) ). En pratique le calcul s’arrêtera une fois le contact établi car la matrice tangente sera singulière.

Mécaniquement on voit que la condition de symétrie implique que l’adhérence ou bien le glissement ne se produira que suivant la direction DZ (vecteur tangent vert). Pour éliminer la redondance il faut donc exclure la direction de frottement suivant DX (vecteur tangent rouge).

Pour cela on utilisera le mot-clé SANS_GROUP_NO_FR pour désigner la liste de nœuds de l’arête esclave puis on renseignera (dans le repère global) DIRE_EXCL_FROT=(1,0,0) soit la direction DX à exclure.

Le cas-test ZZZZ292 met en œuvre la fonctionnalité SANS_GROUP_NO_FR.

_images/Cadre6.gif

Figure 4.7-1: Élimination de directions de frottement

4.8. Mesurer l’interpénétration sans résoudre le contact : méthodes autre que LAC#

La résolution d’un problème de contact pouvant parfois coûter cher il peut être avantageux de remplacer l’imposition des conditions de contact par une simple vérification de l’interpénétration. C’est d’autant plus intéressant dans les cas où l’on souhaite simplement vérifier que des solides ne vont pas entrer en contact.

Pour chacune des zones de contact définies dans l’opérateur DEFI_CONTACT, il est possible de choisir si on souhaite y faire respecter le contact (RESOLUTION=”OUI”) ou non (RESOLUTION=”NON”).

L’intérêt d’une telle approche est de ne pas alourdir un calcul: lorsque qu’un calcul mené sans résolution sur l’intégralité des zones de contact montre qu’il n’y a pas d’interpénétration alors on peut ignorer la modélisation du contact.

Attention cependant: si au moins une des zones de contact est «résolue» et une autre «non résolue» alors l’existence d’une interpénétration ne préjuge pas de la solution d’un calcul complet avec contact (à cause des interactions possibles entre zones de contact).

Enfin cette technique peut aussi servir à mesurer le taux d’interpénétration au niveau des zones de contact pour calibrer un critère comme le coefficient de pénalisation ou l’interpénétration maximum tolérée dans la méthode de résolution “GCP”.

4.9. Visualiser les résultats d’un calcul de contact#

Lorsque l’on visualise les résultats d’un calcul de contact-frottement dans un logiciel de post-traitement, il faut prendre garde à plusieurs choses:

  • pour l’affichage des déformées, un facteur d’amplification différent de 1 peut conduire à visualiser des interpénétrations non réelles

  • pour les calculs 2D en formulation “CONTINUE”, on fera attention lors de l’affichage de déformées aux logiciels de post-traitement qui considèrent les trois premières composantes d’un champ comme les composantes suivant \(X\) , \(Y\) et \(Z\) du déplacement. En 2D, la troisième composante correspond à LAGS_C et doit donc être ignorée

  • cas méthode standard/pénalisé: lors de la visualisation du champ de post-traitement du contact (CONT_NOEU) et plus particulièrement de la composante CONT qui indique l’état du contact, on fera attention à l’interpolation des champs aux nœuds réalisée parfois automatiquement. En effet cette composante prend les valeurs 0 (pas de contact), 1 (contact adhérent) ou 2 (contact glissant). L’état adhérent n’est possible qu’en présence de frottement: si on visualise une telle valeur pour un calcul de contact sans frottement c’est qu’il y a interpolation du champ.

  • Cas méthode LAC: le champ CONT_ELEM est fourni en post-traitement. Les composantes sont décrits en détail dans la doc U4.44.11page 34.

4.10. Contact ponctuel avec des éléments discrets (ressorts)#

Les éléments discrets (ou ressorts) 2D_DIS_T* ou DIS_T* associés à la loi de comportement DIS_CHOC [R5.03.17] permettent de rendre compte d’un contact ponctuel dans une direction fixée. Ils sont bien adaptés à la modélisation de chocs et sont à ce titre souvent utilisés en dynamique sur base modale [U4.53.21] et en dynamique explicite [U4.53.01].

Les ressorts peuvent s’appuyer indifféremment sur une maille ponctuelle ou un segment. Dans tous les cas, il est nécessaire d’orienter correctement chaque élément avec la commande AFFE_CARA_ELEM [U4.42.01].

Le contact comme le frottement sont résolus par pénalisation (cf. § 3.2.2 ). Les raideurs de pénalisation, le coefficient de frottement ainsi que les jeux initiaux sont précisés dans le matériau DIS_CONTACT (commande DEFI_MATERIAU, [U4.43.01]).

Ce type d’élément n’est pas utilisable en grands déplacements car la direction de contact est fixe et donnée par l’orientation initiale de l’élément discret.

Les cas-tests SSNL130A et SDND100C mettent en œuvre des ressorts de contact.

4.11. Éléments de joints (hydro-)mécaniques avec contact et frottement#

Les éléments de joints (hydro-)mécaniques PLAN_JOINT(_HYME) et 3D_JOINT(_HYME) permettent de modéliser l’ouverture d’une fissure sous la pression d’un fluide et le frottement sur les bords de la fissure fermée avec la loi JOINT_MECA_FROT [R7.01.25]. Il est possible de coupler l’ouverture de la fissure et la propagation du fluide avec les modélisations *_HYME.

La formulation du contact-frottement est pénalisée et les paramètres afférents sont renseignés sous le mot-clé JOINT_MECA_FROT de la commande DEFI_MATERIAU [U4.43.01].

Les cas-tests SSNP142C et SSNP142D fournissent un exemple d’application de tels éléments sur la modélisation d’un barrage.

4.12. Utilisation des méthodes adaptatives#

Cas 1 : Les statuts ont du mal à se stabiliser en formulation continue (tous algorithmes), utiliser ADAPTATION=”CYCLAGE”.

Cas 2 : ALGO_CONT=”STANDARD” échoue et je veux utiliser le mode PENALISATION mais je ne sais pas comment régler le coefficient de pénalisation, utiliser le mode ALGO_CONT=”PENALISATION” et ADAPTATION=”ADAPT_COEF”. Par défaut, il y a un mot-clef qui s’active PENE_MAXI qui est égal à 1.E-2 fois la plus petite arête de maille dans la zone de contact. PENE_MAXI peut être assez facilement estimé par l’utilisateur car il est directement raccordé à la dimension d’une maille de contact.

Cas 3 : si le cas 2 échoue utiliser ADAPTATION=”TOUT”.

Autres cas : si l’on utilise la formulation continue et ALGO_CONT=”STANDARD”/”PENALISATION” alorspar défaut la méthode d’adaptation “CYCLAGE” est active. On conseille, si la convergence le permet, d’utiliser la réactualisation automatique géométrique REAC_GEOM=”AUTOMATIQUE” (paramétrage par défaut).