10  Plaque fissurée en traction

Comportement asymptotique des champs élastiques en pointe de fissure.

Dans cet exercice, on étudie le champ de contrainte et de déplacement au voisinage d’une fissure rectiligne dans une plaque élastique linéaire isotrope de dimensions finies, soumise à une traction uniforme. Ce problème est central en mécanique linéaire de la rupture. La solution analytique de Westergaard (1939) fournit les expressions exactes des champs de contrainte et de déplacement pour une fissure centrée dans un milieu infini.

10.1 Position du problème

On considère une plaque carrée élastique isotrope linéaire de côté \(L\), percée d’une fissure rectiligne de longueur \(2a\) centrée dans la plaque. La plaque est soumise à une contrainte de traction uniforme \(\sigma\) appliquée selon la direction verticale (mode I d’ouverture).

10.1.1 Géométrie et symétries

  • La fissure est alignée avec l’axe horizontal, centrée à l’origine.
  • On exploite les symétries du problème :
    • Symétrie par rapport à l’axe \(x\) (plan de la fissure) → \(u_y = 0\) sur le ligament.
    • Symétrie par rapport à l’axe \(y\) (centre de la fissure) → \(u_x = 0\) sur l’axe de symétrie.
  • On ne modélise que le quart supérieur droit de la plaque.

10.1.2 Hypothèses

  • Élasticité linéaire isotrope.
  • Contraintes planes (plaque mince).
  • Pas de forces volumiques.
import matplotlib.pyplot as plt
import numpy as np

def plot_plaque_fissure(L=10e-3, a=1e-3):
    bg = (40/255, 43/255, 48/255, 1.0)
    fig, ax = plt.subplots(figsize=(8, 8))
    fig.patch.set_facecolor(bg); ax.set_facecolor(bg)
    plaque = plt.Rectangle((0, 0), L, L, facecolor="lightgrey", edgecolor="grey", linewidth=2)
    ax.add_patch(plaque)
    # Axe x
    ax.annotate(
        '',
        xy=(L/3, 0),
        xytext=(0, 0),
        arrowprops=dict(
            arrowstyle='-|>',
            color='grey',
            lw=1.5,
            mutation_scale=20
        )
    )
    
    # Axe y
    ax.annotate(
        '',
        xy=(0, L/3),
        xytext=(0, 0),
        arrowprops=dict(
            arrowstyle='-|>',
            color='grey',
            lw=1.5,
            mutation_scale=20
        )
    )
    ax.plot([0, a], [0, 0], 'r-', linewidth=3)
    ax.text(0.1e-3, -0.5e-3, "lèvre", color='red', fontsize=12)
    ax.plot([a, L], [0, 0], 'g-', linewidth=3)
    ax.text((a+L)/2, -0.3e-3, "ligament", color='green', fontsize=12)
    ax.text(-0.3e-3, -0.3e-3, "A", color='white', fontsize=12, fontweight='bold')
    ax.text(a-0.1e-3, -0.3e-3, "B", color='white', fontsize=12, fontweight='bold')
    ax.text(L-0.3e-3, -0.3e-3, "B'", color='white', fontsize=12, fontweight='bold')
    ax.text(L/3+0.5e-3, -0.5e-3, "x", color='grey', fontsize=14)
    ax.text(-0.5e-3, L/3+0.5e-3, "y", color='grey', fontsize=14)
    ax.text(-1.2e-3, L/2, r"$u_x = 0$", color='lightblue', fontsize=11, rotation=90)
    ax.text(L/2, -1.2e-3, r"$u_y = 0$ (ligament)", color='lightgreen', fontsize=11)
    for xp in [L/4, L/2, 3*L/4]:
        ax.annotate(
            '',
            xy=(xp, L+1.3e-3),      # pointe
            xytext=(xp, L),  # base
            arrowprops=dict(
                arrowstyle='-|>',
                color='dodgerblue',
                lw=1.5,             # épaisseur du corps
                mutation_scale=20   # taille de la tête
            )
        )
    ax.text(L-1e-3, L+0.5e-3, r"$\sigma$", color='dodgerblue', fontsize=14)
    ax.set_xlim(-1.5e-3, L+1.5e-3); ax.set_ylim(-1.5e-3, L+1.5e-3)
    ax.set_aspect("equal"); ax.axis("off")
    plt.tight_layout(); plt.show()
plot_plaque_fissure()

10.2 Solution analytique de Westergaard

10.2.1 Potentiel complexe de Westergaard

Soit \(z = x + iy\) la variable complexe. Westergaard (1939) introduit une fonction potentielle \(Z(z)\) telle que la fonction d’Airy s’exprime par :

\[\Phi(x, y) = \text{Re}\,\bar{\bar{Z}}(z) + y\,\text{Im}\,\bar{Z}(z)\]

\(\bar{Z}\) et \(\bar{\bar{Z}}\) sont les primitives première et seconde de \(Z\), et \(Z' = dZ/dz\). Pour une fissure de longueur \(2a\) dans un milieu infini sous traction uniforme \(\sigma\) (mode I) :

\[Z_I(z) = \frac{\sigma z}{\sqrt{z^2 - a^2}}\]

10.2.2 Champ de contrainte complet

\[\boxed{\begin{aligned} \sigma_{xx} &= \text{Re}\,Z_I - y\,\text{Im}\,Z_I' \\ \sigma_{yy} &= \text{Re}\,Z_I + y\,\text{Im}\,Z_I' \\ \tau_{xy} &= -y\,\text{Re}\,Z_I' \end{aligned}}\]

10.2.3 Champ de déplacement (contraintes planes)

\[\boxed{\begin{aligned} u_x &= \frac{1}{E}\left[(1-\nu)\,\text{Re}\,\bar{Z}_I - y\,(1+\nu)\,\text{Im}\,Z_I\right] \\ u_y &= \frac{1}{E}\left[2\,\text{Im}\,\bar{Z}_I - y\,(1+\nu)\,\text{Re}\,Z_I\right] \end{aligned}}\]

10.2.4 Le long de la lèvre (\(y=0\), \(0 \leq x \leq a\))

\[\boxed{u_y(x) = \frac{2\sigma}{E}\,\sqrt{a^2 - x^2}}, \quad \boxed{\text{COD}(x) = \frac{4\sigma}{E}\,\sqrt{a^2 - x^2}}\]

où COD désigne le Crack Opening Displacement (ouverture de fissure).

10.2.5 Le long du ligament (\(y=0\), \(x \geq a\))

\[\boxed{\sigma_{yy}(x) = \frac{\sigma\,x}{\sqrt{x^2 - a^2}}}\]

Singularité \(\sigma_{yy} \to \infty\) lorsque \(x \to a^+\).

10.3 Facteur d’intensité de contrainte \(K_I\)

Champ asymptotique universel près de la pointe (\(r \ll a\)) :

\[\boxed{K_I = \sigma\sqrt{\pi a}}\]

\[\sigma_{yy}(r) = \frac{K_I}{\sqrt{2\pi r}} \propto \frac{1}{\sqrt{r}}, \qquad u_y(r) = \frac{4K_I}{E}\,\sqrt{\frac{r}{2\pi}} \propto \sqrt{r}\]

\(r = |x - a|\) est la distance à la pointe. La courbe asymptotique \(u_y \propto \sqrt{r}\) et la courbe \(\sigma_{yy} \propto 1/\sqrt{r}\) sont les deux facettes du premier terme du développement de Williams (Williams, 1957). Ce développement en série des champs élastiques en pointe de fissure s’écrit :

\[\sigma_{ij}(r,\theta) = \frac{K_I}{\sqrt{2\pi r}}\,f_{ij}(\theta) + \text{termes réguliers}\]

Le premier terme (\(\propto 1/\sqrt{r}\)) est singulier et universel : il ne dépend de la géométrie qu’à travers le facteur \(K_I\). Les termes suivants sont non singuliers (\(\propto r^0, r^{1/2}, \dots\)) et décrivent l’influence de la géométrie lointaine. Sur les figures, on constate que l’approximation coïncide avec la solution exacte de Westergaard au voisinage immédiat de la pointe (\(r \ll a\)) et s’en écarte loin de celle-ci.

10.4 Applications numériques

Paramètres (identiques au notebook numérique FEniCSx) :

  • Demi-longueur de fissure : \(a = 1\) mm
  • Côté de la plaque : \(L = 10\) mm
  • Module d’Young : \(E = 1\) Pa (unitaire)
  • Coefficient de Poisson : \(\nu = 0.3\)
  • Contrainte appliquée : \(\sigma = 1\) Pa
import matplotlib.pyplot as plt
import numpy as np
from plaque_fissure_params import PlaqueFissureParams

params = PlaqueFissureParams(); a = params.a; E = params.E
sigma = params.sigma_inf; nu = params.nu
bg = (40/255, 43/255, 48/255, 1.0)

x_th = np.linspace(0, a, 200)
uy_cp = (2.0*sigma/E)*np.sqrt(a**2 - x_th**2)
uy_dp = (2.0*sigma*(1-nu**2)/E)*np.sqrt(a**2 - x_th**2)
K_I = sigma*np.sqrt(np.pi*a)
uy_asymp = (4.0*K_I/E)*np.sqrt((a-x_th)/(2.0*np.pi))

fig, ax = plt.subplots(figsize=(9, 6))
fig.patch.set_facecolor(bg); ax.set_facecolor(bg)
ax.plot(x_th*1e3, uy_cp*1e3, '-', color='tab:green', linewidth=2,
        label=r'CP: $u_y=(2\sigma/E)\sqrt{a^2-x^2}$')
ax.plot(x_th*1e3, uy_dp*1e3, '--', color='tab:orange', linewidth=2,
        label=r'DP: $u_y=(2\sigma(1-\nu^2)/E)\sqrt{a^2-x^2}$')
ax.plot(x_th*1e3, uy_asymp*1e3, ':', color='tab:red', linewidth=1.5,
        label=r'Asymptotique: $u_y\propto\sqrt{a-x}$')
ax.axvline(a*1e3, color='white', ls='--', lw=0.8, alpha=0.5)
ax.set_xlabel('$x$ (mm)', fontsize=14, color='grey')
ax.set_ylabel('$u_y$ (mm)', fontsize=14, color='grey')
ax.set_title('Déplacement $u_y$ le long de la lèvre', fontsize=14, color='grey')
ax.legend(fontsize=11, loc='upper left')
ax.grid(True, alpha=0.3); ax.tick_params(colors='grey')
for sp in ax.spines.values(): sp.set_color('grey')
plt.tight_layout(); plt.show()

import matplotlib.pyplot as plt
import numpy as np
from plaque_fissure_params import PlaqueFissureParams

params = PlaqueFissureParams(); a = params.a; L = params.L; sigma = params.sigma_inf
bg = (40/255, 43/255, 48/255, 1.0)
K_I = sigma*np.sqrt(np.pi*a)
x_lig = np.linspace(a+1e-6, L, 500)
syy_th = sigma*x_lig/np.sqrt(x_lig**2 - a**2)
syy_asymp = K_I/np.sqrt(2*np.pi*(x_lig-a))

fig, axes = plt.subplots(1, 2, figsize=(14, 5))
fig.patch.set_facecolor(bg)
for ax, log in zip(axes, [False, True]):
    ax.set_facecolor(bg)
    ax.plot(x_lig*1e3, syy_th, '-', color='tab:green', linewidth=2,
            label=r'$\sigma_{yy}=\sigma x/\sqrt{x^2-a^2}$')
    ax.plot(x_lig*1e3, syy_asymp, ':', color='tab:red', linewidth=1.5,
            label=r'Williams (1er terme): $\propto 1/\sqrt{r}$')
    ax.axvline(a*1e3, color='white', ls='--', lw=0.8, alpha=0.5)
    if log:
        ax.set_yscale('log'); ax.set_ylabel('$\\sigma_{yy}$ (Pa, log)', fontsize=13, color='grey')
    else:
        ax.set_ylabel('$\\sigma_{yy}$ (Pa)', fontsize=14, color='grey')
    ax.set_xlabel('$x$ (mm)', fontsize=14, color='grey')
    ax.set_title('$\\sigma_{yy}$ dans le ligament', fontsize=14, color='grey')
    ax.legend(fontsize=11); ax.grid(True, alpha=0.3)
    ax.tick_params(colors='grey')
    for sp in ax.spines.values(): sp.set_color('grey')
plt.tight_layout(); plt.show()

10.5 Résumé des grandeurs clés

Grandeur Formule Valeur numérique
\(K_I\) (milieu infini) \(\sigma\sqrt{\pi a}\) 5.6050e-02 Pa\(\cdot\) \(m^{1/2}\)
\(u_y(0)\) CP \(2\sigma a/E\) 2.0000e-03 m
\(u_y(0)\) DP \(2\sigma a(1-\nu^2)/E\) 1.8200e-03 m
\(\sigma_{yy}(a+\delta)\), \(\delta=10^{-4}\)m \(\sigma x/\sqrt{x^2-a^2}\) 2.4004 Pa
Rapport CP/DP \(1/(1-\nu^2)\) 1.0989

10.5.1 Comparaison trou circulaire / fissure

Problème Contrainte max Nature
Trou (Kirsch) \(3\sigma\) Finie (concentration)
Fissure (Westergaard) \(\to \infty\) Singulière (rupture)

Cette différence justifie l’utilisation de la mécanique linéaire de la rupture (\(K_I\), intégrale \(J\)) pour les fissures.

10.6 Conclusion

Dans cette étude théorique, nous avons :

  • Rappelé la solution de Westergaard pour une fissure centré en mode I.
  • Exprimé les champs de contrainte et de déplacement dans le plan.
  • Calculé les profils de \(u_y\) sur la lèvre et \(\sigma_{{yy}}\) dans le ligament.
  • Introduit le facteur d’intensité de contrainte \(K_I = \sigma\sqrt{{\pi a}}\).
  • Mis en évidence la singularité \(\sigma_{{yy}} \propto 1/\sqrt{{r}}\) en pointe.
  • Comparé les formulations contraintes planes / déformations planes.

Ces résultats théoriques servent de référence pour la validation du calcul par éléments finis (FEniCSx) présenté dans le notebook associé.