1import { RESULTS_REPO_URL } from "../results";
3const REPO_URL = "https://github.com/concept-collection/fastandaccurate";
5export function AboutPage() {
6 const cliUrl = `https://concept-collection.github.io/fastandaccurate/cli.tgz?v=${__BUILD_ID__}`;
7 return (
8 <>
9 <p className="small">
10 <a href="#/">← problems</a>
11 </p>
12 <h1>About</h1>
13 <p>
14 fastandaccurate benchmarks PDE solvers on speed and accuracy
15 together. Each <strong>problem</strong> is posed in the continuum,
16 with an exact or highly accurate reference solution; a solver chooses
17 its own discretization and is scored at problem-specified evaluation
18 points. A problem defines its own solver interface and a short list
19 of official <strong>instances</strong> (parameter combinations) in a
20 written specification, so every solver is compared on identical
21 inputs. The solvers on this site are MATLAB function files run by{" "}
22 <a href="https://numbl.org">numbl</a>, client side; the identical
23 harness runs from the command line.
24 </p>
26 <h2>Measurement</h2>
27 <p>
28 The central object is the <strong>work-precision curve</strong>:
29 error against compute time, traced out as the solver's resolution
30 parameter varies. Errors are measured at a fixed set of evaluation
31 points defined per instance, relative to the reference solution.
32 Timing is one untimed warmup run (which absorbs JIT compilation),
33 then the median of repeated timed runs; a run includes the solver's
34 own discretization, assembly, solve, and evaluation.
35 </p>
37 <h2>Results and provenance</h2>
38 <p>
39 Results are JSON files in{" "}
40 <a href={RESULTS_REPO_URL}>fastandaccurate-results</a>, added by pull
41 request; the site reads that repository statically. Every result
42 carries its provenance: the instance spec and its hash, solver id and
43 version, timing protocol, runtime, numbl version, and machine.
44 Result files are produced by the command line; solvers included on
45 the site can also be rerun in the browser, directly on the problem
46 page, to compare against the committed curves. Results from solvers
47 outside the repository (and, in the future, from other languages and
48 hardware) enter the same way and are marked as not reproducible in
49 the browser.
50 </p>
52 <h2>Running outside the browser</h2>
53 <p>
54 The command line installs from this site itself (node 20 or newer;
55 nothing on the npm registry):
56 </p>
57 <pre>{`npx ${cliUrl} run --label "my workstation"`}</pre>
58 <p>
59 This runs the standard sweeps and writes one result JSON per instance
60 and solver. Useful flags: <code>--instance <id></code>,{" "}
61 <code>--solver <id></code>, <code>--repeats N</code>,{" "}
62 <code>--max-n N</code>, <code>--out dir</code>. To benchmark your own
63 solver, point the harness at a MATLAB function file implementing the
64 problem's solver interface:
65 </p>
66 <pre>{`npx ${cliUrl} run --solver-file my_method.m --solver-id my-method`}</pre>
67 <p className="small muted">
68 Note that npx caches by the exact URL string; the <code>?v=</code>{" "}
69 suffix above ties the command to the current deployment so a later
70 visit installs the current build.
71 </p>
73 <h2>Submitting</h2>
74 <p>
75 Result files can be loaded on a problem page (load result file) to
76 view them against the committed curves before submitting anything. To
77 publish results, open a pull request adding the files under{" "}
78 <code>results/</code> in the{" "}
79 <a href={RESULTS_REPO_URL}>results repository</a>. To add a solver to
80 the site itself, so visitors can rerun it in the browser, PR the
81 solver directory and a manifest entry to{" "}
82 <a href={REPO_URL}>the main repository</a>; submissions are reviewed
83 against the problem specification, including that a solver must not
84 special-case the known solution.
85 </p>
86 </>
87 );
88}