.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "gallery/verification/example_verify_clamped_plate_static.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_gallery_verification_example_verify_clamped_plate_static.py: Clamped square plate under uniform pressure (NAFEMS LE5) ======================================================== Classical fully-clamped thin-plate verification: a square plate of side :math:`a` and thickness :math:`h` is clamped on all four edges (every DOF pinned, full thickness) and loaded by a uniform transverse pressure :math:`q`. The maximum centre deflection has no elementary closed form but is published from the converged double-Fourier solution (NAFEMS R0015 §2.5 LE5; Timoshenko & Woinowsky-Krieger 1959 §32 Table 12) as .. math:: w_\mathrm{max} \;\approx\; 0.00126 \, \frac{q\, a^{4}}{D}, \qquad D = \frac{E\, h^{3}}{12 (1 - \nu^{2})}. The 0.00126 coefficient (the NAFEMS LE5 reference value) is a factor of ~3.2 stiffer than the simply-supported counterpart (0.00406 in :doc:`example_verify_ss_plate_static`) — clamping roughly triples the bending stiffness of the slab. Implementation -------------- Drives the existing :class:`~femorph_solver.validation.problems.ClampedPlateStatic` problem class on a default 20×20×2 HEX8 enhanced-strain mesh. The validation suite tolerates ~10–15 % deviation on this mesh (NAFEMS LE5 specifies a 5 % engineering tolerance for the benchmark itself, and a solid-element analogue at :math:`L/h = 50` lands within ~10 % of the Kirchhoff limit). References ---------- * Timoshenko, S. P. and Woinowsky-Krieger, S. (1959) *Theory of Plates and Shells*, 2nd ed., McGraw-Hill, §32 Table 12 (clamped-plate deflection coefficients). * NAFEMS, *Standard Benchmark Tests for Linear Elastic Analysis*, R0015 (1990), §2.5 LE5 "Clamped square plate". * Simo, J. C. and Rifai, M. S. (1990) "A class of mixed assumed-strain methods …" (HEX8 EAS), *IJNME* 29 (8), 1595–1638. * (Industry-neutral reference — NAFEMS R0015 §2.5 LE5); plate-bending companion sweeps in Abaqus AVM 1.4.1 clamped-plate-pressure family (problem-id citations only). .. GENERATED FROM PYTHON SOURCE LINES 50-58 .. code-block:: Python from __future__ import annotations import numpy as np import pyvista as pv from femorph_solver.validation.problems import ClampedPlateStatic .. GENERATED FROM PYTHON SOURCE LINES 59-61 Build the model from the validation problem class -------------------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 61-70 .. code-block:: Python problem = ClampedPlateStatic() m = problem.build_model() print( f"clamped plate mesh: {m.grid.n_points} nodes, {m.grid.n_cells} HEX8 cells; " f"a = {problem.a} m, h = {problem.h} m, L/h = {problem.a / problem.h:.0f}" ) print(f"E = {problem.E / 1e9:.0f} GPa, ν = {problem.nu}, q = {problem.q / 1e3:.1f} kPa") .. rst-class:: sphx-glr-script-out .. code-block:: none clamped plate mesh: 11163 nodes, 7200 HEX8 cells; a = 1.0 m, h = 0.02 m, L/h = 50 E = 200 GPa, ν = 0.3, q = 100.0 kPa .. GENERATED FROM PYTHON SOURCE LINES 71-73 Closed-form reference + flexural rigidity ----------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 73-79 .. code-block:: Python D = problem.E * problem.h**3 / (12.0 * (1.0 - problem.nu**2)) w_published = 0.00126 * problem.q * problem.a**4 / D print(f"D = {D:.3e} N m (flexural rigidity)") print(f"w_max (NAFEMS LE5 / Timoshenko Table 12 ≈ 0.00126 q a^4/D) = {w_published * 1e6:.3f} µm") .. rst-class:: sphx-glr-script-out .. code-block:: none D = 1.465e+05 N m (flexural rigidity) w_max (NAFEMS LE5 / Timoshenko Table 12 ≈ 0.00126 q a^4/D) = 859.950 µm .. GENERATED FROM PYTHON SOURCE LINES 80-82 Static solve + centre-deflection extraction ------------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 82-97 .. code-block:: Python res = m.solve() w_computed = problem.extract(m, res, "w_max") err_pct = (w_computed - w_published) / w_published * 100.0 print() print(f"w_max computed (HEX8 EAS, default mesh) = {w_computed * 1e6:+.3f} µm") print(f"w_max published (NAFEMS LE5) = {w_published * 1e6:+.3f} µm") print(f"relative error = {err_pct:+.2f} %") # 5 % tolerance — the 60 × 60 × 2 HEX8-EAS default mesh in # ``ClampedPlateStatic.build_model`` lands within ~3 % of the # Kirchhoff closed form. Tighter convergence (down to ~1 %) needs a # dedicated SHELL kernel (tracked separately). assert abs(err_pct) < 5.0, f"w_max deviation {err_pct:.2f}% exceeds 5 % tolerance" .. rst-class:: sphx-glr-script-out .. code-block:: none w_max computed (HEX8 EAS, default mesh) = +836.751 µm w_max published (NAFEMS LE5) = +859.950 µm relative error = -2.70 % .. GENERATED FROM PYTHON SOURCE LINES 98-100 Render the deflected plate -------------------------- .. GENERATED FROM PYTHON SOURCE LINES 100-127 .. code-block:: Python grid = m.grid.copy() u = np.asarray(res.displacement, dtype=np.float64).reshape(-1, 3) grid.point_data["displacement"] = u grid.point_data["UZ"] = u[:, 2] warp = grid.warp_by_vector("displacement", factor=5.0e2) plotter = pv.Plotter(off_screen=True, window_size=(720, 480)) plotter.add_mesh( grid, style="wireframe", color="grey", opacity=0.35, line_width=1, label="undeformed", ) plotter.add_mesh( warp, scalars="UZ", cmap="viridis", show_edges=False, scalar_bar_args={"title": "UZ [m] (deformed ×500)"}, ) plotter.view_isometric() plotter.camera.zoom(1.05) plotter.show() .. image-sg:: /gallery/verification/images/sphx_glr_example_verify_clamped_plate_static_001.png :alt: example verify clamped plate static :srcset: /gallery/verification/images/sphx_glr_example_verify_clamped_plate_static_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 6.192 seconds) .. _sphx_glr_download_gallery_verification_example_verify_clamped_plate_static.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: example_verify_clamped_plate_static.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: example_verify_clamped_plate_static.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: example_verify_clamped_plate_static.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_