1import type { EquationGroup } from "./types";
3/**
4 * The equations behind the lab, grouped as the Equations tab shows them.
5 * Each group names the methods it applies to; the rest are shared.
6 */
8export const OBJECT_GROUP: EquationGroup = {
9 title: "The object",
10 equations: [
11 {
12 tex: String.raw`D = \frac{E h^3}{12(1-\nu^2)}, \qquad m = \rho h (W H - \pi r_h^2)`,
13 caption:
14 "A rectangular plate of sides W and H and thickness h with a small hole of radius r_h near the top edge; D is its bending rigidity and m its mass.",
15 },
16 {
17 tex: String.raw`k_t = \frac{m g}{L}`,
18 caption:
19 "The thread of length L holds the hole with the linearized pendulum stiffness against transverse motion. It is a soft point spring, not a clamp; nothing restrains the plate's rotations about the hole.",
20 },
21 ],
22};
24export const RR_GROUP: EquationGroup = {
25 title: "Rayleigh-Ritz on the thin-plate energy",
26 methods: ["rr"],
27 equations: [
28 {
29 tex: String.raw`U = \frac{D}{2}\int_A \left( w_{xx}^2 + w_{yy}^2 + 2\nu\, w_{xx} w_{yy} + 2(1-\nu)\, w_{xy}^2 \right) dA, \qquad T = \frac{\rho h}{2}\int_A w_t^2\, dA`,
30 caption:
31 "Kirchhoff-Love bending energy and kinetic energy of the plate: no shear deformation, no rotary inertia. Free edges need no condition, since minimizing U enforces the natural ones.",
32 },
33 {
34 tex: String.raw`w(x,y) = \sum_{i,j=0}^{N} a_{ij}\, P_i\!\left(\tfrac{2x}{W}\right) P_j\!\left(\tfrac{2y}{H}\right)`,
35 caption:
36 "The trial field is a tensor product of Legendre polynomials up to order N = 12 per side, 169 coefficients; the integrals are Gauss-Legendre quadratures with 30 points per side.",
37 },
38 {
39 tex: String.raw`\left(\mathbf{K} + k_t\, \mathbf{p}_h \mathbf{p}_h^{\mathsf T}\right)\mathbf{a} = \omega^2 \left(\mathbf{M} - \rho h\, \pi r_h^2\, \mathbf{p}_h \mathbf{p}_h^{\mathsf T}\right)\mathbf{a}`,
40 caption:
41 "The generalized eigenproblem, with the thread's spring added and the hole's mass subtracted at the basis vector p_h evaluated at the hole; solved densely after a Cholesky reduction. The rigid rotations and the pendulum mode are dropped.",
42 },
43 ],
44};
46export const FEM_GROUP: EquationGroup = {
47 title: "Mindlin-Reissner finite elements",
48 methods: ["fem"],
49 equations: [
50 {
51 tex: String.raw`U = \frac{1}{2}\int_A \left( \boldsymbol{\kappa}^{\mathsf T} \mathbf{D}_b\, \boldsymbol{\kappa} + \boldsymbol{\gamma}^{\mathsf T} \mathbf{D}_s\, \boldsymbol{\gamma} \right) dA, \quad \boldsymbol{\kappa} = \begin{pmatrix} \theta_{x,x} \\ \theta_{y,y} \\ \theta_{x,y} + \theta_{y,x} \end{pmatrix}, \quad \boldsymbol{\gamma} = \begin{pmatrix} w_x + \theta_x \\ w_y + \theta_y \end{pmatrix}`,
52 caption:
53 "Three fields, the deflection w and two rotations, with bending stiffness D_b = D [1, ν, 0; ν, 1, 0; 0, 0, (1-ν)/2] and shear stiffness D_s = κ G h I, κ = 5/6. The kinetic energy carries the mass ρh and the rotary inertia ρh³/12.",
54 },
55 {
56 tex: String.raw`w, \theta_x, \theta_y = \sum_{a=1}^{4} N_a(\xi,\eta)\, (w, \theta_x, \theta_y)_a, \qquad N_a = \tfrac{1}{4}(1 \pm \xi)(1 \pm \eta)`,
57 caption:
58 "Bilinear four-node elements on a regular mesh, integrated with 2 x 2 Gauss points for both energies. Full integration of the shear term locks on a thin plate, which is why the partials converge from above as the mesh is refined.",
59 },
60 {
61 tex: String.raw`\left(\mathbf{K} + k_t\, \mathbf{s}\, \mathbf{s}^{\mathsf T}\right)\mathbf{v} = \omega^2 \mathbf{M}\, \mathbf{v}, \qquad \mathbf{Y} = (\mathbf{K} - \sigma \mathbf{M})^{-1} \mathbf{M} \mathbf{X}, \quad \sigma < 0`,
62 caption:
63 "The sparse eigenproblem, with the thread's spring on the interpolation vector s of the hole, is solved by subspace iteration: one Cholesky factorization of the negatively shifted matrix, then repeated block solves and Rayleigh-Ritz projections until the lowest modes settle. The three rigid-body modes are kept.",
64 },
65 ],
66};
68export const CONTACT_GROUP: EquationGroup = {
69 title: "The hammer",
70 equations: [
71 {
72 tex: String.raw`\frac{1}{E^*} = \frac{1-\nu_h^2}{E_h} + \frac{1-\nu^2}{E}, \qquad k_c = \tfrac{4}{3} E^* \sqrt{R}, \qquad F = k_c\, \delta^{3/2}`,
73 caption:
74 "Hertz contact of a sphere of radius R on a flat: the force grows with the three-halves power of the indentation δ.",
75 },
76 {
77 tex: String.raw`T = 2.94 \left( \frac{m_h^2}{R\, E^{*2}\, v_0} \right)^{1/5}, \qquad I = (1 + e)\, m_h v_0`,
78 caption:
79 "On a rigid target the contact lasts T and transfers the impulse I, e being the nominal coefficient of restitution.",
80 },
81 ],
82};
84export const RR_CONTACT_GROUP: EquationGroup = {
85 title: "The prescribed pulse",
86 methods: ["rr"],
87 equations: [
88 {
89 tex: String.raw`F(s) = \frac{I \sin^{3/2}(\pi s / T)}{T\, \Gamma(5/4) / (\sqrt{\pi}\, \Gamma(7/4))}, \quad 0 \le s \le T`,
90 caption:
91 "The Rayleigh-Ritz method applies the rigid-target pulse as a given force history: the plate does not push back on the hammer, so the peak force is that of a rigid target.",
92 },
93 {
94 tex: String.raw`q_k(t) = \phi_k(\mathbf{x}_s) \int_0^{\min(t,T)} F(s)\, h_k(t - s)\, ds, \qquad h_k(u) = \frac{e^{-\zeta_k \omega_k u} \sin(\omega_{d,k} u)}{\omega_{d,k}}`,
95 caption:
96 "Each mode's response is Duhamel's integral of the pulse against its damped impulse response, with φ_k the mass-normalized shape at the strike point; evaluated by Gauss-Legendre quadrature.",
97 },
98 ],
99};
101export const FEM_CONTACT_GROUP: EquationGroup = {
102 title: "The coupled contact",
103 methods: ["fem"],
104 equations: [
105 {
106 tex: String.raw`\delta = x_h - \sum_k \phi_k(\mathbf{x}_s)\, q_k, \qquad F = k_c\, \delta^{3/2} \left( 1 + \frac{3(1-e)}{2 v_0}\, \dot\delta \right) \;\; (\delta > 0)`,
107 caption:
108 "The Hunt-Crossley force: a Hertz spring with a loss proportional to the closing speed, chosen so that a collision with a rigid target returns the nominal restitution e.",
109 },
110 {
111 tex: String.raw`\ddot q_k = \phi_k(\mathbf{x}_s)\, F - 2\zeta_k \omega_k \dot q_k - \omega_k^2 q_k, \qquad m_h \ddot x_h = -F`,
112 caption:
113 "Hammer and plate as one system, integrated by fourth-order Runge-Kutta until δ falls through zero. All modes take part, the rigid-body ones included, so the light plate can move away from the hammer: the force is lower and the contact longer than the prescribed pulse.",
114 },
115 ],
116};
118export const DAMPING_GROUP: EquationGroup = {
119 title: "Losses",
120 equations: [
121 {
122 tex: String.raw`\frac{1}{Q_k} = \frac{1}{Q_{\mathrm{mat}}} + \frac{\sqrt{f_k / 1\,\mathrm{kHz}}}{1100} + \frac{c_t\, \phi_k(\mathbf{x}_h)^2}{\omega_k}, \qquad \zeta_k = \min\!\left(0.08,\ \frac{1}{2 Q_k}\right)`,
123 caption:
124 "Three losses per mode: the material's structural loss, air loading that grows with frequency, and the thread's dashpot c_t acting on the mode's displacement at the hole. Order-of-magnitude figures, not measurements.",
125 },
126 {
127 tex: String.raw`q_k(t) = e^{-\zeta_k \omega_k \tau} \left( q_k^0 \cos \omega_{d,k} \tau + \frac{\dot q_k^0 + \zeta_k \omega_k q_k^0}{\omega_{d,k}} \sin \omega_{d,k} \tau \right), \quad \tau = t - t_c`,
128 caption:
129 "After the hammer leaves at t_c, every mode decays freely from its state at separation; ω_d is the damped frequency. The sound, the series and the frames are sums of these.",
130 },
131 ],
132};
134export const RADIATION_GROUP: EquationGroup = {
135 title: "The sound",
136 equations: [
137 {
138 tex: String.raw`p(t) = \sum_k \frac{\rho_{\mathrm{air}}}{2\pi r}\, V_k\, \sqrt{\min\!\left(1, \frac{f_k}{f_c}\right)}\; \ddot q_k(t), \qquad V_k = \int_A \phi_k\, dA, \qquad f_c = \frac{c^2}{2\pi}\sqrt{\frac{\rho h}{D}}`,
139 caption:
140 "A compact-source estimate for a microphone at distance r on the plate's normal: each mode radiates in proportion to its volume velocity, reduced below the coincidence frequency f_c by the front/back cancellation of a small unbaffled plate. Meaningful in timbre and decay; the absolute level is approximate, so the export is peak-normalized.",
141 },
142 ],
143};
145export const STRESS_GROUP: EquationGroup = {
146 title: "Surface stress",
147 equations: [
148 {
149 tex: String.raw`\sigma_{xx} = -\frac{E h}{2(1-\nu^2)}\,(w_{xx} + \nu w_{yy}), \quad \sigma_{yy} = -\frac{E h}{2(1-\nu^2)}\,(w_{yy} + \nu w_{xx}), \quad \tau_{xy} = -\frac{E h}{2(1+\nu)}\, w_{xy}`,
150 caption:
151 "Bending stress at the surface z = h/2 from the modal curvatures (for the Mindlin-Reissner elements, from the gradients of the rotations); von Mises and the signed principal stress follow. The opposite face carries the opposite sign.",
152 },
153 ],
154};
156export const ALL_GROUPS: EquationGroup[] = [
157 OBJECT_GROUP,
158 RR_GROUP,
159 FEM_GROUP,
160 CONTACT_GROUP,
161 RR_CONTACT_GROUP,
162 FEM_CONTACT_GROUP,
163 DAMPING_GROUP,
164 RADIATION_GROUP,
165 STRESS_GROUP,
166];