mirror of
https://github.com/tgorordo/WignerSymbols.jl.git
synced 2026-06-05 15:42:15 -07:00
README and benchmarks
This commit is contained in:
parent
1a974193eb
commit
c47faaf768
3 changed files with 160 additions and 8 deletions
106
benchmark/benchmarks.jl
Normal file
106
benchmark/benchmarks.jl
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
# 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue