Vector |
l1-l2+m3 1/2 ( l1 l2 l3 ) (l1 m1 l2 m2 | l3 m3) = (-1) (2*l3+1) ( m1 m2 -m3 )
public static double ClebschGordan( double l1, double m1, double l2, double m2, double l3, double m3, out int errflag )
errflag=0 No errors.
errflag=1 Either l1 < abs(m1) or l1+abs(m1) non-integer.
errflag=2 abs(l1-l2)<= l3 <= l1+l2 not satisfied.
errflag=3 l1+l2+l3 not an integer.
errflag=4 m2max-m2min not an integer.
errflag=5 m2max less than m2min.
errflag=6 ndim less than m2max-m2min+1.
errflag=7 m1+m2-m3 is not zero.
References: ----------- 1. See routines in "threejj.cc" and "threejm.cc" for references about the calculation of the Wigner 3-j symbols. 2. C++ Implementation for the Matpack C++ Numerics and Graphics Library by Berndt M. Gammel in June 1997. Note: ----- Whenever you have to calculate a series of Clebsch-Gordan coefficients for a range of l-values or m-values you should probably use the 3-j symbol routines. These calculate the 3-j symbols iteratively for a series of l-values or m-values and are therefore much more efficient. Use the relation between Clebsch-Gordan coefficients and Wigner 3-j symbols as given above.