/ proof-of-concept / bead-percussion
Sign in
proof-of-concept / bead-percussion
bead-percussion / tests / bench.ts
17 lines · 1.2 KBBlameHistoryRaw
1import { readFileSync, readdirSync } from "fs";
2import { runScript, numblEig } from "../src/sim/runScript";
3import { simulate } from "../src/sim/solver";
4import { computeModes, isPlanar } from "../src/sim/modes";
5const helpers = readdirSync("matlab/helpers").map(name => ({ name, source: readFileSync("matlab/helpers/" + name, "utf8") }));
6const src = readFileSync(process.argv[2], "utf8");
7let t = performance.now();
8const { sys, warnings } = runScript(src, helpers, s => process.stdout.write(s));
9console.log("script ms", (performance.now() - t).toFixed(0), warnings);
10sys.duration = Number(process.argv[3] ?? 0.2);
11t = performance.now();
12const modes = computeModes(sys, numblEig, isPlanar(sys) ? "transverse" : "full");
13console.log("modes ms", (performance.now() - t).toFixed(0), modes?.freqs.slice(0, 6));
14const r = simulate(sys, { modes });
15console.log({ dt: r.dt, substeps: r.substeps, omegaMax: r.omegaMax, ms: r.elapsedMs.toFixed(0), drift: r.energyDrift, resid: r.residualForce, maxT: r.maxTension, warnings: r.warnings, aborted: r.aborted });
16const msPerSec = r.elapsedMs / sys.duration; console.log("x real time:", (msPerSec / 1000).toFixed(1));
17let peak = 0; for (const a of r.audio) peak = Math.max(peak, Math.abs(a)); console.log("peak listener disp", peak);
↑↓ move↵openescclose