mirror of
https://github.com/tgorordo/WignerSymbols.jl.git
synced 2026-06-05 15:42:15 -07:00
106 lines
3.1 KiB
Julia
106 lines
3.1 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(j₁,j₂,j₃,0, m₂)
|
|
end
|
|
for m₁ = 1:j₁
|
|
M₂ = min(j₂, j₃-m₁)
|
|
for m₂ = -M₂:M₂
|
|
wigner3j(j₁, j₂, j₃, m₁, m₂)
|
|
end
|
|
end
|
|
else
|
|
for m₁ = 1//2:j₁
|
|
M₂ = min(j₂, j₃-m₁)
|
|
for m₂ = -M₂:M₂
|
|
wigner3j(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(j₁,j₂,j₃,0, m₂)
|
|
end
|
|
for m₁ = 1:j₁
|
|
M₂ = min(j₂, j₃-m₁)
|
|
for m₂ = -M₂:M₂
|
|
wigner3j(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(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(j₁, j₂, j₃, j₄, j₅, j₆)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return nothing
|
|
end
|