/ proof-of-concept / plate-dynamics-lab
Sign in
proof-of-concept / plate-dynamics-lab
plate-dynamics-lab / packages / core / src / m / plate_setup.m
68 lines · 2.9 KBBlameHistoryRaw
1function P = plate_setup(params)
2% PLATE_SETUP Derived quantities for a Kirchhoff-Love plate problem.
3%
4% P = plate_setup(params) returns a copy of params with the derived fields
5% P.D bending stiffness D = E h^3 / (12 (1 - nu^2)) [N m]
6% P.mu mass per unit area mu = rho h [kg/m^2]
7% P.kappa stiffness parameter kappa = sqrt(D / mu) [m^2/s]
8% P.Kb bending-stress factor at the surface z = h/2 [N/m]
9% P.Ks shear-stress factor at the surface z = h/2 [N/m]
10% P.g gravitational acceleration [m/s^2], params.gravity.g (0 switches
11% gravity off)
13% The plate is params.plate.shape, 'rectangle' or 'ellipse', filling the
14% box [0, Lx] x [0, Ly]: for the ellipse Lx and Ly are the diameters along
15% x and y, and Lx = Ly is a disk. A missing shape means a rectangle.
17% The transverse displacement w(x,y,t) of the plate obeys
19% mu w_tt + 2 mu sigma0 w_t - 2 mu sigma1 lap(w_t) + D lap(lap(w))
20% - div(N grad w) = f(x,y,t) + mu g_n + support forces
22% where f is the applied pressure [N/m^2], sigma0 [1/s] is a frequency-
23% independent loss rate, sigma1 [m^2/s] adds losses that grow with spatial
24% frequency (Bilbao, Numerical Sound Synthesis, 2009, ch. 12), N is the
25% in-plane stress resultant of the plate's own weight (plate_prestress) and
26% g_n the component of gravity along the plate normal. How the plate is
27% held (params.mount) decides the support forces and the direction of
28% gravity in the plate's own coordinates: see plate_mount. The surface
29% stresses follow from the curvatures (plate_stress).
31P = params;
32pl = params.plate;
33mat = params.material;
35if ~isfield(pl, 'shape')
36 pl.shape = 'rectangle';
37 P.plate.shape = 'rectangle';
38end
39if ~any(strcmp(pl.shape, {'rectangle', 'ellipse'}))
40 error('plate_setup: unknown plate shape "%s" (expected rectangle or ellipse)', pl.shape);
41end
42if pl.Lx <= 0 || pl.Ly <= 0 || pl.h <= 0
43 error('plate_setup: plate dimensions must be positive');
44end
45if pl.h > 0.1 * min(pl.Lx, pl.Ly)
46 warning('plate_setup: thickness is more than a tenth of the shorter side; Kirchhoff-Love thin-plate theory is not reliable here');
47end
48if ~isfield(params, 'mount') || ~isfield(params.mount, 'type')
49 error('plate_setup: params.mount.type is required (thread, threads, pads, cymbal, vise or pinched)');
50end
51if ~any(strcmp(params.mount.type, {'thread', 'threads', 'pads', 'cymbal', 'vise', 'pinched'}))
52 error('plate_setup: unknown mount type "%s"', params.mount.type);
53end
54if isfield(params, 'gravity') && isfield(params.gravity, 'g')
55 P.g = params.gravity.g;
56else
57 P.g = 9.81;
58end
59if P.g < 0
60 error('plate_setup: g cannot be negative; turn the plate over instead');
61end
63P.D = mat.E * pl.h^3 / (12 * (1 - mat.nu^2));
64P.mu = mat.rho * pl.h;
65P.kappa = sqrt(P.D / P.mu);
66P.Kb = mat.E * pl.h / (2 * (1 - mat.nu^2));
67P.Ks = mat.E * pl.h / (2 * (1 + mat.nu));
68end
↑↓ move↵openescclose