78 subroutine pmatrl(bss,ierr)
91 integer ierr,bss(5,
mxdim)
93 integer i,l,kdi,ksi,li
94 integer lr,lrprod,kr,krmx,mr,mrmx,
95 # ipnr,ipnrmn,ipnrmx,iqnr,iqnrmn,iqnrmx,
96 # lc,lcmax,ld,ldabs,kc,kcmn,kcmx,kd,ks,
97 # kdabs,ksabs,mc,mcmn,mcmx,md,ms,mdabs,msabs,
98 # ipnc,ipncmn,ipncmx,iqnc,iqncmn,iqncmx,
99 # ipnd,ipns,ipndab,ipnsab,iqnd,iqns,iqndab,
100 # kip,nrow,ncol,nelr,neli,nel
101 integer ioldlr,ioldkr,ioldmr,ioldpnr,ioldlc,ioldkc,ioldmc,
102 # ioldpnc,iparlr,iparlc,jkc,jkr,jkd,jmc,jmr,jmd,
103 # krsgn,mrsgn,kcsgn,mcsgn,ipnrsg,ipncsg
105 double precision dsq2,dsq6,dsq15,dsq23
106 double precision ct,rpl,rmi,rz,rj,rp,ossc,fii,
107 # cpmkr,cnpr,c1,c2,c3,c4,
108 # cdfd,cnl,cplkc,cnk,z,ra0,ra,rg,rw,ra1,rg1,rw1,
109 # ra2,rg2,rw2,cliou,cgam,cplmc,wliou1,wliou2,cdff,cdffr,
110 # cdffu,cnpc,cnp,cnorm,d1,d2,sa1,clioi1,fki,cgamw,cjmc,cjkr,
111 # cjkc,sa2,clioi2,clioua,sg1,sg2,sw1,sw2,clioug,ctemp,zeen
112 double precision d2km(2,5,5)
114 logical flk0,fld,fldmd,fdpqi,fdjkm
115 logical newlr,newkr,newmr,newpnr,newlc,newkc,newmc,newpnc
117 double precision ZERO,ONE
118 parameter(zero=0.0d0,one=1.0d0)
155 dsq23=dsqrt(2.0d0/3.0d0)
157 fii=0.25d0*dble(
in2*(
in2+2))
167 if ((
ipdf.eq.2) .and. (
ist.eq.0))
then
198 call anxlk(rpl,rmi,rz)
224 newkr=newlr.or.(krsgn.ne.ioldkr)
225 newmr=newkr.or.(mrsgn.ne.ioldmr)
226 newpnr=newmr.or.(ipnrsg.ne.ioldpnr)
238 if (krsgn.eq.0) jkr=iparlr
275 if(
ipdf.eq.2) cdfd=cdfd+dble(mr*mr)*(rj-rp)
279 if((i*
ist).ne.kr) cdfd=cdfd+rj
288 if (ipnr.eq.0) jmr=iparlr
293 if((ipnr.eq.0).and.(mr.eq.0))
then
322 do 300 ncol=nrow,
ndim
330 newkc=newlc.or.(kcsgn.ne.ioldkc)
331 newmc=newkc.or.(mcsgn.ne.ioldmc)
332 newpnc=newmc.or.(ipncsg.ne.ioldpnc)
336 if (lc.gt.lcmax)
goto 350
347 cnl=dsqrt((2.d0*lr+1.d0)*(2.d0*lc+1.d0))
358 if (kcsgn.eq.0) jkc=iparlc
370 if ((kr.eq.0).and.(kc.eq.0))
then
372 else if ((kr.ne.0).and.(kc.ne.0))
then
382 if (kr+2.eq.kc .and. jkd.eq.0)
then
383 cdffr=rmi*sqrt(dble((lr+kc-1)*(lr+kc)*
384 # (lr-kc+1)*(lr-kc+2) ) )/cnk
385 else if (kr-2.eq.kc .and. jkd.eq.0)
then
386 cdffr=rmi*sqrt(dble((lr-kc-1)*(lr-kc)*
387 # (lr+kc+1)*(lr+kc+2) ) )/cnk
398 if ((kdabs.le.2).and.fld)
then
399 z=w3j(lr,2,lc,kr,-kd,-kc)
405 ra1=
fad(2,kd+3)*z*cjkr
406 rg1=
fgd(2,kd+3)*z*cjkr
407 rw1=
fwd(2,kd+3)*z*cjkr
415 if ((ksabs.le.2).and.fld)
then
416 z=w3j(lr,2,lc,kr,-ks,kc)
422 ra2=
fad(2,ks+3)*z*cjkr
423 rg2=
fgd(2,ks+3)*z*cjkr
424 rw2=
fwd(2,ks+3)*z*cjkr
433 ra=ra1+cplkc*cjkc*ra2
438 rg=rg1+cplkc*cjkc*rg2
439 rw=rw1+cplkc*cjkc*rw2
465 flk0=(ld.eq.0).and.(kd.eq.0)
466 if(fld.or.(md.eq.0))
then
479 wliou1=w3j(lr,2,lc,mr,-md,-mc)
480 wliou2=w3j(lr,2,lc,mr,-ms,mc)
497 if (ld.eq.0 .and. md.eq.0)
then
505 if((
ipt.ne.0).and.(ldabs.le.
lband).and.(md.eq.0).and.
507 # (ipar(ks).eq.1).and.(jkd.eq.0))
then
518 if (ksi.le.li.and. abs(
xlk(li,ksi)).ge.
rndoff)
519 # cdffu=cjkc*cplkc*
xlk(li,ksi)
520 # *w3j(lr,l,lc,kr,-ks,kc)
522 if (kdi.le.li.and. abs(
xlk(li,kdi)).ge.
rndoff)
523 # cdffu=cdffu+
xlk(li,kdi)*w3j(lr,l,lc,kr,-kd,-kc)
525 if (abs(cdffu).gt.
rndoff)
then
526 cdff=cdff+w3j(lr,l,lc,mr,0,-mr)*c1*cdffu
543 if (ipnc.eq.0) jmc=iparlc
554 if((ipnc.eq.0).and.(mc.eq.0))
then
562 fdjkm=(jkd.eq.0).and.(jmd.eq.0)
564 cnorm=cnl*cnk*cnp*cpmkr
570 if((ipndab.le.2).and.(mdabs.le.2))
then
571 d1=d2km(1,ipnd+3,md+3)*wliou1
576 if((ipnsab.le.2).and.(msabs.le.2))
then
577 d2=d2km(1,ipns+3,ms+3)*wliou2
595 fdpqi=(ipnd.eq.0).and.(iqnd.eq.0)
619 if((ipndab.eq.iqndab).and.
620 # (ipndab.le.1).and.(
in2.ne.0))
then
627 if(flk0.and.md.eq.0.and.jkd.eq.0)
then
633 kip=iqnr*iqnd+ipnr*ipnd
635 fki=dsqrt(fii-0.25d0*kip)
645 if((ipnsab.eq.iqndab).and.
646 # (ipnsab.le.1).and.(
in2.ne.0))
then
650 if(flk0.and.ms.eq.0.and.jkd.eq.0)
then
656 kip=iqnr*iqnd+ipnr*ipns
658 fki=dsqrt(fii-0.25d0*kip)
668 clioua=(sa1*d1+cjmc*cplmc*sa2*d2)
673 if((iqnd.eq.0).and.(abs(rg).gt.
rndoff))
then
685 clioug=(sg1*d1+cjmc*cplmc*sg2*d2)
694 if((iqnd.eq.0).and.(abs(rw).gt.
rndoff))
then
706 cgamw=cnorm*(sw1*d1+cjmc*cplmc*sw2*d2)*rw
712 cliou=cnorm*(clioua*ra+clioug*rg)+
713 # cnp*(clioi1+clioi2)
721 if (flk0.and.(md.eq.0).and.(jkd.eq.0)
744 if((abs(ossc).gt.
rndoff).and.(ipnd.eq.0).and.
745 # (md.eq.0).and.flk0.and.fdjkm)
then
748 if(iqnd.eq.0) ctemp=one
749 if((ipnr.eq.0).and.(lr.eq.0))
750 # ctemp=ctemp-one/dble(
in2+1)
752 cgam=cgamw+ctemp*ossc
760 if(fdpqi.and.fdjkm) cgam=cgam+cdff
775 if (nrow.eq.ncol)
then
784 if (abs(cliou).gt.
rndoff)
then
786 if (nel.gt.
mxel)
then
796 if (abs(cgam).gt.
rndoff)
then
798 if (nel.gt.
mxel)
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
subroutine pmatrl(bss, ierr)
integer, pointer, save ipdf
double precision, pointer, save dy
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
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 kmn
double precision, dimension(5, 5), save xlk
double precision, pointer, save pmzz
integer, pointer, save in2
double precision, save g0
integer, pointer, save lemx
double precision, parameter gammae
integer, parameter mtxhlt
double precision, parameter hbar
double precision, pointer, save b0
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