/ proof-of-concept / plate-mechanics-sim
Sign in
proof-of-concept / plate-mechanics-sim
plate-mechanics-sim / packages / core / src / methods / modal.ts
51 lines · 2.4 KBBlameHistoryRaw
1import type { MethodDefinition } from "./types";
2import { GOVERNING_EQUATIONS, RADIATION_EQUATIONS, STRESS_EQUATIONS } from "./common";
4export const MODAL_METHOD: MethodDefinition = {
5 id: "modal",
6 name: "Modal superposition",
7 shortName: "Modal",
8 summary: "Closed-form modes of the simply supported rectangle, each integrated exactly in time.",
9 solverFunction: "plate_modal",
10 supports: { bc: ["simply-supported"], excitation: ["impulse", "harmonic"], audio: "full" },
11 readingOrder: [
12 "plate_modal.m",
13 "plate_setup.m",
14 "plate_force_time.m",
15 "plate_force_footprint.m",
16 "plate_sdof.m",
17 "plate_stress.m",
18 "plate_listener.m",
19 "plate_spectrum.m",
20 "plate_result_schema.m",
21 ],
22 equations: [
23 ...GOVERNING_EQUATIONS,
24 {
25 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]`,
26 caption:
27 "Eigenfunctions and natural frequencies of the simply supported rectangle; exact for w = 0 and w_nn = 0 on all four edges.",
28 },
29 {
30 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}}`,
31 caption:
32 "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.",
33 },
34 {
35 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}`,
36 caption:
37 "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.",
38 },
39 ...STRESS_EQUATIONS,
40 ...RADIATION_EQUATIONS,
41 ],
42 validity: [
43 "Exact only for simply supported edges; other edge conditions have no closed-form modes.",
44 "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.",
45 "The footprint projection and the Rayleigh integral are evaluated by quadrature on fixed grids.",
46 "Damping rates are a model with two parameters, chosen, not measured.",
47 ],
48 durationOf: (spec) => spec.output.duration,
49 settingsKey: "modal",
50 usPerCellStep: 0,
51};
↑↓ move↵openescclose