21  Application numérique — Poutre ou arc ?

Résolution par éléments finis (FEniCSx, contraintes planes) de la planche droite puis de l’arc de cercle de cambrure \(c\). On fait varier \(c\) de \(0\) à \(50\) cm (pas de \(5\) mm jusqu’à \(10\) cm, puis \(25\) mm), on extrait pour chaque cas la flèche au sommet (max \(|u_y|\)) et les sollicitations maximales (effort normal, effort tranchant, moment fléchissant) par équilibre à partir des réactions d’appui, puis on trace les évolutions en fonction de \(c\).

L=5.0 m, h=0.05 m, a=0.25 m, E=1.0e+10 Pa, nu=0.25, P=981.0 N
I = 2.604e-06 m4  => f_poutre (Euler-Bernoulli) = 98.10 mm

21.1 Générateur de géométrie (maillage structuré)

La géométrie est construite à chaque itération de \(c\) : - \(c = 0\) : poutre droite rectangulaire \(L \times h\) ; - \(c > 0\) : arc de cercle passant par \(A\), \(C(L/2,c)\) et \(B\), la planche étant le secteur annulaire d’épaisseur \(h\) autour de cet arc (rayons \(R \pm h/2\)).

La planche est très élancée (\(L/h = 100\)) et les arcs très plats : on construit directement un maillage structuré (grille \(N_x \times N_y\) dans le repère curviligne \(\varphi\), \(r\)), avec \(N_x = 200\) éléments le long de l’arc et \(N_y = 4\) dans l’épaisseur. Chaque quadrillage est découpé en deux triangles (\(\mathbb{P}_2\)), ce qui garantit une géométrie exacte pour toutes les cambrures. Les appuis (articulations) sont imposés aux points de l’axe neutre \(A(0,0)\) et \(B(L,0)\), présents dans le maillage grâce à une discrétisation paire de l’épaisseur (c’est l’équivalent de la redéfinition du point milieu de l’énoncé, perdu lors du maillage).

c =   0.0 cm : 1600 cellules, facettes {2: 196, 3: 2, 4: 2, 5: 200, 6: 8}
c =   0.5 cm : 1600 cellules, facettes {2: 196, 3: 3, 4: 3, 5: 198, 6: 8}
c =  50.0 cm : 1600 cellules, facettes {2: 196, 3: 3, 4: 3, 5: 198, 6: 8}

21.2 Résolution EF et boucle sur la cambrure \(c\)

Pour chaque \(c\) : 1. construction du maillage, espace \(\mathbb{P}_2\) vectoriel (déplacement), élasticité en contraintes planes ; 2. conditions aux limites : articulation en A \((0,0)\) et B \((L,0)\) (les deux composantes nulles — la poussée de l’arc est reprise par les culées) ; charge \(P\) répartie sur le petit patch au sommet (traction \(P/(a l_p)\), où \(a\) est la largeur hors-plan de la planche) ; 3. résolution (LU/MUMPS), extraction de la flèche \(f = \max|u_y|\) au sommet et des réactions d’appui (\(H_A\), \(R_{Ay}\)) — les réactions sont multipliées par la largeur \(a\) pour obtenir les efforts réels de la planche ; 4. par équilibre (méthode des sections), les sollicitations le long de l’arc : \[M(\varphi) = H_A\, y(\varphi) - R_{Ay}\, x(\varphi), \quad N(\varphi) = -H_A\cos\varphi + R_{Ay}\sin\varphi, \quad V(\varphi) = -\big(H_A\sin\varphi + R_{Ay}\cos\varphi\big),\] et on en extrait les maxima en valeur absolue.

c =    0.0 cm | f =   98.049 mm | H =    0.00 kN | Nmax=   0.00 kN | Tmax=490 N | Mmax=1226 N.m | res=5.79e-06
c =    0.5 cm | f =   92.426 mm | H =   11.25 kN | Nmax=  11.26 kN | Tmax=491 N | Mmax=1170 N.m | res=4.19e-02
c =    9.5 cm | f =    6.383 mm | H =    9.66 kN | Nmax=   9.68 kN | Tmax=491 N | Mmax=310 N.m | res=1.69e+00
c =   10.0 cm | f =    6.003 mm | H =    9.22 kN | Nmax=   9.23 kN | Tmax=491 N | Mmax=307 N.m | res=1.83e+00
c =   50.0 cm | f =    2.751 mm | H =    1.95 kN | Nmax=   2.02 kN | Tmax=505 N | Mmax=287 N.m | res=2.98e+01

21.3 Évolution des grandeurs en fonction de la cambrure \(c\)

Flèche poutre droite (c=0)   : 98.05 mm   (Euler-Bernoulli 98.10 mm)
Flèche arc c=50 cm           : 2.751 mm
Gain de rigidité à c=50 cm   : 36x
Cambrure minimisant f (plage testée) : c = 42.5 cm, f = 2.726 mm

21.4 Comparaison analytique (Castigliano) — éléments finis

Erreur relative moyenne f_EF vs f_Castigliano (c>0) : 2.0 %
Poussée H EF   à c=50 cm : 1.95 kN   (théorie 1.90 kN)

21.5 Déformées et champs de contrainte

Pour la poutre droite (\(c = 0\)) et l’arc le plus cambré (\(c = 50\) cm), on visualise la déformée (amplifiée) et le champ de contrainte normale \(\sigma_{xx}\) (traction/compression dans le sens de la portée).

# --- Arc de cercle (c = 50 cm) ---
res_d = res[i50]
uh, domain = res_d["uh"], res_d["domain"]
V1 = fem.functionspace(domain, ("CG", 1, (gdim,)))
uh_p1 = fem.Function(V1); uh_p1.interpolate(uh)
topology, cell_types, geometry = plot.vtk_mesh(V1)
grid = pv.UnstructuredGrid(topology, cell_types, geometry)
u_3d = np.zeros((geometry.shape[0], 3)); u_3d[:, :2] = uh_p1.x.array.reshape(-1, 2)
grid.point_data["Displacement"] = u_3d
warp = grid.warp_by_vector("Displacement", factor=50.0)
plotter = pv.Plotter()
plotter.add_mesh(warp, cmap="viridis", scalars=u_3d[:, 1], show_edges=False,
                 scalar_bar_args={"title": "u_y (m)", "title_font_size": 18,
                                  "label_font_size": 20, "color": "gray",
                                  "shadow": False, "font_family": "arial"})
plotter.add_text("Déformée arc c = 50 cm (×50)", font_size=18, color="gray", position="upper_edge")
plotter.view_xy(); plotter.set_background(bg); plotter.add_axes(color="gray")
plotter.screenshot("deformee_arc.png")
plotter.show()
clear_output(wait=False)
# --- Arc de cercle (c = 50 cm) ---
res_d = res[i50]
uh, domain = res_d["uh"], res_d["domain"]
Q = fem.functionspace(domain, ("DG", 0))
sxx = fem.Function(Q)
sxx.interpolate(fem.Expression(
    lmbda * (eps(uh)[0, 0] + eps(uh)[1, 1]) + 2 * mu * eps(uh)[0, 0],
    Q.element.interpolation_points(),
))
topology, cell_types, geometry = plot.vtk_mesh(domain, gdim)
grid = pv.UnstructuredGrid(topology, cell_types, geometry)
grid.cell_data["sigma_xx"] = sxx.x.array
plotter = pv.Plotter()
plotter.add_mesh(grid, scalars="sigma_xx", cmap="coolwarm", show_edges=False,
                 scalar_bar_args={"title": "sigma_xx (Pa)", "title_font_size": 18,
                                  "label_font_size": 20, "color": "gray",
                                  "shadow": False, "font_family": "arial"})
plotter.add_text("sigma_xx — arc c = 50 cm", font_size=18, color="gray", position="upper_edge")
plotter.view_xy(); plotter.set_background(bg); plotter.add_axes(color="gray")
plotter.screenshot("contrainte_arc.png")
plotter.show()
clear_output(wait=False)

21.6 Conclusion

Les résultats EF confirment la théorie : dès une cambrure modeste, la flèche chute fortement et le pont travaille en compression (effort normal) au lieu de fléchir. La flèche décroît de \(98\) mm (\(c = 0\)) jusqu’à un minimum de \(2,7\) mm atteint pour \(c \simeq 42\) cm : c’est la cambrure qui maximise la rigidité dans la plage testée, la flèche augmentant légèrement au-delà. L’essentiel du gain (facteur 16) est déjà obtenu dès \(c \simeq 10\) cm (\(f \simeq 6\) mm), pour une cambrure de seulement \(2\) % de la portée.