WignerSymbols.jl/benchmark/benchmarks.jl
2019-08-07 10:09:22 +02:00

106 lines
3.2 KiB
Julia

# some random benchmarks; for j=50000 you need more than 8GB of memory
using WignerSymbols
@time wigner3j(BigFloat, 15, 30, 40, 2, 2, -4)
@time wigner3j(BigFloat, 200, 200, 200, -10, 60, -50)
@time wigner3j(BigFloat, 50000, 50000, 50000, 1000, -6000, 5000)
j = 8
@time wigner6j(BigFloat, j, j, j, j, j, j)
j = 200
@time wigner6j(BigFloat, j, j, j, j, j, j)
j = 600
@time wigner6j(BigFloat, j, j, j, j, j, j)
j = 10000
@time wigner6j(BigFloat, j, j, j, j, j, j)
j = 50000
@time wigner6j(BigFloat, j, j, j, j, j, j)
function compute3jmax(jmax)
for j₁ = 0:1//2:jmax
for j₂ = 0:1//2:j₁
for j₃ = abs(j₁-j₂):j₂
if isinteger(j₁)
m₁ = 0
M₂ = min(j₂, j₃-m₁)
for m₂ = M₂:(-1):0
wigner3j(Float64, j₁,j₂,j₃,0, m₂)
end
for m₁ = 1:j₁
M₂ = min(j₂, j₃-m₁)
for m₂ = -M₂:M₂
wigner3j(Float64, j₁, j₂, j₃, m₁, m₂)
end
end
else
for m₁ = 1//2:j₁
M₂ = min(j₂, j₃-m₁)
for m₂ = -M₂:M₂
wigner3j(Float64, j₁, j₂, j₃, m₁, m₂)
end
end
end
end
end
end
return nothing
end
@time compute3jmax(10)
function computeinteger3jmax(jmax)
for j₁ = 0:jmax
for j₂ = 0:j₁
for j₃ = abs(j₁-j₂):j₂
m₁ = 0
M₂ = min(j₂, j₃-m₁)
for m₂ = M₂:(-1):0
wigner3j(Float64, j₁,j₂,j₃,0, m₂)
end
for m₁ = 1:j₁
M₂ = min(j₂, j₃-m₁)
for m₂ = -M₂:M₂
wigner3j(Float64, j₁, j₂, j₃, m₁, m₂)
end
end
end
end
end
return nothing
end
function compute6jmax(jmax)
for j₁ = 0:1//2:jmax
for j₂ = 0:1//2:j₁
for j₃ = abs(j₁-j₂):j₂
for j₄ = 0:1//2:jmax
for j₅ = abs(j₃-j₄):min(jmax,j₃+j₄)
for j₆ = min(abs(j₂-j₄),abs(j₁-j₅)):min(j₂+j₄,j₁+j₅,jmax)
wigner6j(Float64, j₁, j₂, j₃, j₄, j₅, j₆)
end
end
end
end
end
end
return nothing
end
@time compute6jmax(10)
function computeinteger6jmax(jmax)
for j₁ = 0:jmax
for j₂ = 0:j₁
for j₃ = abs(j₁-j₂):j₂
for j₄ = 0:jmax
for j₅ = abs(j₃-j₄):min(jmax,j₃+j₄)
for j₆ = min(abs(j₂-j₄),abs(j₁-j₅)):min(j₂+j₄,j₁+j₅,jmax)
wigner6j(Float64, j₁, j₂, j₃, j₄, j₅, j₆)
end
end
end
end
end
end
return nothing
end