function plan = plate_fem_plan(params) % PLATE_FEM_PLAN Sizes and estimates of a finite-element run, before it runs. % % plan = plate_fem_plan(params) reports the mesh and its unknowns, the % number of modes to expect below 0.47 fs, the pendulum frequency of the % thread, the Hertz estimates of the contact and the plate's coincidence % frequency. Cheap: no matrix is assembled. The eigensolve's cost grows % a little faster than the number of unknowns; the strike stage's with the % number of samples times the number of modes. P = plate_setup(params); plan = plate_plan_common(params, P); nx = params.fem.mesh_x; ny = params.fem.mesh_y; ndof = 3 * (nx + 1) * (ny + 1); plan.method = 'fem'; plan.ndof = ndof; plan.nx = nx; plan.ny = ny; plan.dx = params.plate.width / nx; plan.dy = params.plate.height / ny; plan.work = ndof^1.3; plan.size_note = sprintf('%d x %d Q4 elements, %d unknowns', nx, ny, ndof); if nx < 4 || ny < 4 plan.notes{end + 1} = 'the mesh needs at least 4 elements per side'; end if nx < 48 || ny < 48 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)'; end end