Tests and timings

Tests and timings#

Generated from saved results by docs/scripts/generate_symsolver_results.py; nothing on this page is typed by hand.

run the tests  ──▶  results saved under tests/results/symsolver/  ──▶  docs build regenerates this page

step

command

writes

cross-backend matrix

python matrix.py run BACKEND CASE [CONFIG] in docs/dev/symbolic_solver/matrix/

the matrix store (MATRIX_STORE)

save the matrix

MATRIX_STORE=... python docs/scripts/generate_symsolver_results.py --from-store (zoomy env)

tests/results/symsolver/matrix_latest.json (rows, date, library commits)

timings

taskset -c N pytest tests/symsolver -m benchmark on an idle machine

tests/results/symsolver/timings.jsonl, timings_latest.json

render

python docs/scripts/generate_symsolver_results.py (part of the docs build)

docs/_generated/symsolver_*.md

Commit the files under tests/results/symsolver/; the docs build reads only those. How to add a case: Extending.

Cross-backend matrix#

Every backend that prints the templates must pass the same physics checks: convergence orders, exact solutions, conservation, symmetry, parallel = serial, GPU = CPU.

931 PASS, 0 FAIL (51 information rows, 18 n/a, 1 unsupported). Last run 2026-10-13; library commits: zoomy_amrex b61ed26/b8c70c4, zoomy_core 72004d4/fec2c4e, zoomy_foam 94e8516/e295ffc, zoomy_jax 91e13c0/fe752d9; rendered from matrix_latest.json of 2026-10-13.

A cell counts the checks of a case on a backend over every config (serial, MPI, GPU). Case setups and pass criteria: matrix README; every row: table.md. -: no check of its own on that backend (JAX is the reference, or the runs are counted under C6 / C7 / C9).

case

setup

jax

foam

amrex

C1

smooth: bump at rest, walls, t = 2.5

2 PASS

4 PASS

4 PASS

C2

shock: bump in flow (0.3, 0.1), walls, O2 + MOOD

1 PASS

2 PASS

2 PASS

C3

lake at rest over a bed bump, 100 steps

2 PASS

2 PASS

3 PASS

C4

channel over a bump vs Bernoulli (inflow/outflow/wall BCs)

8 PASS

12 PASS

12 PASS

C5

radial dry dam break, O2 eta + MOOD

5 PASS

4 PASS

6 PASS

C6

26 PASS

20 PASS

24 PASS

C7

18 PASS

18 PASS

18 PASS

C8

VAM(1) Chorin channel (gate 21): linear / Newton / time_order 2 / triangles

1 PASS

5 PASS

4 PASS

C9

8 PASS

-

8 PASS

C10

VAM(1) Chorin convergence: smooth wave over the bump

3 PASS

3 PASS

3 PASS

C11

1-D: smooth wave (walls), channel vs Bernoulli (inflow/outflow)

4 PASS

8 PASS

8 PASS

C12

triangles: C1 bump and C4 channel

4 PASS

8 PASS

n/a

C13

periodic in x: shifted bump in a uniform flow

6 PASS

7 PASS

7 PASS

C14

IMEX: SWE + Manning friction (implicit source), bump in flow, t = 0.3

2 PASS

4 PASS

4 PASS

C15

AD (JAX): jvp vs central FD, reverse vs forward, dJ/dg

24 PASS

n/a

n/a

C16

preCICE: coupled (2 x 100 cells, window 1e-3, O1) vs single domain

6 PASS

4 PASS

8 PASS

C17

AMR (AMReX, gate 37): covering, static patch, reflux, lake, regrid

n/a

n/a

19 PASS

C18

Euler 3-D Sod along x, y, z (n x 2 x 2), HLL, t = 0.2

8 PASS

8 PASS

8 PASS

C19

Euler 3-D smooth periodic wave, [0,1]^3, t = 0.1

6 PASS

6 PASS

6 PASS

C20

Euler 3-D walled box 16^3, centred pulse, t = 0.6

4 PASS

4 PASS

4 PASS

C21

Euler 3-D parallel: pulse 12^3 (centre 0.4), Sod along y 60 x 4 x 4

-

-

-

C22

Euler 3-D AD (JAX): pulse 10^3, dJ/dgamma, t = 0.1

6 PASS

n/a

n/a

C23

Euler 3-D cross-backend: acoustic pulse (amp 0.01, width 0.04), t = 0.3

-

4 PASS

4 PASS

C24

Euler 2-D: Sod along x, y (n x 2); periodic wave in [0,1]^2

12 PASS

12 PASS

12 PASS

C26

implicit diffusion (IMEX, Newtonian, Stress.full, nu 1e-3; gate 31), 20^2, t 0.05

-

info only

1 PASS

C27

SSP-RK time order 1 / 2 / 3 (gate 40): forced SWE, exact ODE and a smooth wave

7 PASS

6 PASS

6 PASS

C28

diffusion blocks at the boundaries (gates 41, 43): heat equation, dir0 / neu / dirL / per

30 PASS

36 PASS

24 PASS

C29

LSQ derivatives with the boundary closure (gate 44): quads, p 2 / 3, dir / neu

20 PASS

n/a

n/a

C30

LSQ polynomial reproduction (gate 39): 1-D, quads, jittered quads, triangles, hexahedra

1 PASS

n/a

n/a

C31

IMEX time order (Lie vs IMEX-SSP2(2,2,2)): SWE + Manning (C14), VAM(1) wave + Manning

7 PASS

2 PASS

2 PASS

C32

viscous shear decay between walls (SWE + Newtonian, Stress.full): u_t = nu u_yy, exact; no-slip, free-slip and split (Wall face, Dirichlet ghost) walls

19 PASS

15 PASS

15 PASS

C33

vertical viscosity of SME(2) (Newtonian + NavierSlip): uniform state, q(t) = expm(t J) q0

8 PASS

10 PASS

10 PASS

C34

in-plane viscous operator vs the exact div(h tau’), mixed derivatives (gate 45)

4 PASS

1 PASS

1 PASS

C35

restart: 0 -> T vs 0 -> T/2, restart -> T (C1 O2 adaptive; C8 increment projection)

6 PASS

6 PASS

6 PASS

C36

full Newtonian stress at level 1 (SME(1), Stress.full): periodic smooth state, IMEX

-

n/a

n/a

Failures:

  • none

Timings#

March time of representative runs (tests/symsolver/timing_cases.py), one CPU core for serial.

Per case, backend and config: the march time per cell and step (µs, of the fastest of the repetitions), the min / median march time (s) of the repetitions, ms per step, and setup / compile time (s) of the first repetition.

case

backend

config

device

cells

steps

µs/cell/step

min / median (s)

ms/step

setup / compile (s)

status

swe_o1

jax

gpu1

gpu

40000

50

0.0515

0.103 / 0.103

2.06

23.3 / 0.944

ok

swe_o1

jax

serial

cpu

40000

50

1.01

2.02 / 2.03

40.5

8.9 / 0.457

ok

swe_o1

foam

serial

-

40000

50

2.15

4.3 / 4.3

85.9

7.15 / 1.64

ok

swe_o1

amrex

gpu1

-

40000

50

0.0189

0.0378 / 0.0378

0.756

6.01 / 23.5

ok

swe_o1

amrex

serial

-

40000

50

1.3

2.59 / 2.6

51.9

5.13 / 1.7

ok

swe_o2

jax

gpu1

gpu

40000

50

0.0698

0.14 / 0.14

2.79

9.56 / 1.27

ok

swe_o2

jax

serial

cpu

40000

50

2.33

4.65 / 4.65

93

6.82 / 1.29

ok

swe_o2

foam

serial

-

40000

50

5.46

10.9 / 10.9

218

7.2 / 9.92

ok

swe_o2

amrex

gpu1

-

40000

50

0.0427

0.0853 / 0.0853

1.71

6 / 24.8

ok

swe_o2

amrex

serial

-

40000

50

3.24

6.48 / 6.49

130

5.11 / 10.4

ok

vam1_chorin

jax

gpu1

gpu pressure=amgx

4000

8

5.68

0.182 / 0.182

22.7

41.5 / 19.6

ok

vam1_chorin

jax

serial

cpu pressure=pyamg

4000

8

21.9

0.7 / 0.734

87.5

57.1 / 12.6

ok

vam1_chorin

foam

serial

-

4000

8

122

3.9 / 3.9

487

10.7 / 50.3

ok

vam1_chorin

amrex

gpu1

-

4000

8

141

4.51 / 4.51

563

10.3 / 67.3

ok

vam1_chorin

amrex

serial

-

4000

8

214

6.83 / 6.83

854

9.67 / 51.9

ok

imex_swe

jax

gpu1

gpu

10000

50

0.174

0.0869 / 0.0869

1.74

8.76 / 5.69

ok

imex_swe

jax

serial

cpu

10000

50

2.87

1.43 / 1.44

28.7

8.38 / 6.09

ok

imex_swe

foam

serial

-

10000

50

10.5

5.26 / 5.26

105

5.87 / 10.1

ok

imex_swe

amrex

gpu1

-

10000

50

0.143

0.0715 / 0.0715

1.43

5.55 / 25.5

ok

imex_swe

amrex

serial

-

10000

50

3.99

1.99 / 2

39.9

4.98 / 10.8

ok

euler3d_o1

jax

gpu1

gpu

64000

40

0.00396

0.0101 / 0.0102

0.253

6.17 / 0.588

ok

euler3d_o1

jax

serial

cpu

64000

40

0.355

0.91 / 0.91

22.7

5.71 / 0.875

ok

euler3d_o1

foam

serial

-

64000

40

1.64

4.2 / 4.2

105

7.14 / 8.49

ok

euler3d_o1

amrex

gpu1

-

64000

40

0.00361

0.00924 / 0.00925

0.231

2.81 / 23.8

ok

euler3d_o1

amrex

serial

-

64000

40

0.383

0.98 / 0.983

24.5

2.21 / 8.94

ok

euler3d_o2

jax

gpu1

gpu

64000

40

0.0397

0.102 / 0.102

2.54

5.39 / 6.83

ok

euler3d_o2

jax

serial

cpu

64000

40

2.4

6.15 / 6.16

154

4.18 / 1.92

ok

euler3d_o2

foam

serial

-

64000

40

4.01

10.3 / 10.3

257

7.11 / 8.06

ok

euler3d_o2

amrex

gpu1

-

64000

40

0.0172

0.0441 / 0.0441

1.1

2.82 / 24.2

ok

euler3d_o2

amrex

serial

-

64000

40

3.13

8 / 8.01

200

2.22 / 8.92

ok

diffusion_impl

jax

gpu1

gpu

2304

10

1.78

0.0409 / 0.0412

4.09

22.1 / 18

ok

diffusion_impl

jax

serial

cpu

2304

10

9.5

0.219 / 0.219

21.9

22.7 / 13

ok

diffusion_impl

foam

serial

-

2304

10

659

15.2 / 15.4

1.52e+03

15 / 16.3

ok

diffusion_impl

amrex

gpu1

-

2304

10

3.31

0.0762 / 0.0762

7.62

15 / 34.3

ok

diffusion_impl

amrex

serial

-

2304

10

14.5

0.333 / 0.335

33.3

14.1 / 17.5

ok

Machines (records grouped by host, hardware, pinning and library commits):

host

CPU

GPU

cores pinned (cpus)

wave speed

libraries

dates

68G-gaia

INTEL(R) XEON(R) PLATINUM 8568Y+

NVIDIA L40S

1 (44)

power

superrepo c02eed4f, zoomy_amrex 4a7067d, zoomy_core 2f2ac62, zoomy_foam a71bff0, zoomy_jax 276cedb

2026-10-12 .. 2026-10-12

68G-gaia

INTEL(R) XEON(R) PLATINUM 8568Y+

NVIDIA L40S

1 (44)

power

superrepo 9a5f303f, zoomy_amrex 0270878, zoomy_core 6cbf885, zoomy_foam 250b152, zoomy_jax 4b2ce3f

2026-10-12 .. 2026-10-12