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.", }, ]; 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.", }, ];