You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

147 lines
4.2 KiB

subroutine pvextCfill(p1,p2,p1p2,m1s,m2s,m3s,N)
implicit none
C Calculate the form factors for massless triangle diagrams
C p1=p1sq,p2=p2sq,p1p2=(p1+p2)^2
C N is the offset in the common block
C Formula based on Ellis,Kunszt,Melnikov,Zanderighi
C Phys. Report 518 (2012) 141-250
include 'lib/TensorReduction/Include/types.f'
include 'lib/TensorReduction/Include/TRconstants.f'
include 'lib/TensorReduction/Include/TRmaxindex.f'
include 'lib/TensorReduction/Include/TRscale.f'
include 'lib/TensorReduction/Include/pvCnames.f'
include 'lib/TensorReduction/Include/pvBnames.f'
include 'lib/TensorReduction/Include/pvextBv.f'
include 'lib/TensorReduction/Include/pvextCv.f'
integer::B12,B23,B13,ep,epmj,N,j,perm(2),pvextBcache
integer,parameter::np=2
complex(dp)::G(np,np),in(2,-2:0),trI3
real(dp)::p1,p2,p1p2,m1s,m2s,m3s,f1,f2
real(dp),save::idm1(0:2),idm2(0:2)
logical,save:: first=.true.
!$omp threadprivate(first,idm1,idm2)
include 'lib/TensorReduction/Include/cplx.h'
if (first) then
first=.false.
C--idm1=1/[D-1]
idm1(0)=one/three
idm1(1)=idm1(0)*two/three
idm1(2)=idm1(1)*two/three
C--idm2=1/[D-2]
idm2(0)=half
idm2(1)=idm2(0)
idm2(2)=idm2(1)
endif
B12=pvextBcache(p1,m1s,m2s)
B23=pvextBcache(p2,m2s,m3s)
B13=pvextBcache(p1p2,m1s,m3s)
f1=m2s-m1s-p1
f2=m3s-m2s+p1-p1p2
!---double up the Gram matrix to remove factors of 1/2 in Eqs.
G(1,1)=cplx1(two*p1)
G(2,2)=cplx1(two*p2)
G(1,2)=cplx1(p1p2-p1-p2)
G(2,1)=G(1,2)
!--- initialize integrals
do ep=-2,0
do j=1,Ncc
Cv(N+j,ep)=cplx2(1d5,-1d5)
enddo
enddo
call XLUDecomp(G, 2, perm)
!Initialize scalar integral
do ep=-2,0
Cv(N+cc0,ep)=trI3(p1,p2,p1p2,m1s,m2s,m3s,musq,ep) !trI3 is a switching routine
enddo
! cz, Eq.(A.11)
in(1,:)=f1*Cv(N+cc0,:)+Bv(bb0+B13,:)-Bv(bb0+B23,:)
in(2,:)=f2*Cv(N+cc0,:)+Bv(bb0+B12,:)-Bv(bb0+B13,:)
call pvBackSubst(G,2,perm,in)
Cv(N+cc1,:)=in(1,:)
Cv(N+cc2,:)=in(2,:)
if (maxcindex .eq. 1) return
C---two index form factors
! Eq.(A.20)
do ep=-2,0
Cv(N+cc00,ep)=czip
if (ep .eq. -2) goto 20
do j=0,ep+2
epmj=ep-j
Cv(N+cc00,ep)=Cv(N+cc00,ep)
& +half*idm2(j)*(two*m1s*Cv(N+cc0,epmj)+Bv(bb0+B23,epmj)
& -f1*Cv(N+cc1,epmj)-f2*Cv(N+cc2,epmj))
enddo
20 continue
enddo
!c1 Eq.(A.12)
in(1,:)=f1*Cv(N+cc1,:)+Bv(bb1+B13,:)+Bv(bb0+B23,:)
& -two*Cv(N+cc00,:)
in(2,:)=f2*Cv(N+cc1,:)+Bv(bb1+B12,:)-Bv(bb1+B13,:)
call pvBackSubst(G,2,perm,in)
Cv(N+cc11,:)=in(1,:)
Cv(N+cc12,:)=in(2,:)
!c2 Eq.(A.13)
in(1,:)=f1*Cv(N+cc2,:)+Bv(bb1+B13,:)-Bv(bb1+B23,:)
in(2,:)=f2*Cv(N+cc2,:)-Bv(bb1+B13,:)-two*Cv(N+cc00,:)
call pvBackSubst(G,2,perm,in)
Cv(N+cc12,:)=in(1,:)
Cv(N+cc22,:)=in(2,:)
if (maxcindex .eq. 2) return
!---three index form factors
!c11 Eq.(A.21,A.22)
do ep=-2,0
Cv(N+cc001,ep)=czip
Cv(N+cc002,ep)=czip
if (ep .eq. -2) goto 30
do j=0,ep+2
epmj=ep-j
Cv(N+cc001,ep)=Cv(N+cc001,ep)
& +half*idm1(j)*(two*m1s*Cv(N+cc1,epmj)-Bv(bb0+B23,epmj)
& -f1*Cv(N+cc11,epmj)-f2*Cv(N+cc12,epmj))
Cv(N+cc002,ep)=Cv(N+cc002,ep)
& +half*idm1(j)*(two*m1s*Cv(N+cc2,epmj)+Bv(bb1+B23,epmj)
& -f1*Cv(N+cc12,epmj)-f2*Cv(N+cc22,epmj))
enddo
30 continue
enddo
!c11 Eq.(A.14)
in(1,:)=f1*Cv(N+cc11,:)+Bv(bb11+B13,:)-Bv(bb0+B23,:)
& -four*Cv(N+cc001,:)
in(2,:)=f2*Cv(N+cc11,:)+Bv(bb11+B12,:)-Bv(bb11+B13,:)
call pvBackSubst(G,2,perm,in)
Cv(N+cc111,:)=in(1,:)
Cv(N+cc112,:)=in(2,:)
!c22 Eq.(A.15)
in(1,:)=f1*Cv(N+cc22,:)+Bv(bb11+B13,:)-Bv(bb11+B23,:)
in(2,:)=f2*Cv(N+cc22,:)-Bv(bb11+B13,:)-four*Cv(N+cc002,:)
call pvBackSubst(G,2,perm,in)
Cv(N+cc122,:)=in(1,:)
Cv(N+cc222,:)=in(2,:)
!c12 Eq.(A.16)
in(1,:)=f1*Cv(N+cc12,:)+Bv(bb11+B13,:)+Bv(bb1+B23,:)
& -two*Cv(N+cc002,:)
in(2,:)=f2*Cv(N+cc12,:)-Bv(bb11+B13,:)-two*Cv(N+cc001,:)
call pvBackSubst(G,2,perm,in)
Cv(N+cc112,:)=in(1,:)
! Cv(N+cc122,:)=in(2,:)
return
end