import { RESULTS_REPO_URL } from "../results"; const REPO_URL = "https://github.com/concept-collection/fastandaccurate"; export function AboutPage() { const cliUrl = `https://concept-collection.github.io/fastandaccurate/cli.tgz?v=${__BUILD_ID__}`; return ( <>

← problems

About

fastandaccurate benchmarks PDE solvers on speed and accuracy together. Each problem is posed in the continuum, with an exact or highly accurate reference solution; a solver chooses its own discretization and is scored at problem-specified evaluation points. A problem defines its own solver interface and a short list of official instances (parameter combinations) in a written specification, so every solver is compared on identical inputs. Solvers are MATLAB function files. Most run via{" "} numbl, in the browser and from the command line alike; some run only in real MATLAB through the command line, and their results are marked as not reproducible in the browser.

Measurement

The central object is the work-precision curve: error against compute time, traced out as the solver's resolution parameter varies. Errors are measured at a fixed set of evaluation points defined per instance, relative to the reference solution. Timing is two untimed warmup runs followed by timed runs, of which the fastest is reported: interference only ever adds time, so the fastest run is the least contaminated estimate of the solver's own cost. How many timed runs is not fixed but set by a time budget: a point keeps repeating until it has used about half a second, with a floor of five runs and a cap of fifty, so a solve that takes a fraction of a millisecond is sampled fifty times rather than five, and its reported time stops depending on what else the machine happened to be doing. A run includes the solver's own discretization, assembly, solve, and evaluation. Curves are traced in order of the solver's resolution parameter, and may double back in time, since a solver's cost need not increase with resolution.

Results and provenance

Results are JSON files in{" "} fastandaccurate-results, added by pull request; the site reads that repository statically. Every result carries its provenance: the instance spec and its hash, solver id and version, timing protocol, runtime, numbl version, and machine. Result files are produced by the command line; solvers included on the site can also be rerun in the browser, directly on the problem page, to compare against the committed curves. Results from solvers outside the repository enter the same way and are marked as not reproducible in the browser.

Running outside the browser

The command line installs from this site itself (node 20 or newer; nothing on the npm registry):

{`npx ${cliUrl} run --label "my workstation"`}

This runs the standard sweeps and writes one result JSON per instance and solver. Useful flags: --instance <id>,{" "} --solver <id>, --repeats N (the minimum timed runs per point), --time-budget S,{" "} --max-n N, --out dir. To benchmark your own solver, point the harness at a MATLAB function file implementing the problem's solver interface:

{`npx ${cliUrl} run --solver-file my_method.m --solver-id my-method`}

The solvers that run only in real MATLAB need matlab on the PATH; the run skips them when it is absent.{" "} chunkie-dlp needs one thing more, the{" "} mip package manager on the MATLAB path, from which the harness installs chunkie and its FLAM and fmm2d dependencies on first use.

Note that npx caches by the exact URL string; the ?v={" "} suffix above ties the command to the current deployment so a later visit installs the current build.

Submitting

Result files can be loaded on a problem page (load result file) to view them against the committed curves before submitting anything. To publish results, open a pull request adding the files under{" "} results/ in the{" "} results repository. To add a solver to the site itself, so visitors can rerun it in the browser, PR the solver directory and a manifest entry to{" "} the main repository; submissions are reviewed against the problem specification, including that a solver must not special-case the known solution.

); }