import type { Equation } from "./types"; /** Equations shared by every method: the model itself and how stress follows from displacement. */ export const GOVERNING_EQUATIONS: Equation[] = [ { tex: String.raw`\mu\,\frac{\partial^2 w}{\partial t^2} + 2\mu\sigma_0\,\frac{\partial w}{\partial t} - 2\mu\sigma_1\,\nabla^2\frac{\partial w}{\partial t} + D\,\nabla^4 w = f(x,y,t)`, caption: "Damped Kirchhoff-Love plate: transverse displacement w, mass per area mu = rho h, applied pressure f. The two loss terms are a model choice.", }, { tex: String.raw`D = \frac{E h^3}{12(1-\nu^2)}, \qquad \kappa = \sqrt{D/\mu}`, caption: "Bending stiffness and the stiffness parameter kappa that sets the dispersion of bending waves.", }, { tex: String.raw`f(x,y,t) = F(t)\,s(x,y), \qquad \iint s\,dA = 1`, caption: "The load is a force history F(t) spread over a raised-cosine footprint s, so F is the total force.", }, ]; /** How the two finite-difference methods handle free edges, which have no ghost-layer form. */ export const FREE_EDGE_EQUATIONS: Equation[] = [ { tex: String.raw`M_n = -D\left(w_{nn} + \nu\, w_{tt}\right) = 0, \qquad V_n = -D\left(w_{nnn} + (2-\nu)\, w_{ntt}\right) = 0, \qquad w_{nt} = 0 \text{ at a corner}`, caption: "Free edge: no bending moment and no Kirchhoff shear, n normal and t tangent to the edge; at a free corner the twisting moment vanishes as well. The shear condition holds a third derivative, so no single ghost layer can encode it.", }, { tex: String.raw`U = \frac{D}{2}\iint \left[ w_{xx}^2 + w_{yy}^2 + 2\nu\, w_{xx} w_{yy} + 2(1-\nu)\, w_{xy}^2 \right] dA, \qquad \mathbf K = \sum_{q} \omega_q\, \mathsf D_q^{\!\top} \mathsf C\, \mathsf D_q`, caption: "For free edges the stiffness matrix K is assembled from the bending energy instead: finite differences of the curvatures at the nodes and cell centres with trapezoidal weights (the finite-difference energy method). K reproduces the 13-point stencil inside, satisfies the free-edge conditions as natural boundary conditions, and has exactly the three rigid-body motions in its null space; those are projected out after every step, as the soft supports of a real free-free rig would absorb them.", }, ]; /** Free edges with the centre held, as a cymbal sits on its stand. */ export const PINNED_CENTER_EQUATIONS: Equation[] = [ { tex: String.raw`w(x_c, y_c, t) = 0, \qquad \text{free edges}, \qquad \mathbf K \leftarrow \mathsf P \mathbf K \mathsf P`, caption: "Pinned centre: the node nearest the centre is held at zero displacement by zeroing its row and column of the assembled stiffness (P is the selector of the other nodes), so its equation decouples. One pinned point still leaves the two rigid rotations about it at zero frequency; they are removed after every step, which is the role the felt washers of a stand play. Under a point support the curvature grows like log r, so the stress right at the support depends on the grid, as under a point load.", }, ]; /** How the two finite-difference methods handle an elliptical plate on the rectangular grid. */ export const CURVED_EDGE_EQUATIONS: Equation[] = [ { tex: String.raw`\Omega_h = \left\{ (x_j, y_i) : \frac{(x_j - L_x/2)^2}{(L_x/2)^2} + \frac{(y_i - L_y/2)^2}{(L_y/2)^2} \le 1 + O(\Delta x) \right\}`, caption: "Ellipse: the plate is the set of grid nodes within half a spacing of the inscribed ellipse, so its edge is a staircase that straddles the true curve. The same stencils and the same sparse assembly apply on this footprint; supported and clamped edges hold the outermost ring of nodes at w = 0, free edges use the energy method on every node. Geometry, edge conditions and the stress along the edge are then first order in the spacing (second order inside); refining the grid is the check.", }, { tex: String.raw`U = \frac{D}{2}\iint (\nabla^2 w)^2\, dA \;-\; \frac{D(1-\nu)}{2}\oint \kappa\, w_n^2\, ds \qquad (w = 0 \text{ on the edge})`, caption: "Simply supported curved edge. With w = 0 on the edge the bending energy takes this form, kappa being the curvature of the edge. On a polygon or a staircase kappa vanishes, and a scheme that imposes only w = 0 converges to a plate with zero Laplacian on the edge instead of zero moment: the Babuska (Sapondzhyan) paradox, which puts the fundamental of a simply supported disk 16 percent too high. The lab adds the boundary term with the curvature of the true ellipse at each edge node, which restores the simply supported limit; for the rectangle the term is zero.", }, ]; export const STRESS_EQUATIONS: Equation[] = [ { tex: String.raw`\sigma_{xx} = -\frac{E z}{1-\nu^2}\left(w_{xx} + \nu w_{yy}\right),\quad \sigma_{yy} = -\frac{E z}{1-\nu^2}\left(w_{yy} + \nu w_{xx}\right),\quad \tau_{xy} = -\frac{E z}{1+\nu}\,w_{xy}`, caption: "Surface stresses at z = h/2 from the curvatures. Stress is a second derivative of the primary unknown, so it inherits and amplifies the solution error.", }, { tex: String.raw`\sigma_{vM} = \sqrt{\sigma_{xx}^2 - \sigma_{xx}\sigma_{yy} + \sigma_{yy}^2 + 3\tau_{xy}^2}, \qquad \sigma_{1,2} = \frac{\sigma_{xx}+\sigma_{yy}}{2} \pm \sqrt{\left(\frac{\sigma_{xx}-\sigma_{yy}}{2}\right)^2 + \tau_{xy}^2}`, caption: "Von Mises equivalent stress and principal stresses; the app reports the principal stress of largest magnitude with its sign.", }, ]; export const RADIATION_EQUATIONS: Equation[] = [ { tex: String.raw`p(\mathbf r, t) = \frac{\rho_{\mathrm{air}}}{2\pi} \iint \frac{\ddot w\!\left(\mathbf r_s,\, t - |\mathbf r - \mathbf r_s|/c\right)}{|\mathbf r - \mathbf r_s|}\, dA`, caption: "Rayleigh's first integral for a flat radiator in an infinite rigid baffle. It ignores diffraction around the edges, so the waveform is an estimate, not a calibrated level.", }, ];