import type { MethodDefinition } from "./types"; import { GOVERNING_EQUATIONS, RADIATION_EQUATIONS, STRESS_EQUATIONS } from "./common"; export const MODAL_METHOD: MethodDefinition = { id: "modal", name: "Modal superposition", shortName: "Modal", summary: "Closed-form modes of the simply supported rectangle, each integrated exactly in time.", solverFunction: "plate_modal", supports: { shape: ["rectangle"], bc: ["simply-supported"], excitation: ["impulse", "harmonic"], audio: "full", }, readingOrder: [ "plate_modal.m", "plate_setup.m", "plate_force_time.m", "plate_force_footprint.m", "plate_sdof.m", "plate_stress.m", "plate_listener.m", "plate_spectrum.m", "plate_result_schema.m", ], equations: [ ...GOVERNING_EQUATIONS, { tex: String.raw`\phi_{mn}(x,y) = \sin\frac{m\pi x}{a}\,\sin\frac{n\pi y}{b}, \qquad \omega_{mn} = \kappa\left[\left(\frac{m\pi}{a}\right)^2 + \left(\frac{n\pi}{b}\right)^2\right]`, caption: "Eigenfunctions and natural frequencies of the simply supported rectangle; exact for w = 0 and w_nn = 0 on all four edges.", }, { tex: String.raw`w = \sum_{mn} q_{mn}(t)\,\phi_{mn}(x,y), \qquad \ddot q_{mn} + 2\sigma_{mn}\dot q_{mn} + \omega_{mn}^2 q_{mn} = \frac{G_{mn}F(t)}{M_{mn}}`, caption: "Each mode is an independent damped oscillator with modal mass M = mu a b / 4, force factor G = integral of s phi, and damping rate sigma = sigma0 + sigma1 lambda.", }, { tex: String.raw`\begin{pmatrix} q_{n+1} \\ \dot q_{n+1} \end{pmatrix} = \mathbf A(\Delta t) \begin{pmatrix} q_n \\ \dot q_n \end{pmatrix} + \mathbf B(\Delta t) \begin{pmatrix} F_n \\ F_{n+1} \end{pmatrix}`, caption: "Exact state transition over one sample for a force that is linear between samples (Nigam and Jennings 1969). No stability limit and no phase error.", }, ...STRESS_EQUATIONS, ...RADIATION_EQUATIONS, ], validity: [ "Exact only for the simply supported rectangle; other edge conditions and the ellipse have no closed-form modes of this kind (a disk would need Bessel functions).", "The modal sum is truncated at fmax and max_modes. Displacement converges quickly with mode count; stress converges more slowly, most of all near the strike point.", "The footprint projection and the Rayleigh integral are evaluated by quadrature on fixed grids.", "Damping rates are a model with two parameters, chosen, not measured.", ], durationOf: (spec) => spec.output.duration, settingsKey: "modal", usPerCellStep: 0, };