* test djmm * implicit real*8 (a-h,o-z) 1 print*,' enter beta (degrees), j, m and mp' read(*,*)beta,rj,rm,rmp print*,djmm(beta,rj,rm,rmp) goto 1 stop end * *===================================================================== * real*8 function djmm(beta,rj,rm,rmp) * * Computes the d-function (lower case D, of beta) * beta = angle in degreses * rj = j, rm = m, and rmp = m prime * * Definition in A.R. Edmonds, "Angular Momentum...", Princeton * Univ. Press, 1960, eq. 4.1.15 * * C.A. Bertulani, 05/13/1995 * implicit real*8 (a-h,o-z) real*8 fak(0:130) common /gf2 / fak * call GFV(50) * j=2.001*rj m=2.001*rm mp=2.001*rmp * if((j.lt.iabs(m)).or.(j.lt.iabs(mp))) go to 2 b=beta/57.295779 cb=cos(b/2.0) sb=sin(b/2.0) ja=(j+mp)/2+1 jb=(j-mp)/2+1 jc=(j+m)/2+1 jd=(j-m)/2+1 root=sqrt(fak(ja)*fak(jb)*fak(jc)*fak(jd)) minsig=0 if(m+mp.lt.0) minsig=-m-mp maxsig=j-m if(m.lt.mp) maxsig=j-mp isig=minsig dd=0.0 1 ja=isig/2+1 jb=(j-m-isig)/2+1 jc=(j-mp-isig)/2+1 jd=(m+mp+isig)/2+1 fase=(-1.0)**((j-mp-isig)/2) ic=isig+(m+mp)/2 is=j-isig-(m+mp)/2 dd=dd+fase/(fak(ja)*fak(jb)*fak(jc)*fak(jd))*cb**ic*sb**is isig=isig+2 if(isig.le.maxsig) go to 1 djmm=root*dd return *2 write(*,3) *3 format(24h error in djmm-argument) * stop end * *===================================================================== * subroutine GFV(ie) * * Calculates sign and factorials of integers and half int. * * iv(n) = (-1)**n * fak(n) = n! * fad(n) = n!! * implicit real*8 (a-h,o-z) real*8 iv(0:130),fak(0:130),fad(0:130) common /gf1 / iv common /gf2 / fak common /gf3 / fad * if (ie.gt.130) then write(12,*) 'STOP IN GFV: IE LARGER 130 ' stop endif iv(0) = +1 fak(0) = 1.d0 fad(0)=1. fad(1)=1. do 10 i=1,ie iv(i) = -iv(i-1) 10 fak(i) = i*fak(i-1) do 11 i=3,ie,2 fad(i) = i*fad(i-2) 11 continue do 12 i=2,ie,2 fad(i) = i*fad(i-2) 12 continue return end *********************************************************************