Benchmark my WignerSymbol library and GNU-GSL
library's gsl_sf_coupling_?j
functions.
The error is evaluated using wigxjpf library, which can evaluate Wigner 3j, 6j and 9j symbols accurately using prime factorisation and multi-word integer arithmetic.
All of the following calculations include half integer arguments.
See src/error.cpp
for details.
The gsl_sf_coupling_6j
will throw error because gamma
function overflow at Jmax == 43
.
Because the 9j calculation is too slow, the error statistics are only performed on part of the possible arguments. See src/error.cpp
for details. So the following results are not guaranteed to cover the exact max error.
See src/bench.cpp
for details.
Calculate all possible Wigner 3j symbol up to Jmax.
Jmax | 10 | 15 | 20 | 25 | 30 |
---|---|---|---|---|---|
wigner_3j(my) | <1ms | 6ms | 20ms | 64ms | 144ms |
gsl_sf_coupling_3j | 14ms | 103ms | 446ms | 1.52s | 4.26s |
wig3jj(wigxjpf) | 8ms | 77ms | 422ms | 1.55s | 4.72s |
Calculate all possible Wigner 6j symbol up to Jmax.
Jmax | 10 | 15 | 20 | 25 | 30 |
---|---|---|---|---|---|
wigner_6j(my) | 7ms | 75ms | 327ms | 1.48s | 3.97s |
gsl_sf_coupling_6j | 41ms | 455ms | 2.43s | 9.84s | 32.4s |
wig6jj(wigxjpf) | 82ms | 1.01s | 6.90s | 32.1s | 118s |
Calculate all possible Wigner 9j symbol up to Jmax.
Jmax | 4 | 6 | 8 | 10 | 12 |
---|---|---|---|---|---|
wigner_9j(my) | 8ms | 219ms | 2.11s | 15.9s | 91.9s |
gsl_sf_coupling_9j | 125ms | 2.39s | 28.8s | 198s | 1225s |
wig9jj(wigxjpf) | 78ms | 2.47s | 31.4s | 276s | 1977s |