8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

BrainPad Advent CalendarAdvent Calendar 2021

Day 4

Wigner 3nj記号の実装

Last updated at Posted at 2021-12-03

Wigner 3nj記号について雑な説明

Wigner 6j記号から定義できる一連の関数で、量子力学まわりでたまに出てきます。6j, 9j, 12j, ...と続きます。
まず3j記号を定義します。リンク先にあるようにClebsch–Gordan係数の対称性をちょっといい感じにした量です。
https://en.wikipedia.org/wiki/3-j_symbol
6j記号は3j記号を用いてリンク先のように定義できます。
https://en.wikipedia.org/wiki/6-j_symbol
9j記号以降は6j記号を用いて以下のように定義されます。

第一種3nj記号

\begin{Bmatrix} j_1 & j_2 & \ldots & j_n \\ l_1 & l_2 & \ldots & l_n  \\ k_1 & k_2 & \ldots & k_n \end{Bmatrix} = \sum_x(-1)^{R_n + (n-1)x} \begin{Bmatrix} j_1 & k_1 & x \\ k_2 & j_2 & l_1 \end{Bmatrix} \begin{Bmatrix} j_2 & k_2 & x \\ k_3 & j_3 & l_2 \end{Bmatrix} \cdots \begin{Bmatrix} j_{n-1} & k_{n-1} & x \\ k_n & j_n & l_{n-1} \end{Bmatrix} \begin{Bmatrix} j_n & k_n & x \\ j_1 & k_1 & l_n \end{Bmatrix}

第二種3nj記号

\begin{bmatrix} j_1 & j_2 & \ldots & j_n \\ l_1 & l_2 & \ldots & l_n  \\ k_1 & k_2 & \ldots & k_n \end{bmatrix} = \sum_x(-1)^{R_n + nx} \begin{Bmatrix} j_1 & k_1 & x \\ k_2 & j_2 & l_1 \end{Bmatrix} \begin{Bmatrix} j_2 & k_2 & x \\ k_3 & j_3 & l_2 \end{Bmatrix} \cdots \begin{Bmatrix} j_{n-1} & k_{n-1} & x \\ k_n & j_n & l_{n-1} \end{Bmatrix} \begin{Bmatrix} j_n & k_n & x \\ k_1 & j_1 & l_n \end{Bmatrix}

$x$ は三角不等式を満たす全ての値です。また

R_n = \sum_{i=1}^n(j_i + k_i + l_i)

ここでは以下の文献の(17.1)および(17.2)式の定義を引用しました。どうやら文献によって定義がまちまちらしいです。
A. P. Yutsis, I. B. Levinson, and V. V. Vanagas, Mathematical Apparatus of the Theory of Angular Momentum (Israel Program for Scientific Translations, Jerusalem, 1962).

ご覧の通りどちらも6j記号をくるっと一周する形となっています。一種と二種は位相と、一周するときにひねりを入れるか(最後の6j記号のところ)の違いです。

実装

Rustでの実装を探してみると、すでにこの方が9j記号までは多倍長演算のライブラリを作っていました。

もともとWigner15j記号が必要だったので、このライブラリに追加するかどうか迷ったのですが、
多倍長演算でなければ一般のnに簡単に拡張できそうだったので、最初から作り直して雑に公開しました。
(READMEとかはサボって書いていない)

今回Rustが最初だったのもあり、とりあえず全部f64とかになっています。

大変だったこと

テストのために正しい値が必要だったのですが、12j記号以降はWolfram Alphaにも実装されていないようだったので、
簡単な場合に手計算などで地道に求めた値を使いました。なので一般のときには正しい値とのずれがあるかもしれません。
このあたり数値計算している人たちはどうしているのだろう。。。

8
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?