| 1 | ;; Coupling coefficients |
|---|
| 2 | ;; Liam Healy, Sun Mar 19 2006 - 13:30 |
|---|
| 3 | ;; Time-stamp: <2008-02-16 20:02:09EST coupling.lisp> |
|---|
| 4 | ;; $Id$ |
|---|
| 5 | |
|---|
| 6 | (in-package :gsl) |
|---|
| 7 | |
|---|
| 8 | #| |
|---|
| 9 | ;;; FDL |
|---|
| 10 | The Wigner 3-j, 6-j and 9-j symbols give the coupling coefficients for |
|---|
| 11 | combined angular momentum vectors. Since the arguments of the standard |
|---|
| 12 | coupling coefficient functions are integer or half-integer, the |
|---|
| 13 | arguments of the following functions are, by convention, integers equal |
|---|
| 14 | to twice the actual spin value. For information on the 3-j coefficients |
|---|
| 15 | see Abramowitz & Stegun, Section 27.9. The functions described in this |
|---|
| 16 | section are declared in the header file gsl_sf_coupling.h. |
|---|
| 17 | |# |
|---|
| 18 | |
|---|
| 19 | (defmfun coupling-3j (two-ja two-jb two-jc two-ma two-mb two-mc) |
|---|
| 20 | "gsl_sf_coupling_3j_e" |
|---|
| 21 | ((two-ja :int) (two-jb :int) (two-jc :int) |
|---|
| 22 | (two-ma :int) (two-mb :int) (two-mc :int) |
|---|
| 23 | (ret sf-result)) |
|---|
| 24 | :documentation ; FDL |
|---|
| 25 | "The Wigner 3-j coefficient, |
|---|
| 26 | \pmatrix{ja & jb & jc\cr |
|---|
| 27 | ma & mb & mc\cr} |
|---|
| 28 | where the arguments are given in half-integer units, |
|---|
| 29 | ja = two_ja/2, ma = two_ma/2, etc.") |
|---|
| 30 | |
|---|
| 31 | (defmfun coupling-6j (two-ja two-jb two-jc two-jd two-je two-jf) |
|---|
| 32 | "gsl_sf_coupling_6j_e" |
|---|
| 33 | ((two-ja :int) (two-jb :int) (two-jc :int) |
|---|
| 34 | (two-jd :int) (two-je :int) (two-jf :int) |
|---|
| 35 | (ret sf-result)) |
|---|
| 36 | :documentation ; FDL |
|---|
| 37 | "The Wigner 6-j coefficient, |
|---|
| 38 | ja & jb & jc |
|---|
| 39 | jd & je & jf |
|---|
| 40 | where the arguments are given in half-integer units, ja = |
|---|
| 41 | two_ja/2, ma = two_ma/2, etc.") |
|---|
| 42 | |
|---|
| 43 | (defmfun coupling-9j |
|---|
| 44 | (two-ja two-jb two-jc two-jd two-je two-jf two-jg two-jh two-ji) |
|---|
| 45 | "gsl_sf_coupling_9j_e" |
|---|
| 46 | ((two-ja :int) (two-jb :int) (two-jc :int) |
|---|
| 47 | (two-jd :int) (two-je :int) (two-jf :int) |
|---|
| 48 | (two-jg :int) (two-jh :int) (two-ji :int) |
|---|
| 49 | (ret sf-result)) |
|---|
| 50 | :documentation ; FDL |
|---|
| 51 | "The Wigner 9-j coefficient, |
|---|
| 52 | ja & jb & jc |
|---|
| 53 | jd & je & jf |
|---|
| 54 | jg & jh & ji |
|---|
| 55 | where the arguments are given in half-integer units, |
|---|
| 56 | ja = two_ja/2, ma = two_ma/2, etc.") |
|---|
| 57 | |
|---|
| 58 | ;; Check with online calculator http://www-stone.ch.cam.ac.uk/wigner.html |
|---|
| 59 | #| |
|---|
| 60 | (make-tests coupling |
|---|
| 61 | (coupling-3j 0 1 1 0 1 -1) |
|---|
| 62 | (coupling-6j 1 1 2 0 2 1) |
|---|
| 63 | (coupling-9j 1 1 2 1 2 1 2 1 1)) |
|---|
| 64 | |# |
|---|
| 65 | |
|---|
| 66 | (LISP-UNIT:DEFINE-TEST COUPLING |
|---|
| 67 | (LISP-UNIT::ASSERT-NUMERICAL-EQUAL |
|---|
| 68 | (LIST 0.7071067811865475d0 3.14018491736755d-16) |
|---|
| 69 | (MULTIPLE-VALUE-LIST (COUPLING-3J 0 1 1 0 1 -1))) |
|---|
| 70 | (LISP-UNIT::ASSERT-NUMERICAL-EQUAL |
|---|
| 71 | (LIST 0.408248290463863d0 5.438959822042073d-16) |
|---|
| 72 | (MULTIPLE-VALUE-LIST (COUPLING-6J 1 1 2 0 2 1))) |
|---|
| 73 | (LISP-UNIT::ASSERT-NUMERICAL-EQUAL |
|---|
| 74 | (LIST 0.1388888888888889d0 6.638400825147663d-16) |
|---|
| 75 | (MULTIPLE-VALUE-LIST (COUPLING-9J 1 1 2 1 2 1 2 1 1)))) |
|---|