74 integer i,j,l,kdi,ksi,li,ierr
75 integer lr,lrprod,iparlr,kr,krmx,mr,mrmx,
76 # ipnr,ipnrmn,ipnrmx,iqnr,iqnrmn,iqnrmx,
77 # lc,lcmax,iparlc,ld,ldabs,kc,kcmn,kcmx,kd,ks,
78 # kdabs,ksabs,mc,mcmn,mcmx,md,ms,mdabs,msabs,
79 # ipnc,ipncmn,ipncmx,iqnc,iqncmn,iqncmx,
80 # ipnd,ipns,ipndab,ipnsab,iqnd,iqns,iqndab,
81 # kip,nrow,ncol,nelr,neli,nel,ipnrsg,ipncsg,
82 # jmc,jmr,krmn,mrmn,jkc,jkr,jkd,jmd,kcsgn,krsgn,mcsgn,mrsgn
84 double precision dsq2,dsq6,dsq15,dsq23
85 double precision ct,rpl,rmi,rz,rj,rp,ossc,fii,ra0,
86 # cpmkr,cnpr,c1,c2,c3,c4,
87 # cdfd,cnl,cplkc,cnk,z,ra1,rg1,rw1,ra2,rg2,rw2,
88 # ra,rg,rw,cliou,cgam,cplmc,wliou1,wliou2,cdff,cdffr,
89 # cdffu,cnpc,cnp,cnorm,d1,d2,sa1,sa2,sw1,sw2,clioi1,fki,
90 # clioi2,clioua,sg1,sg2,clioug,ctemp,cgamw
91 double precision cjkr,cjkc,cjmc,zeen
92 double precision d2km(2,5,5)
94 logical flk0,fld,fldmd,fdpqi,fdjkm
96 double precision ZERO,ONE
97 parameter(zero=0.0d0,one=1.0d0)
129 dsq23=dsqrt(2.0d0/3.0d0)
131 fii=0.25d0*dble(
in2*(
in2+2))
139 if ((
ipdf.eq.2) .and. (
ist.eq.0))
then
170 call anxlk(rpl,rmi,rz)
193 if((lr.gt.
lomx).and.(iparlr.ne.1))
go to 300
203 do 320 krsgn=krmn,krmx,
kdelta
209 if (krsgn.eq.0) jkr=iparlr
210 if (jkr.lt.
jkmn)
goto 320
226 do 340 mrsgn=mrmn,mrmx
267 if(
ipdf.eq.2) cdfd=cdfd+dble(mr*mr)*(rj-rp)
271 if((i*
ist).ne.kr) cdfd=cdfd+rj
282 if(mr.eq.0 .and.
jmmn.eq.1)
then
293 do 350 ipnrsg=ipnrmn,ipnrmx
300 if (ipnr.eq.0) jmr=iparlr
304 if(jmr.lt.
jmmn)
goto 350
310 if((ipnr.eq.0).and.(mr.eq.0))
then
327 do 360 iqnr=iqnrmn,iqnrmx,2
334 if (nrow.gt.
mxdim)
then
374 if((lc.gt.
lomx).and.(iparlc.ne.1))
go to 400
387 cnl=dsqrt((2.d0*lr+1.d0)*(2.d0*lc+1.d0))
393 if (nrow.eq.ncol)
then
403 do 420 kcsgn=kcmn,kcmx,
kdelta
409 if (kcsgn.eq.0) jkc=iparlc
410 if(jkc.lt.
jkmn)
go to 420
424 if((kr.eq.0).and.(kc.eq.0))
then
426 else if((kr.ne.0).and.(kc.ne.0))
then
436 if (kr+2.eq.kc .and. jkd.eq.0)
then
437 cdffr=rmi*sqrt(dble((lr+kc-1)*(lr+kc)*
438 # (lr-kc+1)*(lr-kc+2) ) )/cnk
439 else if (kr-2.eq.kc .and. jkd.eq.0)
then
440 cdffr=rmi*sqrt(dble((lr-kc-1)*(lr-kc)*
441 # (lr+kc+1)*(lr+kc+2) ) )/cnk
452 if((kdabs.le.2).and.fld)
then
453 z=w3j(lr,2,lc,kr,-kd,-kc)
459 ra1=
fad(2,kd+3)*z*cjkr
460 rg1=
fgd(2,kd+3)*z*cjkr
461 rw1=
fwd(2,kd+3)*z*cjkr
469 if((ksabs.le.2).and.fld)
then
471 z=w3j(lr,2,lc,kr,-ks,kc)
476 ra2=
fad(2,ks+3)*z*cjkr
477 rg2=
fgd(2,ks+3)*z*cjkr
478 rw2=
fwd(2,ks+3)*z*cjkr
487 ra=ra1+cplkc*cjkc*ra2
492 rg=rg1+cplkc*cjkc*rg2
493 rw=rw1+cplkc*cjkc*rw2
500 if (nrow.eq.ncol)
then
510 do 440 mcsgn=mcmn,mcmx
530 flk0 = (ld.eq.0).and.(kd.eq.0)
531 if(fld.or.(md.eq.0))
then
544 wliou1=w3j(lr,2,lc,mr,-md,-mc)
545 wliou2=w3j(lr,2,lc,mr,-ms,mc)
562 if (ld.eq.0 .and. md.eq.0)
then
570 if((
ipt.ne.0).and.(ldabs.le.
lband).and.(md.eq.0)
571 # .and.((kdabs.le.
kband).or.(ksabs.le.
kband)).and.
572 # (ipar(ks).eq.1).and.(jkd.eq.0))
then
581 if (ksi.le.li .and. abs(
xlk(li,ksi)).ge.
rndoff)
582 # cdffu=cjkc*cplkc*
xlk(li,ksi)
583 # *w3j(lr,l,lc,kr,-ks,kc)
585 if (kdi.le.li .and. abs(
xlk(li,kdi)).ge.
rndoff)
586 # cdffu=cdffu+
xlk(li,kdi)*w3j(lr,l,lc,kr,-kd,-kc)
588 if (abs(cdffu).gt.
rndoff) cdff=cdff+
589 # w3j(lr,l,lc,mr,0,-mr)*c1*cdffu
604 if (mc.eq.0.and.
jmmn.eq.1)
then
611 if (nrow.eq.ncol) ipncmn=ipnr
617 do 450 ipncsg=ipncmn,ipncmx
622 if (ipnc.eq.0) jmc=iparlc
626 if (jmc.lt.
jmmn)
goto 450
637 if((ipnc.eq.0).and.(mc.eq.0))
then
645 fdjkm=(jkd.eq.0).and.(jmd.eq.0)
647 cnorm=cnl*cnk*cnp*cpmkr
654 if((ipndab.le.2).and.(mdabs.le.2))
then
655 d1=d2km(1,ipnd+3,md+3)*wliou1
660 if((ipnsab.le.2).and.(msabs.le.2))
then
661 d2=d2km(1,ipns+3,ms+3)*wliou2
678 if (nrow.eq.ncol) iqncmn=iqnr
679 do 460 iqnc=iqncmn,iqncmx,2
686 if(.not.fldmd)
go to 470
695 fdpqi=(ipnd.eq.0).and.(iqnd.eq.0)
720 if((ipndab.eq.iqndab).and.
721 # (ipndab.le.1).and.(
in2.ne.0))
then
728 if(flk0.and.md.eq.0.and.jkd.eq.0)
then
735 kip=iqnr*iqnd+ipnr*ipnd
737 fki=dsqrt(fii-0.25d0*kip)
747 if((ipnsab.eq.iqndab).and.
748 # (ipnsab.le.1).and.(
in2.ne.0))
then
752 if(flk0.and.ms.eq.0.and.jkd.eq.0)
then
758 kip=iqnr*iqnd+ipnr*ipns
760 fki=dsqrt(fii-0.25d0*kip)
770 clioua=(sa1*d1+cjmc*cplmc*sa2*d2)
776 # (abs(rg).gt.
rndoff))
then
790 clioug=(sg1*d1+cjmc*cplmc*sg2*d2)
799 if((iqnd.eq.0).and.(abs(rw).gt.
rndoff))
812 cgamw=cnorm*(sw1*d1+cjmc*cplmc*sw2*d2)
819 cliou=cnorm*(clioua*ra+clioug*rg)+
820 # cnp*(clioi1+clioi2)
828 if(flk0.and.(md.eq.0).and.(jkd.eq.0)
851 if((abs(ossc).gt.
rndoff).and.(ipnd.eq.0).and.
852 # (md.eq.0).and.flk0.and.fdjkm)
then
855 if(iqnd.eq.0) ctemp=one
856 if ((ipnr.eq.0) .and.(lr.eq.0))
857 # ctemp=ctemp-one/dble(
in2+1)
858 cgam=cgamw+ctemp*ossc
867 if(fdpqi.and.fdjkm) cgam=cgam+cdff
881 if (nrow.eq.ncol)
then
889 if (abs(cliou).gt.
rndoff)
then
891 if (nel.gt.
mxel)
then
901 if (abs(cgam).gt.
rndoff)
then
903 if (nel.gt.
mxel)
then
930 if (ncol.gt.
mxdim)
then
double precision, pointer, save pml
double precision, pointer, save dz
double precision, pointer, save dx
subroutine cd2km(d2km, alpha, beta, gamma)
double precision, save expkzz
integer, dimension(mxdim+1), save jzmat
double precision, save expl
integer, pointer, save ist
integer, pointer, save ndim
double precision, parameter betae
double precision, dimension(2, 5), save fad
subroutine anxlk(rp, rm, rz)
integer, parameter mtxbig
integer, pointer, save mmx
integer, pointer, save ipdf
double precision, pointer, save dy
integer, pointer, save jkmn
double precision, pointer, save gamman
double precision, dimension(2, 5), save fgd
integer, dimension(mxdim+1), save kzmat
integer, dimension(mxel), save izmat
integer, pointer, save mmn
integer, pointer, save ipnmx
double precision, pointer, save psi
double precision, pointer, save pmxy
double precision, save expkxy
double precision, pointer, save djfprp
double precision, dimension(mxel), save zmat
integer, pointer, save lomx
integer, pointer, save kmn
double precision, dimension(5, 5), save xlk
double precision, pointer, save pmzz
integer, pointer, save in2
integer, pointer, save kmx
double precision, save g0
integer, pointer, save jmmn
integer, pointer, save lemx
double precision, parameter gammae
integer, parameter mtxhlt
double precision, parameter hbar
double precision, pointer, save b0
integer, parameter dimbig
double precision, dimension(2, 5), save fwd
double precision, pointer, save oss
double precision, save a0
double precision, parameter rndoff
double precision, dimension(2, mxdim), save zdiag
double precision, pointer, save djf