Simply-supported plate — first transverse bending mode#

Classical thin-plate eigenvalue problem. A simply-supported square plate of side \(a\) and thickness \(h\) has Kirchhoff natural frequencies (Timoshenko & Woinowsky-Krieger 1959 §63 eq. 151)

\[f_{mn} = \frac{\pi}{2} \left(\frac{m^{2}}{a^{2}} + \frac{n^{2}}{b^{2}}\right) \sqrt{\frac{D}{\rho\, h}}, \qquad D = \frac{E\, h^{3}}{12 (1 - \nu^{2})},\]

so the (1, 1) fundamental of a square plate \(a = b\) is

\[f_{11} = \pi \frac{1}{a^{2}} \sqrt{\frac{D}{\rho\, h}}.\]

Implementation#

A 30 × 30 × 2 HEX8 enhanced-strain (Simo–Rifai 1990) mesh on the unit square plate at \(L/h = 100\). Simply-supported boundary conditions pin \(u_z = 0\) along all four edges through the full thickness; in-plane rigid-body translation is removed at one corner. The mode-shape filter selects the first mode whose UZ root-mean-square dominates the in-plane components (i.e. the (1, 1) bending mode), in case any spurious in-plane modes precede it on a coarse mesh.

Modal analysis runs through Model.modal_solve() (ARPACK shift-invert via femorph_solver.solvers.modal).

References#

  • Timoshenko, S. P. and Woinowsky-Krieger, S. (1959) Theory of Plates and Shells, 2nd ed., McGraw-Hill, §63 eq. 151 (rectangular plate eigenfrequencies).

  • Cook, R. D., Malkus, D. S., Plesha, M. E., Witt, R. J. (2002) Concepts and Applications of Finite Element Analysis, 4th ed., Wiley, §12.5.

  • Simo, J. C. and Rifai, M. S. (1990) “A class of mixed assumed-strain methods …” IJNME 29 (8), 1595–1638.

from __future__ import annotations

import math

import numpy as np
import pyvista as pv

import femorph_solver
from femorph_solver import ELEMENTS

Problem data#

E = 2.0e11  # Pa (steel)
NU = 0.3
RHO = 7850.0  # kg/m^3
a = 1.0  # plate edge length [m]
h = 0.01  # thickness [m]; L/h = 100

NX = NY = 30
NZ = 2

D = E * h**3 / (12.0 * (1.0 - NU**2))
f11_published = (math.pi / 2.0) * (1.0 / a**2 + 1.0 / a**2) * math.sqrt(D / (RHO * h))
print(f"a = {a} m, h = {h} m, L/h = {a / h:.0f}")
print(f"E = {E / 1e9:.0f} GPa, ν = {NU}, ρ = {RHO} kg/m^3, D = {D:.3e} N m")
print(f"f_11 published (Timoshenko §63)   = {f11_published:.4f} Hz")
a = 1.0 m, h = 0.01 m, L/h = 100
E = 200 GPa, ν = 0.3, ρ = 7850.0 kg/m^3, D = 1.832e+04 N m
f_11 published (Timoshenko §63)   = 47.9865 Hz

Build a 30 × 30 × 2 HEX8 mesh#

xs = np.linspace(0.0, a, NX + 1)
ys = np.linspace(0.0, a, NY + 1)
zs = np.linspace(0.0, h, NZ + 1)
grid = pv.StructuredGrid(*np.meshgrid(xs, ys, zs, indexing="ij")).cast_to_unstructured_grid()
print(f"mesh: {grid.n_points} nodes, {grid.n_cells} HEX8 cells")

m = femorph_solver.Model.from_grid(grid)
m.assign(
    ELEMENTS.HEX8(integration="enhanced_strain"),
    material={"EX": E, "PRXY": NU, "DENS": RHO},
)
mesh: 2883 nodes, 1800 HEX8 cells

SS BCs + rigid-body suppression#

pts = np.asarray(m.grid.points)
tol = 1e-9
edge = (
    (np.abs(pts[:, 0]) < tol)
    | (np.abs(pts[:, 0] - a) < tol)
    | (np.abs(pts[:, 1]) < tol)
    | (np.abs(pts[:, 1] - a) < tol)
)
m.fix(nodes=(np.where(edge)[0] + 1).tolist(), dof="UZ")
corner = int(np.where(np.linalg.norm(pts, axis=1) < tol)[0][0])
m.fix(nodes=[corner + 1], dof="UX")
m.fix(nodes=[corner + 1], dof="UY")
corner_x = int(
    np.where((np.abs(pts[:, 0] - a) < tol) & (np.abs(pts[:, 1]) < tol) & (np.abs(pts[:, 2]) < tol))[
        0
    ][0]
)
m.fix(nodes=[corner_x + 1], dof="UY")

Render the (1, 1) bending mode shape#

phi = shapes[:, :, f11_idx]
warped = m.grid.copy()
warped.points = m.grid.points + (h / np.max(np.abs(phi)) * 0.4) * phi
warped["UZ"] = phi[:, 2]

plotter = pv.Plotter(off_screen=True, window_size=(720, 480))
plotter.add_mesh(
    m.grid,
    style="wireframe",
    color="grey",
    opacity=0.35,
    label="undeformed",
)
plotter.add_mesh(
    warped,
    scalars="UZ",
    cmap="coolwarm",
    show_edges=False,
    scalar_bar_args={"title": f"mode (1,1) — f = {f11_computed:.1f} Hz"},
)
plotter.view_isometric()
plotter.camera.zoom(1.05)
plotter.show()
example verify ss plate modes

Total running time of the script: (0 minutes 1.879 seconds)

Gallery generated by Sphinx-Gallery