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.
 
 
 
 
 
 

306 lines
12 KiB

c ------------------------------------------------
double complex function HPL3ar0(n1,n2,n3,x)
implicit none
integer n1,n2,n3,j,bcflag
double complex x,ris,myi,llx
double precision pi, zeta2, zeta3,ll2,xre
pi=3.1415926535897932385D0
zeta3=1.20205690315959428539973816151d0
zeta2=pi**2/6d0
myi = dcmplx(0d0,1d0)
ll2 = dlog(2d0)
bcflag = 0
j=1+(n3+1)*1+(n2+1)*3+(n1+1)*9
ris = dcmplx(0d0,0d0)
c--- +i*epsilon to get branch cuts right ---
if (dimag(x).eq.0d0) then
x = x + dcmplx(0d0,1d-60)
bcflag = 1
endif
c---
select case(j)
case(1) !-1-1-1
ris = (x**3)/6d0 - (x**4)/4d0 + (7d0*x**5)/
& 24d0 - (5d0*x**6)/16d0 + (29d0*x**7)/90d0 - (469d0*x**8
& )/1440d0 + (29531d0*x**9)/90720d0 - (1303d0*x**10)/4032
& d0
case(2) !-1-10
llx = log(x)
ris = -((3d0*x**2)/4d0) + (7d0*x**3)/12d0 -
& (131d0*x**4)/288d0 + (53d0*x**5)/144d0 - (2213d0*x**6)
& /7200d0 + (947d0*x**7)/3600d0 - (647707d0*x**8)/2822400
& d0 + (1290829d0*x**9)/6350400d0 - (11574649d0*x**10)/63
& 504000d0 + (x**2*llx)/2d0 - (x**3*llx)/2d0 + (11d0*x**4
& *llx)/24d0 - (5d0*x**5*llx)/12d0 + (137d0*x**6*llx)/360
& d0 - (7d0*x**7*llx)/20d0 + (363d0*x**8*llx)/1120d0 - (7
& 61d0*x**9*llx)/2520d0 + (7129d0*x**10*llx)/25200d0
case(3) !-1-11
ris = (x**3)/6d0 - (x**4)/6d0 + (7d0*x**5)/
& 40d0 - (119d0*x**6)/720d0 + (101d0*x**7)/630d0 - (305d0
& *x**8)/2016d0 + (13157d0*x**9)/90720d0 - (41603d0*x**10
& )/302400d0
case(4) !-10-1
ris = (x**2)/2d0 - (5d0*x**3)/12d0 + (49d0*
& x**4)/144d0 - (41d0*x**5)/144d0 + (5269d0*x**6)/21600d0
& - (767d0*x**7)/3600d0 + (266681d0*x**8)/1411200d0 - (1
& 077749d0*x**9)/6350400d0 + (9778141d0*x**10)/63504000d0
case(5) !-100
llx = log(x)
ris = x - (x**2)/8d0 + (x**3)/27d0 - (x**4)
& /64d0 + (x**5)/125d0 - (x**6)/216d0 + (x**7)/343d0 - (x
& **8)/512d0 + (x**9)/729d0 - (x**10)/1000d0 - x*llx + (x
& **2*llx)/4d0 - (x**3*llx)/9d0 + (x**4*llx)/16d0 - (x**5
& *llx)/25d0 + (x**6*llx)/36d0 - (x**7*llx)/49d0 + (x**8*
& llx)/64d0 - (x**9*llx)/81d0 + (x**10*llx)/100d0 + (x*ll
& x**2)/2d0 - (x**2*llx**2)/4d0 + (x**3*llx**2)/6d0 - (x*
& *4*llx**2)/8d0 + (x**5*llx**2)/10d0 - (x**6*llx**2)/12d
& 0 + (x**7*llx**2)/14d0 - (x**8*llx**2)/16d0 + (x**9*llx
& **2)/18d0 - (x**10*llx**2)/20d0
case(6) !-101
ris = (x**2)/2d0 - (x**3)/4d0 + (31d0*x**4)
& /144d0 - (23d0*x**5)/144d0 + (3019d0*x**6)/21600d0 - (1
& 39d0*x**7)/1200d0 + (48877d0*x**8)/470400d0 - (191833d0
& *x**9)/2116800d0 + (5257891d0*x**10)/63504000d0
case(7) !-11-1
ris = (x**3)/6d0 - (x**4)/12d0 + (13d0*x**5
& )/120d0 - (17d0*x**6)/240d0 + (5d0*x**7)/63d0 - (589d0*
& x**8)/10080d0 + (5669d0*x**9)/90720d0 - (85d0*x**10)/17
& 28d0
case(8) !-110
llx = log(x)
ris = -((3d0*x**2)/4d0) + (11d0*x**3)/36d0
& - (77d0*x**4)/288d0 + (659d0*x**5)/3600d0 - (1163d0*x**
& 6)/7200d0 + (2517d0*x**7)/19600d0 - (108919d0*x**8)/940
& 800d0 + (1875737d0*x**9)/19051200d0 - (5731399d0*x**10)
& /63504000d0 + (x**2*llx)/2d0 - (x**3*llx)/6d0 + (5d0*x*
& *4*llx)/24d0 - (7d0*x**5*llx)/60d0 + (47d0*x**6*llx)/36
& 0d0 - (37d0*x**7*llx)/420d0 + (319d0*x**8*llx)/3360d0 -
& (533d0*x**9*llx)/7560d0 + (1879d0*x**10*llx)/25200d0
case(9) !-111
ris = (x**3)/6d0 + (11d0*x**5)/120d0 - (x**
& 6)/144d0 + (19d0*x**7)/315d0 - (13d0*x**8)/1440d0 + (79
& 9d0*x**9)/18144d0 - (317d0*x**10)/33600d0
case(10) !0-1-1
ris = (x**2)/4d0 - (x**3)/6d0 + (11d0*x**4)
& /96d0 - (x**5)/12d0 + (137d0*x**6)/2160d0 - (x**7)/20d0
& + (363d0*x**8)/8960d0 - (761d0*x**9)/22680d0 + (7129d0
& *x**10)/252000d0
case(11) !0-10
llx = log(x)
ris = -2*x + (x**2)/4d0 - (2d0*x**3)/27d0 +
& (x**4)/32d0 - (2d0*x**5)/125d0 + (x**6)/108d0 - (2d0*x
& **7)/343d0 + (x**8)/256d0 - (2d0*x**9)/729d0 + (x**10)/
& 500d0 + x*llx - (x**2*llx)/4d0 + (x**3*llx)/9d0 - (x**4
& *llx)/16d0 + (x**5*llx)/25d0 - (x**6*llx)/36d0 + (x**7*
& llx)/49d0 - (x**8*llx)/64d0 + (x**9*llx)/81d0 - (x**10*
& llx)/100d0
case(12) !0-11
ris = (x**2)/4d0 - (x**3)/18d0 + (5d0*x**4)
& /96d0 - (7d0*x**5)/300d0 + (47d0*x**6)/2160d0 - (37d0*x
& **7)/2940d0 + (319d0*x**8)/26880d0 - (533d0*x**9)/68040
& d0 + (1879d0*x**10)/252000d0
case(13) !00-1
ris = x - (x**2)/8d0 + (x**3)/27d0 - (x**4)
& /64d0 + (x**5)/125d0 - (x**6)/216d0 + (x**7)/343d0 - (x
& **8)/512d0 + (x**9)/729d0 - (x**10)/1000d0
case(14) !000
llx = log(x)
ris = (llx**3)/6d0
case(15) !001
ris = x + (x**2)/8d0 + (x**3)/27d0 + (x**4)
& /64d0 + (x**5)/125d0 + (x**6)/216d0 + (x**7)/343d0 + (x
& **8)/512d0 + (x**9)/729d0 + (x**10)/1000d0
case(16) !01-1
ris = (x**2)/4d0 + (x**3)/18d0 + (5d0*x**4)
& /96d0 + (7d0*x**5)/300d0 + (47d0*x**6)/2160d0 + (37d0*x
& **7)/2940d0 + (319d0*x**8)/26880d0 + (533d0*x**9)/68040
& d0 + (1879d0*x**10)/252000d0
case(17) !010
llx = log(x)
ris = -2*x - (x**2)/4d0 - (2d0*x**3)/27d0 -
& (x**4)/32d0 - (2d0*x**5)/125d0 - (x**6)/108d0 - (2d0*x
& **7)/343d0 - (x**8)/256d0 - (2d0*x**9)/729d0 - (x**10)/
& 500d0 + x*llx + (x**2*llx)/4d0 + (x**3*llx)/9d0 + (x**4
& *llx)/16d0 + (x**5*llx)/25d0 + (x**6*llx)/36d0 + (x**7*
& llx)/49d0 + (x**8*llx)/64d0 + (x**9*llx)/81d0 + (x**10*
& llx)/100d0
case(18) !011
ris = (x**2)/4d0 + (x**3)/6d0 + (11d0*x**4)
& /96d0 + (x**5)/12d0 + (137d0*x**6)/2160d0 + (x**7)/20d0
& + (363d0*x**8)/8960d0 + (761d0*x**9)/22680d0 + (7129d0
& *x**10)/252000d0
case(19) !1-1-1
ris = (x**3)/6d0 + (11d0*x**5)/120d0 + (x**
& 6)/144d0 + (19d0*x**7)/315d0 + (13d0*x**8)/1440d0 + (79
& 9d0*x**9)/18144d0 + (317d0*x**10)/33600d0
case(20) !1-10
llx = log(x)
ris = -((3d0*x**2)/4d0) - (11d0*x**3)/36d0
& - (77d0*x**4)/288d0 - (659d0*x**5)/3600d0 - (1163d0*x**
& 6)/7200d0 - (2517d0*x**7)/19600d0 - (108919d0*x**8)/940
& 800d0 - (1875737d0*x**9)/19051200d0 - (5731399d0*x**10)
& /63504000d0 + (x**2*llx)/2d0 + (x**3*llx)/6d0 + (5d0*x*
& *4*llx)/24d0 + (7d0*x**5*llx)/60d0 + (47d0*x**6*llx)/36
& 0d0 + (37d0*x**7*llx)/420d0 + (319d0*x**8*llx)/3360d0 +
& (533d0*x**9*llx)/7560d0 + (1879d0*x**10*llx)/25200d0
case(21) !1-11
ris = (x**3)/6d0 + (x**4)/12d0 + (13d0*x**5
& )/120d0 + (17d0*x**6)/240d0 + (5d0*x**7)/63d0 + (589d0*
& x**8)/10080d0 + (5669d0*x**9)/90720d0 + (85d0*x**10)/17
& 28d0
case(22) !10-1
ris = (x**2)/2d0 + (x**3)/4d0 + (31d0*x**4)
& /144d0 + (23d0*x**5)/144d0 + (3019d0*x**6)/21600d0 + (1
& 39d0*x**7)/1200d0 + (48877d0*x**8)/470400d0 + (191833d0
& *x**9)/2116800d0 + (5257891d0*x**10)/63504000d0
case(23) !100
llx = log(x)
ris = x + (x**2)/8d0 + (x**3)/27d0 + (x**4)
& /64d0 + (x**5)/125d0 + (x**6)/216d0 + (x**7)/343d0 + (x
& **8)/512d0 + (x**9)/729d0 + (x**10)/1000d0 - x*llx - (x
& **2*llx)/4d0 - (x**3*llx)/9d0 - (x**4*llx)/16d0 - (x**5
& *llx)/25d0 - (x**6*llx)/36d0 - (x**7*llx)/49d0 - (x**8*
& llx)/64d0 - (x**9*llx)/81d0 - (x**10*llx)/100d0 + (x*ll
& x**2)/2d0 + (x**2*llx**2)/4d0 + (x**3*llx**2)/6d0 + (x*
& *4*llx**2)/8d0 + (x**5*llx**2)/10d0 + (x**6*llx**2)/12d
& 0 + (x**7*llx**2)/14d0 + (x**8*llx**2)/16d0 + (x**9*llx
& **2)/18d0 + (x**10*llx**2)/20d0
case(24) !101
ris = (x**2)/2d0 + (5d0*x**3)/12d0 + (49d0*
& x**4)/144d0 + (41d0*x**5)/144d0 + (5269d0*x**6)/21600d0
& + (767d0*x**7)/3600d0 + (266681d0*x**8)/1411200d0 + (1
& 077749d0*x**9)/6350400d0 + (9778141d0*x**10)/63504000d0
case(25) !11-1
ris = (x**3)/6d0 + (x**4)/6d0 + (7d0*x**5)/
& 40d0 + (119d0*x**6)/720d0 + (101d0*x**7)/630d0 + (305d0
& *x**8)/2016d0 + (13157d0*x**9)/90720d0 + (41603d0*x**10
& )/302400d0
case(26) !110
llx = log(x)
ris = -((3d0*x**2)/4d0) - (7d0*x**3)/12d0 -
& (131d0*x**4)/288d0 - (53d0*x**5)/144d0 - (2213d0*x**6)
& /7200d0 - (947d0*x**7)/3600d0 - (647707d0*x**8)/2822400
& d0 - (1290829d0*x**9)/6350400d0 - (11574649d0*x**10)/63
& 504000d0 + (x**2*llx)/2d0 + (x**3*llx)/2d0 + (11d0*x**4
& *llx)/24d0 + (5d0*x**5*llx)/12d0 + (137d0*x**6*llx)/360
& d0 + (7d0*x**7*llx)/20d0 + (363d0*x**8*llx)/1120d0 + (7
& 61d0*x**9*llx)/2520d0 + (7129d0*x**10*llx)/25200d0
case(27) !111
ris = (x**3)/6d0 + (x**4)/4d0 + (7d0*x**5)/
& 24d0 + (5d0*x**6)/16d0 + (29d0*x**7)/90d0 + (469d0*x**8
& )/1440d0 + (29531d0*x**9)/90720d0 + (1303d0*x**10)/4032
& d0
c End of expansions around x = 0
end select
c --- set the imaginary part back to zero if it has been modified to
c --- get the branch cuts right (and should be zero).
if (bcflag.eq.1) then
xre = dreal(x)
if (n3.eq.0.and.xre.gt.0d0) then
if (xre.lt.1d0) then
ris = dcmplx(dreal(ris),0d0)
endif
c
else if (n3.eq.1.and.xre.lt.1d0) then
if (n1.ne.-1.and.n2.ne.-1) then
ris = dcmplx(dreal(ris),0d0)
else if (xre.gt.-1d0) then
ris = dcmplx(dreal(ris),0d0)
endif
c
else if (n3.eq.-1.and.xre.gt.-1d0) then
if (n1.ne.1.and.n2.ne.1) then
ris = dcmplx(dreal(ris),0d0)
else if (xre.lt.1d0) then
ris = dcmplx(dreal(ris),0d0)
endif
endif
endif
HPL3ar0=ris
return
end function