2021年2月8日月曜日

角運動量代数(2)

角運動量代数(1)からの続き

Mathematicaの関数には,かなり昔からClebshGordan係数が含まれていた。さすがに素粒子物理を専攻していたウルフラムだと思った。Mathematicaには次の関数が実装されている。

ClebschGordan[{j1,m1},{j2,m2},{j,m}] |jm〉から|j1m1〉|j2m2〉への分解に対する,クレプシュ・ゴルダン係数を与える。
ThreeJSymbol[{j1,m1},{j2,m2},{j3,m3}] ウィグナーの3-jシンボルの値を与える(m1+m2+m3=0)。
SixJSymbol[{j1,j2,j3},{j4,j5,j6}] ラカーの6-jシンボルの値を与える。

Juliaではどうかというと,WingerSymbols.jlというパッケージがあり,以下の関数が使える。
wigner3j(j1,j2,j3,m1,m2,m3=-m1-m2),wigner6j(j1,j2,j3,j4,j5,j6),clebschgordan(j1,m2,j2,m2,j3,m3=m1+m2), racahV(j1,m2,j2,m2,j3,m3=-m1-m2),racahW(j1,j2,J,j3,J12,J23)

いずれにせよ9-j symbolは実装されていないのだった。一方,PythonのSymPyにあるWignerSymbolsには,Wigner 3-j,6-j,9-j,Clebsch-Gordan係数,Racah係数,Gaunt係数が含まれている。Gaunt係数という名前は知らなかったが,換算行列要素の形では頻出する係数だ。それより,JuliaのWignerFamilies.jlというパッケージで,3-j Symbolの配列が計算されてグラフ化されているのが印象的だった。 

using WignerFamilies
# wigner3j for all j fixing j2=100, j3=60, m2=70, m3=-55, m1=-m2-m3
w3j = wigner3j_f(100, 60, 70, -55)
js = collect(eachindex(w3j))
plot(js, w3j.symbols)


図 f(j) = w3j(j,100,60,-15,70,55) (JuliaPackageから引用)


0 件のコメント: