\[\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}}\]

3. Discrétisation#

3.1. Options calculées#

Des éléments finis de peau (éléments surfaciques plongés dans un espace tridimensionnel) sont employés pour discrétiser les déplacements réels et virtuels intervenant dans des expressions surfaciques telles que (2.5) et (2.16). Ces dernières permettent d’exprimer respectivement le vecteur second membre et la matrice de rigidité dus à la pression, dont l’emploi par l’algorithme de STAT_NON_LINE est précisé en [R5.03.01]

On développe donc quatre options:

  1. RIGI_MECA_PRSU_R : matrice de rigidité pour une pression suiveuse comme constante réelle

  2. RIGI_MECA_PRSU_F : matrice de rigidité pour une pression suiveuse comme fonction réelle

  3. CHAR_MECA_PRSU_R : vecteur second membre pour une pression suiveuse comme constante réelle

  4. CHAR_MECA_PRSU_F : vecteur second membre pour une pression suiveuse comme fonction réelle

Ces options sont développées pour les éléments 3D, D_PLAN et AXIS. On peut appliquer une pression suiveuse normale mais pas de cisaillement tangent suiveur. La pression peut être une fonction réelle du temps ou une constante réelle.

3.2. Discrétisation des termes de géométrie différentielle#

On note \(\discVect{G_{\alpha}}\) la version discrétisée des vecteurs de la base covariante avec \({\alpha={1,2}}\).` Les deux premiers vecteurs de la base covariante \(\discVect{G_{\alpha={1,2}}}\) se calcule à partir du vecteur des déplacements discrétisés aux noeuds \(\discVect{U}\) et des dérivées des fonctions de forme \(\discMatr{B_{\alpha}}\) :

(3.1)#\[\discVect{G_{\alpha}} = \discMatr{B_{\alpha}} \, \discVect{U}\]

La normale \(\normal\) est calculée comme le produit vectoriel de ces deux premiers vecteurs \(\vector{g_{\alpha}}\) :

(3.2)#\[\normal = \frac{{\vector{g}}_{1} {\wedge } {\vector{g}}_{2}}{\Vert {\vector{g}}_{1} {\wedge }{\vector{g}}_{2}\Vert}\]

On peut aussi calculer le tenseur métrique discrétisé en composantes covariantes \(\discMatr{G_{\alpha \beta}}\) :

(3.3)#\[\discMatr{G_{\alpha \beta}} = \discVect{G_\alpha} \discVectLigne{{G}_{\beta}}\]

Et son jacobien:

(3.4)#\[\jacobTransfor = \det \discMatr{G_{\alpha \beta}}\]

On peut calculer la matrice métrique contravariante qu’on notera \(\discMatr{G^{\delta \gamma}}\)

(3.5)#\[\discMatr{G^{\delta \gamma}} = \inverse{\discMatr{ G_{\alpha \beta}}}\]

Et finalement extraire la base contravariante \(\discVectCmp{G}{\delta}\) :

(3.6)#\[\discVect{G^\delta} = \discMatr{G^{\delta \gamma}} \, \discVect{G_\alpha}\]

3.3. Vecteur des forces suiveuses#

Le calcul du travail virtuel des efforts de pression (2.5) est en fait identique à celui effectué en petits déplacements, moyennant une réactualisation préalable de la géométrie. On part de l’expression des travaux virtuels:

(3.7)#\[\work{\pres}(\disp) = {\int}_{\boundNCurr(\disp)} {-\pres \, \normalCurr \cdot \dispVirt \measBound }\]

Sous forme discrétisée:

(3.8)#\[\work{\pres}(\disp) = \discVectLigne{\delta V} \discVect{{F}^{\pres}\left(\disp\right)}\]

La variation des déplacements s’écrit à partir des fonctions de forme:

(3.9)#\[\dispVirt = \discMatr{ \shapeFunc } \, \left\lbrace \delta V\right\rbrace\]

On a discrétisé tous les termes de géométrie différentielle dans le paragraphe précédent, il ne nous reste plus qu’à discrétiser l’intégrale en utilisant un schéma de Gauss avec les poids \(\quadWeight{\quadPointIndex}\). Sur une quantité quelconque \(A\), on aura

(3.10)#\[{\int}_{\boundNCurr(\disp)} {A \measBound } = \sum_{\quadPointIndex} {\onQuadPoint{A}{\quadPointIndex} \, \quadWeight{\quadPointIndex} }\]

La pression \(\pres\) donnée par AFFE_CHAR_MECA est localisée aux nœuds, on doit donc interpoler la pression \(\pres\) à partir de ses valeurs sur les nœuds qu’on note \(\onNode{\pres}{\nodeIndex}\) vers le point de Gauss de coordonnées \(\onQuadPoint{\xi}{\quadPointIndex}\) :

(3.11)#\[\onQuadPoint{\pres}{\quadPointIndex} = \sum_{\nodeIndex}{\onNode{\shapeFunc(\onQuadPoint{\xi}{\quadPointIndex})}{\nodeIndex} \, \onNode{\pres}{\nodeIndex} }\]

On note \(\onNode{\shapeFunc(\onQuadPoint{\xi}{\quadPointIndex})}{\nodeIndex}\) la valeur de la fonction de forme du noeud \(\nodeIndex\) au point de gauss de coordonnées \(\onQuadPoint{\xi}{\quadPointIndex}\). Finalement:

(3.12)#\[\discVect{{F}^{\pres}\left(\disp\right)} = - \sum_{{\quadPointIndex}}{ \onQuadPoint{\pres}{\quadPointIndex} \, \quadWeight{\quadPointIndex} \, \onQuadPoint{\jacobTransfor}{\quadPointIndex} \, \transpose{\discMatr{\onQuadPoint{ \shapeFunc} {\quadPointIndex} }} \, \discVect{\onQuadPoint{\normal} {\quadPointIndex} } }\]

3.4. Matrice des forces suiveuses#

La variation du travail virtuel des efforts de pression est exprimée par l’expression (2.16)

(3.13)#\[\frac{\partial \work{\pres}(\disp)}{\partial \disp}\cdot\delta \disp\cdot\dispVirt = {\int}_{\boundNCurr(\disp)} { -\presCurr \, \left[ \left( \frac{\partial \delta \disp}{\partial {\theta}^{\alpha}} \cdot \vectorBaseCT{\alpha} \right) \, \left(\dispVirt \cdot \normal \right) - \left( \frac{\partial \delta \disp}{\partial {\theta}^{\alpha}} \cdot \normal \right) \, \left( \dispVirt \cdot \vectorBaseCT{\alpha} \right) \right] \measBound}\]

Il permet d’extraire la matrice tangente \(\discMatr{{K}^{\pres}\left(\disp\right)}\) des forces suiveuses:

(3.14)#\[\frac{\partial \work{\pres}(\disp)}{\partial \disp}\cdot\delta \disp\cdot\dispVirt = \discVectLigne{\delta V} \discMatr{{-K}^{\pres}\left(\disp\right)} \discVect{\delta U}\]

Le signe moins vient du fait que la contribution de la matrice est au premier membre.

Finalement:

(3.15)#\[\discMatr{{K}^{\pres}\left(\disp\right)} = \sum_{{\quadPointIndex}}{ \onQuadPoint{\pres}{\quadPointIndex} \, \quadWeight{\quadPointIndex} \, \onQuadPoint{\jacobTransfor}{\quadPointIndex} \, \transpose{\discMatr{\onQuadPoint{ \shapeDFunc} {\quadPointIndex} }} \left( \discVect{\onQuadPoint{G^\delta}{\quadPointIndex} } \, \discVectLigne{\onQuadPoint{\normal} {\quadPointIndex} } - \discVect{\onQuadPoint{\normal} {\quadPointIndex} } \, \discVectLigne{\onQuadPoint{G^\delta}{\quadPointIndex} } \right ) \, {\discMatr{\onQuadPoint{ \shapeFunc} {\quadPointIndex} }} }\]

avec \(\discMatr{\onQuadPoint{ \shapeDFunc} {\quadPointIndex} }\) la matrice des dérivées des fonctions de forme.

3.5. Choix de la matrice#

En général, la matrice \(\discMatr{{K}^{\pres}\left(\disp\right)}\) n’est pas symétrique (sauf cas particulier d’une structure soumise à une pression interne ou externe constante). On constate également en pratique, que pour de fortes variations de la géométrie (en utilisant un comportement hyper-élastique en grandes déformations comme ELAS_HYPER), le fait de symétriser cette matrice n’est pas une bonne stratégie (échec de la convergence). On décide donc de garder cette matrice non-symétrique, malgré le (léger) surcoût induit par la factorisation d’une telle matrice.