The following routine calculates the Clebsch-Gordan coefficients. The output is <j1,j2;m1,m2|j,m>restart;clebsch:=proc(j1,j2,m1,m2,j,m); `if`(m=m1+m2,sqrt((2*j+1)*(j+j1-j2)!*(j+j2-j1)!*(j1+j2-j)!*(j+m)!*(j-m)!*(j1-m1)!*(j1+m1)!*(j2-m2)!*(j2+m2)!/(j1+j2+j+1)!)*add((-1)^k/k!/(j1+j2-j-k)!/(j1-m1-k)!/(j2+m2-k)!/(j-j2+m1+k)!/(j-j1-m2+k)!,k=max(0,j1+m2-j,j2-m1-j)..min(j1+j2-j,j1-m1,j2+m2)),0) end proc:For example, to find the coefficient of <5/2,2;-3/2,1/2|3/2,1/2>clebsch(5/2,2,-3/2,2,3/2,1/2);If you don't have m1+m2=m the result will automatically be zero.clebsch(5/2,2,-3/2,2,3/2,-1/2);If you sum it squared over all allowed values of j and m (which means sum over j,since m = m1 + m2) you should get 1add(clebsch(5/2,2,-3/2,2,j,1/2)**2,j=1/2..9/2);Similarly, if you sum it squared over all allowed values of m1 and m2, (keeping m = m1 + m2) you should get 1add(clebsch(5/2,2,1/2-m2,m2,3/2,1/2)**2,m2=-2..2);If you try to take |m1| > j1, |m2| > j2, |m| > j, or other illegal combinations, I'm not sure what happens. Don't do it.clebsch(5/2,1,-3/2,1,1/2,-1/2);