/ proof-of-concept / plate-dynamics-lab-2
Sign in
proof-of-concept / plate-dynamics-lab-2
plate-dynamics-lab-2 / packages / core / src / m / plate_fem_plan.m
30 lines · 1.2 KBBlameHistoryRaw
1function plan = plate_fem_plan(params)
2% PLATE_FEM_PLAN Sizes and estimates of a finite-element run, before it runs.
3%
4% plan = plate_fem_plan(params) reports the mesh and its unknowns, the
5% number of modes to expect below 0.47 fs, the pendulum frequency of the
6% thread, the Hertz estimates of the contact and the plate's coincidence
7% frequency. Cheap: no matrix is assembled. The eigensolve's cost grows
8% a little faster than the number of unknowns; the strike stage's with the
9% number of samples times the number of modes.
11P = plate_setup(params);
12plan = plate_plan_common(params, P);
13nx = params.fem.mesh_x;
14ny = params.fem.mesh_y;
15ndof = 3 * (nx + 1) * (ny + 1);
16plan.method = 'fem';
17plan.ndof = ndof;
18plan.nx = nx;
19plan.ny = ny;
20plan.dx = params.plate.width / nx;
21plan.dy = params.plate.height / ny;
22plan.work = ndof^1.3;
23plan.size_note = sprintf('%d x %d Q4 elements, %d unknowns', nx, ny, ndof);
24if nx < 4 || ny < 4
25 plan.notes{end + 1} = 'the mesh needs at least 4 elements per side';
26end
27if nx < 48 || ny < 48
28 plan.notes{end + 1} = 'full-integration Q4 locks in shear on a thin plate: below 48 x 48 the partials are several percent high (the reference used 80 x 80)';
29end
30end
↑↓ move↵openescclose