A Julia package for computing Wigner symbols and related quantities. Forked to add 9j symbols - see branch.
Find a file
2017-09-26 10:39:58 +02:00
benchmark README and benchmarks 2017-08-11 15:32:10 +02:00
src fix depwarn for .+ in range 2017-09-26 10:39:58 +02:00
test Remove @show in tests 2017-08-12 00:22:07 +02:00
.codecov.yml WignerSymbols.jl generated files. 2017-08-08 11:23:18 +02:00
.gitignore WignerSymbols.jl generated files. 2017-08-08 11:23:18 +02:00
.travis.yml add help and more tests 2017-08-11 12:55:57 +02:00
appveyor.yml WignerSymbols.jl generated files. 2017-08-08 11:23:18 +02:00
LICENSE.md README and benchmarks 2017-08-11 15:32:10 +02:00
README.md fix broken link attempt3 2017-08-11 15:35:28 +02:00
REQUIRE first code 2017-08-08 16:57:20 +02:00

WignerSymbols

Build Status License Coverage Status codecov.io

Compute Wigner's 3j and 6j symbols, and related quantities such as Clebsch-Gordan coefficients and Racah's symbols.

Requirements

This requires a recent master edition of Julia (i.e. v0.7.0-DEV), because it depends on some changes in Base.GMP. In particular, it uses the mutating functions for reducing allocation overhead while working with BigInts (namely JuliaLang/julia#21654). It also depends on Primes.jl for generating prime numbers.

Installation

Until it is registered, install via Pkg.clone("https://github.com/Jutho/WignerSymbols.jl.git").

Available functions

While the following function signatures are probably self-explanatory, you can query help for them in the Julia REPL to get further details.

  • wigner3j(T::Type{<:AbstractFloat} = Float64, j₁, j₂, j₃, m₁, m₂, m₃ = -m₂-m₁) -> ::T
  • wigner6j(T::Type{<:AbstractFloat} = Float64, j₁, j₂, j₃, j₄, j₅, j₆) -> ::T
  • clebschgordan(T::Type{<:AbstractFloat} = Float64, j₁, j₂, j₃, m₁, m₂, m₃ = m₁+m₂) -> ::T
  • racahV(T::Type{<:AbstractFloat} = Float64, j₁, j₂, j₃, m₁, m₂, m₃ = -m₁-m₂) -> ::T
  • racahW(T::Type{<:AbstractFloat} = Float64, j₁, j₂, J, j₃, J₁₂, J₂₃) -> ::T
  • δ(j₁, j₂, j₃) -> ::Bool
  • Δ(T::Type{<:AbstractFloat} = Float64, j₁, j₂, j₃) -> ::T

Implementation

Largely based on reading the paper (but not the code):

[1] H. T. Johansson and C. Forssén, SIAM Journal on Scientific Compututing 38 (2016) 376-384 (arXiv:1504.08329)

with some additional modifications to further improve efficiency for large j (angular momenta quantum numbers).

In particular, 3j and 6j symbols are computed exactly, in the format √(r) * s where r and s are exactly computed as Rational{BigInt}, using an intermediate representation based on prime number factorization. As a consequence thereof, all of the above functions can be called requesting BigFloat precision for the result. There is currently no convenient syntax for obtaining r and s directly (see TODO).

Most intermediate calculations (prime factorizations of numbers and their factorials, conversion between prime powers and BigInts) are cached to improve the efficiency, but this can result in large use of memory when querying Wigner symbols for large values of j.

Also uses ideas from

[2] J. Rasch and A. C. H. Yu, SIAM Journal on Scientific Compututing 25 (2003), 14161428

for caching the computed 3j and 6j symbols.

Benchmark

Todo