import { readFileSync, readdirSync } from "fs"; import { runScript, numblEig } from "../src/sim/runScript"; import { simulate } from "../src/sim/solver"; import { computeModes, isPlanar } from "../src/sim/modes"; const helpers = readdirSync("matlab/helpers").map(name => ({ name, source: readFileSync("matlab/helpers/" + name, "utf8") })); const src = readFileSync(process.argv[2], "utf8"); let t = performance.now(); const { sys, warnings } = runScript(src, helpers, s => process.stdout.write(s)); console.log("script ms", (performance.now() - t).toFixed(0), warnings); sys.duration = Number(process.argv[3] ?? 0.2); t = performance.now(); const modes = computeModes(sys, numblEig, isPlanar(sys) ? "transverse" : "full"); console.log("modes ms", (performance.now() - t).toFixed(0), modes?.freqs.slice(0, 6)); const r = simulate(sys, { modes }); console.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 }); const msPerSec = r.elapsedMs / sys.duration; console.log("x real time:", (msPerSec / 1000).toFixed(1)); let peak = 0; for (const a of r.audio) peak = Math.max(peak, Math.abs(a)); console.log("peak listener disp", peak);