81f3b30Elliptical plates, a WebGPU time loop for the explicit method, and WAV exportJeremy Magland 1function [R, Q] = plate_rigid_modes(X, Y, mvec, pivot)
78d40e9Free edges for both finite-difference methodsJeremy Magland 2% PLATE_RIGID_MODES Basis of the rigid-body motions of a free plate and its M-orthogonal projector.
3%
4% [R, Q] = plate_rigid_modes(X, Y, mvec) takes the node coordinates X, Y and
5% the diagonal mvec of the mass matrix (the trapezoidal weights of
6% plate_matrices) and returns R = [1, x - xc, y - yc] evaluated at the nodes
7% (n x 3) and Q = M R (R' M R)^-1 (n x 3), so that
8%
9% w - R * (Q' * w)
10%
11% is the part of w orthogonal to the rigid-body motions in the mass inner
12% product: what remains when the mean displacement and the two mean tilts are
13% taken out.
14%
81f3b30Elliptical plates, a WebGPU time loop for the explicit method, and WAV exportJeremy Magland 15% [R, Q] = plate_rigid_modes(X, Y, mvec, pivot), with pivot = [x0 y0] the
16% coordinates of a pinned node, keeps only the two rotations about that point,
17% R = [x - x0, y - y0]. Both columns vanish at the pin, so the projection
18% leaves w = 0 there untouched.
19%
78d40e9Free edges for both finite-difference methodsJeremy Magland 20% Why remove them. A completely free plate has three zero-frequency modes,
21% and a strike gives it net momentum and angular momentum: with only the loss
22% sigma0 to stop it, the plate drifts to a displacement of order
23% (impulse / mass) / (2 sigma0), millimetres against the micrometres of the
24% bending motion. A real free-free measurement rests the plate on foam or
25% hangs it from threads, which absorb exactly this motion and nothing else,
26% so the solvers project it out after every step. The bending stiffness K
27% annihilates R exactly, so this changes nothing about the flexural dynamics;
28% the sigma1 loss operator does not, and the projection also keeps that term
29% from feeding a rigid tilt back into flexure.
31x = X(:);
32y = Y(:);
33m = mvec(:);
81f3b30Elliptical plates, a WebGPU time loop for the explicit method, and WAV exportJeremy Magland 34if nargin >= 4
35 R = [x - pivot(1), y - pivot(2)];
36else
37 xc = sum(m .* x) / sum(m);
38 yc = sum(m .* y) / sum(m);
39 R = [ones(numel(x), 1), x - xc, y - yc];
40end
78d40e9Free edges for both finite-difference methodsJeremy Magland 41G = R' * (m .* R); % 3 x 3 Gram matrix in the mass inner product
42Q = (m .* R) / G;
43end