RasmahRasmah

Plates (thin-plate bending)

Overview

Thin-plate (Kirchhoff–Love) bending: the deflection w of a plate of flexural rigidity D = E t³ / (12(1−ν²)) under a transverse load q solves the biharmonic equation D ∇⁴w = q. For the simply-supported (“Navier”) plate the problem decouples exactly into two Poisson problems —

\[ \Delta m = q/D \quad (m = 0 \text{ on } \partial\Omega), \qquad \Delta w = m \quad (w = 0 \text{ on } \partial\Omega) \]

— so PlateBending() reuses the scalar Laplacian already used by the heat solver. This is the FEA kernel behind plate/shell topology optimization.

using Rasmah
using LinearAlgebra

# a 16×16 triangular mesh of the unit square [0,1]² (z = 0)
function grid_tri(nx, ny)
    nv = (nx + 1) * (ny + 1)
    verts = Matrix{Float64}(undef, 3, nv)
    for j in 0:ny, i in 0:nx
        idx = i + j * (nx + 1) + 1
        verts[1, idx] = i / nx; verts[2, idx] = j / ny; verts[3, idx] = 0.0
    end
    faces = Matrix{Int}(undef, 3, 2nx * ny)
    k = 0
    for j in 0:(ny - 1), i in 0:(nx - 1)
        a = i + j * (nx + 1) + 1; b = a + 1; c = a + nx + 1; d = c + 1
        k += 1; faces[:, k] = [a, b, c]
        k += 1; faces[:, k] = [b, d, c]
    end
    TriangleMesh(verts, faces)
end

plate = grid_tri(16, 16)

# simply-supported: w = 0 on the boundary (box + filter)
edge = nodes_in_box(plate, [0.0, 0.0], [1.0, 1.0];
                    filter = p -> p[1] < 1e-9 || p[1] > 1 - 1e-9 ||
                                  p[2] < 1e-9 || p[2] > 1 - 1e-9)

w = solve(PlateBending(), plate, steel, 0.01; fixed = edge, pressure = 1e3)
println("max deflection = ", round(maximum(w); digits = 6), " m")
max deflection = 0.000221 m m

Notes

  • The field is :w (field_names(PlateBending()) == (:w,)).
  • pressure_load(plate, q) builds the consistent nodal source ∫ q N; a raw nodal loads vector is also accepted.
  • The two-Poisson splitting is exact only for the simply-supported (Navier) boundary conditions (w = 0, Δw = 0); clamped or free edges couple the two Poisson problems.
  • solve_plate(m, D, fixed, source) exposes the raw two-solve kernel directly.