6. Algorithmic resolution — Contact with friction#

6.1. Friction bonds#

We add two sets compared to those defined in § 5.1 to take into account the friction status of a slave node:

  • \({\Xi }^{\text{a}}\) is the set of adherent contact nodes;

  • \({\Xi }^{\text{g}}\) is the set of sliding contact nodes.

We therefore have the following relationships between the sets:

  • \({\Xi }^{\text{c}}\mathrm{=}{\Xi }^{\text{a}}\mathrm{\oplus }{\Xi }^{\text{g}}\) because the knots in contact are either slippery or sticky;

  • \({\Xi }^{\text{a}}\mathrm{\subseteq }{\Xi }^{\text{c}}\) and \({\Xi }^{\text{g}}\mathrm{\subseteq }{\Xi }^{\text{c}}\) because only the knots in contact can be sticky or slippery.

6.2. Cinematics and tangent play#

We saw in § 4.3.1 that friction uses kinematic quantities similar to the case of contact alone, by introducing the concept of « tangent » play \(\left\{{\tilde{g}}^{\text{t},n}\right\}\) (relative sliding of surfaces in the case of non-adhesion), this tangent game is defined by:

\[\]

: label: eq-141

left{{tilde {g}}} ^ {text {t}}, n}right}mathrm {=}left [{A} ^ {text {f}}}right]mathrm {.} (left{Delta {u} _ {i}} ^ {nmathrm {-} 1}right} +left{delta {tilde {u}}} ^ {n}right})

The friction matrix \(\left[{A}^{\text{f}}\right]\) is used (see § 3.5.2). The use of the quantity \(\left\{\delta {\tilde{u}}^{n}\right\}\) in place of \(\left\{\delta {u}^{n}\right\}\) is justified because we solve a Tresca problem, so without modifying the game during the process of solving the sliding problem (see § 4.3.4).

Note:

  • In the algorithms presented in the rest of the document, no distinction is generally made between the sliding part and the adherent part of the nodes at the writing level, to simplify the notations.

6.3. The method penalized in contact and friction#

6.3.1. Balance of the structure in the presence of contact#

Recall that the equilibrium equation in the presence of contact is written as:

\[\]

: label: eq-142

left{{L} _ {i} ^ {text {int}} ^ {text {int}}} ({u} _ {i})right} =left{{L} _ {i} ^ {i} ^ {text {ext}}} ({u} _ {i}} ^ {text {ext}}} {ext}}} ({u} _ {i}})right}

In the case of penalized contact, the contact force is written as:

(6.1)#\[ \ left\ {{L} _ {i} ^ {\ text {c}} {\ text {c}}}\ right\} = {\ left\ {{L} _ {i} ^ {\ text {c}, n}\ right\}} ^ {\ right\}} ^ {\ right\}} ^ {\ text {c}} ^ {\ text {c}, n}\ right\}} ^ {\ text {c}, n}\ right\}}\ right\}}} _ {\ text {c}, n}\ right\}}}\ right\ [{A} ^ {\ text {c}}} {]} {]} ^ {T}\ mathrm {.} \ left (\ left [{A} ^ {\ text {c}}}\ right]\ mathrm {.} \ left\ {\ delta {u} ^ {n}\ right\} -\ left\ {{d} ^ {\ text {c}, n-1}\ right\}\ right)\]

After linearization of the equilibrium equation (), we introduce the tangent matrix \(\left[{K}^{\text{m},n\mathrm{-}1}\right]\) which will contain the contributions resulting from the linearization of internal and external forces and the matrix \(\left[{K}^{\text{c},n\mathrm{-}1}\right]\) for contact forces:

\[\]

: label: eq-144

[{K} _ {i} ^ {text {c}, n-1}] = {E} _ {Nmathrm {.}} [{A} ^ {text {c}, n-1} {]} {]} ^ {Tmathrm {.}} [{A} ^ {text {c}, n-1}]

The second member is equal to:

\[\]

: label: eq-145

left{{L} _ {i} ^ {text {c}, n-1}right} =- {E} _ {Nmathrm {.}} [{A} ^ {text {c}, n-1} {]} {]} ^ {Tmathrm {.}} left{{d} ^ {text {c}, n-1}right}

Regarding the algorithm, we saw in § 4.3.6.2 that it acts to correct the non-contact balance problem.

When we’re in the contact algorithm, at Newton iteration \(n\), we’re evaluating \(\left[{K}_{i}^{\text{c},n+1}\right]\) and \(\left\{{L}_{i}^{\text{c},n}\right\}\), which won’t be used until the next Newton iteration. There is a time lag of one iteration: you necessarily need at least two Newton iterations to solve a problem with penalized contact.

6.3.2. Algorithm#

This method is the easiest to implement. We saw in § 4.3.5.1 that the regularization of contact conditions adds two new contributions:

  • \(\left[{K}_{i}^{\text{c}}\right]\) for the global tangent matrix;

  • \(\left\{{L}_{i}^{\text{c}}\right\}\) for the second member.

For friction, the same is true for adhesion conditions (§ 4.3.5.2):

  • \(\left[{K}_{i}^{\text{a}}\right]\) for the global tangent matrix;

  • \(\left\{{L}_{i}^{\text{a}}\right\}\) for the second member.

But also for sliding conditions (§ 4.3.5.3):

  • \(\left[{\tilde{K}}_{\theta }^{\text{g}}\right]\) for the global tangent matrix;

  • \(\left\{{L}_{i}^{\text{g}}\right\}\) for the second member.

Regarding the algorithm, we saw in § 4.3.6.2 that it acts to correct the balance problem without contact/friction. When we are in the touch/friction algorithm, at Newton iteration \(n\), we evaluate the quantities imposing the touch/friction conditions that will be used only at the next Newton iteration. This gives us the following algorithm, with \(n\) the Newton iteration:

\(\mathit{Ini}\)

Calculating \({⌊\left\{{\tilde{d}}^{\text{c},n}\right\}⌋}_{{\Xi }^{\text{l}}}\) and \({⌊\left\{{\tilde{g}}^{\text{t},n}\right\}⌋}_{{\Xi }^{\text{l}}}\)

Rating of \({\Xi }^{\text{c}}\mathrm{=}\left\{J\mathrm{\in }{\Xi }^{\text{l}}\mathrm{\mid }{⌊\left\{{\tilde{d}}^{\text{c},n}\right\}⌋}_{J}<0\right\}\)

Contact pressures \({\lfloor \left\{{\mu }^{\text{c},n}\right\}\rfloor }_{{\mathrm{\Xi }}^{\text{c}}}=-{E}_{N\mathrm{.}}{\lfloor \left\{{\stackrel{~}{d}}^{\text{c},n}\right\}\rfloor }_{{\mathrm{\Xi }}^{\text{c}}}\)

Second member \(\left\{{L}_{i}^{\text{c},n}\right\}={\left[{A}^{\text{c},n}\right]}^{T\mathrm{.}}{\lfloor \left\{{\mu }^{\text{c},n}\right\}\rfloor }_{{\mathrm{\Xi }}^{\text{c}}}\)

If \({\mathrm{\Xi }}^{\text{c}}\ne \mathrm{\varnothing }\)

Contact matrix \(\left[{K}^{\text{c},n+1}\right]={E}_{N\mathrm{.}}{\left[{A}^{\text{c},n}\right]}^{T\mathrm{.}}\left[{A}^{\text{c},n}\right]\)

Calculating the slip norm \({\lfloor \Vert \left\{{\stackrel{~}{g}}^{\text{t},n}\right\}\Vert \rfloor }_{{\mathrm{\Xi }}^{\text{c}}}\)

Calculating \({\lfloor \left\{{\lambda }^{\text{f}}\right\}\rfloor }_{{\mathrm{\Xi }}^{\text{c}}}=\mathit{max}\left(0,\mu \mathrm{.}{\lfloor \left\{{\mu }^{\text{c},n}\right\}\rfloor }_{{\mathrm{\Xi }}^{\text{c}}}\right)\)

Calculating \({\lfloor \left\{a\right\}\rfloor }_{{\mathrm{\Xi }}^{\text{c}}}={\lfloor \left(\Vert \left\{{\stackrel{~}{g}}^{\text{t},n}\right\}\Vert -\frac{1}{{E}_{T}}\mathrm{.}\left\{{\lambda }^{\text{f}}\right\}\right)\rfloor }_{{\mathrm{\Xi }}^{\text{c}}}\)

Rating of:math: {mathrm {Xi}}} ^ {text {a}}} =left{Jin {mathrm {Xi}} ^ {text {c}}} | {lfloor {c}}} | {lfloorleftleft{left{aright}}} | {lfloorleft{aright}}} | {lfloorleft{aright}}rfloor} _ {J}le 0right}}

Rating of:math: {mathrm {Xi}}} ^ {text {g}}} =left{Jin {mathrm {Xi}} ^ {text {c}}} | {lfloor {c}}} | {lfloor}} | {lfloor}} | {lfloorleftleft{aright}}} | {lfloorleft{aright}}rfloor} _ {J} >0right}

For \({⌊\left\{{\mu }^{\text{f},n}\right\}⌋}_{J\mathrm{\in }{\Xi }^{\text{a}}}\mathrm{=}\sqrt{{E}_{T}}\) adherent knots

For slippery knots \({⌊\left\{{\mu }^{\text{f},n}\right\}⌋}_{J\mathrm{\in }{\Xi }^{\text{g}}}\mathrm{=}\sqrt{\frac{{⌊\left\{{\lambda }^{\text{f}}\right\}⌋}_{J}}{{⌊∥\left\{{\tilde{g}}^{\text{t},n}\right\}∥⌋}_{J}}}\)

Vector calculation \({⌊\left\{v\right\}⌋}_{{\Xi }^{\text{c}}}\mathrm{=}{⌊{\left[{A}^{\text{f},n}\right]}^{T}\mathrm{.}\left\{{\mu }^{\text{f},n}\right\}⌋}_{{\Xi }^{\text{c}}}\) and \({⌊\left\{v\right\}⌋}_{{\Xi }^{\text{nc}}}\mathrm{=}0\)

Calculation first part friction matrix \(\left[{K}^{{\text{f}}_{1}}\right]\mathrm{=}\left\{v\right\}\mathrm{.}\langle v\rangle\)

Calculation of the second member of friction \(\left\{{L}_{i}^{\text{f},n}\right\}\mathrm{=}\left[{K}^{{\text{f}}_{1}}\right]\mathrm{.}(\left\{\Delta {u}_{i}^{n\mathrm{-}1}\right\}+\left\{\delta {\tilde{u}}^{n}\right\})\)

Calculating the slip norm \({⌊∥\left\{{\tilde{g}}^{\text{t},n}\right\}∥⌋}_{{\Xi }^{\text{c}}}\)

Calculating \({⌊\left\{{\lambda }^{\text{f}}\right\}⌋}_{{\Xi }^{\text{c}}}\mathrm{=}\mathit{max}(0,\mu \mathrm{.}{⌊\left\{{\mu }^{\text{c},n}\right\}⌋}_{{\Xi }^{\text{c}}})\)

Calculating \({⌊\left\{a\right\}⌋}_{{\Xi }^{\text{c}}}\mathrm{=}{⌊(∥\left\{{\tilde{g}}^{\text{t},n}\right\}∥\mathrm{-}\frac{1}{{E}_{T}}\mathrm{.}\left\{{\lambda }^{\text{f}}\right\})⌋}_{{\Xi }^{\text{c}}}\)

Rating of \({\Xi }^{\text{a}}\mathrm{=}\left\{J\mathrm{\in }{\Xi }^{\text{c}}\mathrm{\mid }{⌊\left\{a\right\}⌋}_{J}\mathrm{\le }0\right\}\)

Rating of \({\Xi }^{\text{g}}\mathrm{=}\left\{J\mathrm{\in }{\Xi }^{\text{c}}\mathrm{\mid }{⌊\left\{a\right\}⌋}_{J}>0\right\}\)

For \({\beta }_{J\mathrm{\in }{\Xi }^{\text{a}}}\mathrm{=}0\) adherent knots

For slippery knots \({\beta }_{J\mathrm{\in }{\Xi }^{\text{c}}}\mathrm{=}\sqrt{\frac{1}{{⌊\left\{{\lambda }^{\text{f}}\right\}\mathrm{.}∥\left\{{\tilde{g}}^{\text{t},n}\right\}∥⌋}_{J\mathrm{\in }{\Xi }^{\text{c}}}}}\)

Choice of \(\theta\)

Vector calculation \({⌊\left\{w\right\}⌋}_{{\Xi }^{\text{c}}}\mathrm{=}\sqrt{\theta }\mathrm{.}{⌊{\beta }_{J\mathrm{\in }{\Xi }^{\text{c}}}\mathrm{.}\left[{A}^{\text{f},n}\right]\mathrm{.}\left\{{L}_{i}^{\text{f},n}\right\}⌋}_{{\Xi }^{\text{c}}}\) and \({⌊\left\{w\right\}⌋}_{{\Xi }^{\text{nc}}}\mathrm{=}0\)

Calculation second part friction matrix \(\left[{K}^{{\text{f}}_{2}}\right]\mathrm{=}\left\{w\right\}\mathrm{.}\langle w\rangle\)

Resulting matrix \(\left[{K}^{\text{f}}\right]\mathrm{=}\left[{K}^{{\text{f}}_{1}}\right]\mathrm{-}\left[{K}^{{\text{f}}_{2}}\right]\)

We use a lot of calculation tricks in this algorithm. We give a value different from \(\left\{{\mu }^{\text{f}}\right\}\) for grip and slip but we use the same vector \(\left\{v\right\}\), which makes it possible to find the two matrices (slip and grip). In fact, for adherence, we have:

(6.2)#\[ {\ left [{K} ^ {{\ text {f}}} _ {1}} _ {1}}\ right]} _ {{\ xi} ^ {\ text {a}}}\ mathrm {=}}\ mathrm {=}\}\ left\ left\ {v\ right\}\ mathrm {.} \ langle v\ rangle\ mathrm {=} {=} {\ left [{A} ^ {\ text {f}}\ right]} ^ {T}\ mathrm {.} \ sqrt {{E} _ {T}}\ mathrm {.} \ sqrt {{E} _ {T}}\ mathrm {.} \ left [{A} ^ {\ text {f}}\ right]\]

We therefore find the expression for the adhesion matrix () for the nodes adherent:

\[\]

: label: eq-147

{left [{K} ^ {{text {f}}} _ {1}} _ {1}}right]} _ {{xi} ^ {text {a}}}mathrm {=}mathrm {=}}mathrm {=}}mathrm {=}}mathrm {=} {E}mathrm {=}}mathrm {=}}mathrm {=} {E}mathrm {[}}mathrm {=}}mathrm {=}}mathrm {=}}mathrm {=}}mathrm {=}}mathrm {=}}mathrm {=}}mathrm {=}}mathrm m {.} mathrm {[} {A} ^ {text {a}} {mathrm {]}}} ^ {T}mathrm {.} mathrm {[} {A} ^ {text {a}}mathrm {]}

For sliding:

\[\]

: label: eq-148

{left [{K} ^ {{text {f}}} _ {1}} _ {1}}right]} _ {{xi} ^ {text {g}}}mathrm {=}}mathrm {=}}leftleft{vright}mathrm {.} langle vranglemathrm {=} {=} {left [{A} ^ {text {f}}right]} ^ {T}mathrm {.} sqrt {frac {left{{lambda} ^ {{lambda}} ^ {text {f}}}right}} {left{tilde {g}}} ^ {text {t}, n}right{lambda}} ^ {text {t}, n}righttext {t}, n}righttext {t}, n}righttext {t}, n}right} sqrt {frac {langle {lambda} ^ {text {lambda}} ^ {text {lambda}} ^ {text {t}, n}right} {text {t}, n}right}}righttext {lambda} ^ {text {t}, n}righttext {lambda}, n}righttext {lambda} ^ {text {t}, n}right}}righttext {t}, n}right} left [{A} ^ {text {f}}right]

We find the expression for the first part of the sliding matrix () for the nodes sliding:

\[\]

: label: eq-149

{left [{K} ^ {{text {f}}} _ {1}} _ {1}}right]} _ {{Xi} ^ {text {g}}}mathrm {=}frac {{text {f}}}}frac {{text {f}}}frac {{\ text {f}}}frac {{left [{left [{A}} ^ {A}} ^ {xi} ^ {T}}mathrm {=}frac {{left {\ left [{left [{A}} ^ {A}} ^ {T}mathrm {.} left [{k} ^ {text {g}, n}, n}right]} {left{{g} ^ {text {t}, n}right}, n}right}

With the Tresca threshold matrix:

(6.3)#\[ \ left [{k} ^ {\ text {g}}}\ right]\ right]\ mathrm {=}\ left\ {{\ lambda} ^ {\ text {f}}\ right\}\ right\}\ right\}\ right\}\ mathrm {.} \ langle {\ lambda} ^ {\ text {f}}\ rangle\]

To find the second part of the sliding matrix, we use the expression d u vector \(\left\{w\right\}\):

\[\]

: label: eq-151

left{wright}mathrm {=}sqrt {theta}mathrm {.} betamathrm {.} left [{A} ^ {text {f}}}right]mathrm {.} left [{K} ^ {{text {f}}} _ {1}}right]mathrm {.} (left{Delta {u} _ {i}} ^ {nmathrm {-} 1}right} +left{delta {tilde {u}}} ^ {n}right})

With the expression of the matrix \({⌊\left[{K}^{{\text{f}}_{1}}\right]⌋}_{{\Xi }^{\text{g}}}\) in () and the definition of tangential sliding in (), the (tensor) product of \(\left\{w\right\}\) by itself makes it possible to find the second part of the sliding matrix () for the sliding nodes:

(6.4)#\[ {\ left [{K} ^ {{\ text {f}}} _ {2}} _ {2}}\ right]} _ {{\ xi} ^ {\ text {g}}}\ mathrm {=}}\ mathrm {=}\}\ left\ {w\ right\}\ mathrm {.} \ langle w\ rangle\ mathrm {=}\ theta\ mathrm {.} \ frac {{\ left [{A} ^ {\ text {g}}\ right]} ^ {T}\ mathrm {.} \ left [{k} ^ {\ text {g}, n}, n}\ right]} {\ left\ {{g} ^ {\ text {t}, n}\ right\}, n}\ right\} \ frac {\ left\ {{g} ^ {\ text {t}, n}\ right\}\ langle {g} ^ {\ text {t}, n}\ rangle} {{\ left\ {{g}} {{g} ^ {\ text {g}} ^ {{g}} ^ {{g}} ^ {{g}} ^ {{g}} ^ {{g}} ^ {{g} ^ {{g}} ^ {{g}} ^ {{g}} ^ {{g}} ^ {{g}} ^ {{g}} ^ {{g}} ^ {{g}} ^ {\]

We used the product (), which explains the \(\beta\) multiplier used in the \(\left\{w\right\}\) vector.

Notes:

  • The modification of the system does not introduce new variables in relation to the non-touch/friction problem;

  • There is no \(k\) clue in the various quantities (in particular the set of active links or the touch/friction matrices) because it is not an iterative algorithm;

  • For the choice of \(\theta\), the user chooses it (parameter COEF_MATR_FROT), but this coefficient is set to zero as long as the equilibrium residue (RESI_GLOB_RELA) is less than \({10}^{\mathrm{-}3}\);