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.
183 lines
6.0 KiB
183 lines
6.0 KiB
double complex function HPL3else(n1, n2, n3, x)
|
|
implicit none
|
|
double precision pi, zeta2, zeta3,ll2,xre
|
|
double complex x, ris
|
|
double complex basis3_1,basis3_2,basis3_3,basis3_4
|
|
double complex basis3_5,basis3_6,basis3_7,basis3_8
|
|
double complex basis2_1,basis2_2,basis2_3
|
|
double complex ccli2,cli3
|
|
double complex ll1px,ll1mx,llx
|
|
integer n1,n2,n3,j,bcflag
|
|
|
|
pi=3.1415926535897932385D0
|
|
zeta3=1.20205690315959428539973816151d0
|
|
zeta2=pi**2/6d0
|
|
ll2 = dlog(2d0)
|
|
|
|
j=1+(n3+1)*1+(n2+1)*3+(n1+1)*9
|
|
|
|
ris=dcmplx(0d0,0d0)
|
|
bcflag = 0
|
|
|
|
c--- +i*epsilon to get branch cuts right ---
|
|
if (dimag(x).eq.0d0) then
|
|
x = x + dcmplx(0d0,1d-60)
|
|
bcflag = 1
|
|
endif
|
|
c---
|
|
c #####################################################
|
|
ll1px = log(1d0+x)
|
|
ll1mx = log(1d0-x)
|
|
llx = log(x)
|
|
basis3_1 = cli3(x)
|
|
basis3_2 = cli3(-x)
|
|
basis3_3 = cli3(1d0-x)
|
|
basis3_4 = cli3(1d0/(1d0+x))
|
|
basis3_5 = cli3((1d0+x)/2d0)
|
|
basis3_6 = cli3((1d0-x)/2d0)
|
|
basis3_7 = cli3((1d0-x)/(1d0+x))
|
|
basis3_8 = cli3(2d0*x/(x-1d0))
|
|
basis2_1 = ccli2(x)
|
|
basis2_2 = ccli2(-x)
|
|
basis2_3 = ccli2((1d0-x)/2d0)
|
|
c #####################################################
|
|
|
|
select case(j)
|
|
case(1)
|
|
ris = ll1px**3/6d0
|
|
case(2)
|
|
ris = -(pi**2*ll1px)/6d0 + ll1px**3/6d0
|
|
&- basis3_4
|
|
& + zeta3
|
|
case(3)
|
|
ris = (pi**2*ll2)/12d0 - ll2**3/6d0
|
|
&- (pi**2*ll1px)/12d0 + (ll2**2*ll1px)/2d0
|
|
&- (ll2*ll1px**2)/2d0 + basis3_5 - (7*zeta3)/8d0
|
|
case(4)
|
|
ris = (pi**2*ll1px)/3d0 + llx*ll1px**2
|
|
&- ll1px**3/3d0 + ll1px*basis2_2+2*basis3_4
|
|
&-2*zeta3
|
|
case(5)
|
|
ris = (llx**2*ll1px)/2d0+llx*basis2_2
|
|
&-basis3_2
|
|
case(6)
|
|
ris = (pi**2*ll2)/6d0 - ll2**3/3d0
|
|
&- (pi**2*ll1mx)/12d0 + (ll2**2*ll1mx)/2d0
|
|
&- (pi**2*ll1px)/12d0 + (ll2**2*ll1px)/2d0
|
|
&- ll2*ll1mx*ll1px - ll1mx*llx*ll1px
|
|
&+(ll1mx*ll1px**2)/2d0-ll1mx*basis2_2
|
|
&+basis3_6
|
|
&- basis3_3-basis3_4+ basis3_7 + basis3_5
|
|
&-(3*zeta3)/4d0
|
|
case(7)
|
|
ris = -(pi**2*ll2)/6d0 + ll2**3/3d0
|
|
&+ (pi**2*ll1px)/4d0 - (3*ll2**2*ll1px)/2d0
|
|
&+ ll2*ll1mx*ll1px + ll2*ll1px**2
|
|
&- ll1mx*ll1px**2 - ll1px*basis2_3
|
|
&- 2*basis3_5 + (7*zeta3)/4d0
|
|
case(8)
|
|
ris = -(pi**2*ll2)/12d0 + ll2**3/6d0
|
|
&+ (pi**2*ll1mx)/6d0 - (ll2*ll1mx**2)/2d0
|
|
&+ ll1mx**3/6d0+(pi**2*llx)/12d0- (ll2**2*llx)/2d0
|
|
&+ ll2*ll1mx*llx - (ll1mx**2*llx)/2d0
|
|
&+ (pi**2*ll1px)/12d0 - (ll2**2*ll1px)/2d0
|
|
&+ ll2*ll1mx*ll1px - (ll1mx*ll1px**2)/2d0
|
|
&- llx*basis2_3 + basis3_2-basis3_1-basis3_8
|
|
&+ basis3_4 - basis3_7 - basis3_5 + (7*zeta3)/8d0
|
|
case(9)
|
|
ris = -(pi**2*ll2)/12d0 + ll2**3/6d0
|
|
&- (ll2*ll1mx**2)/2d0 + (ll1mx**2*ll1px)/2d0
|
|
&+ ll1mx*basis2_3 - basis3_6 + (7*zeta3)/8d0
|
|
case(10)
|
|
ris = -(pi**2*ll1px)/6d0 - (llx*ll1px**2)/2d0
|
|
&+ ll1px**3/6d0 - ll1px*basis2_2 - basis3_4
|
|
&+ zeta3
|
|
case(11)
|
|
ris = -(llx*basis2_2) + 2*basis3_2
|
|
case(12)
|
|
ris = -(pi**2*ll2)/12d0 + ll2**3/6d0
|
|
&- (pi**2*ll1mx)/12d0 - (ll2**2*ll1mx)/2d0
|
|
&+ (ll2*ll1mx**2)/2d0 - ll1mx**3/6d0
|
|
&+ (ll1mx**2*llx)/2d0 + ll1mx*basis2_2
|
|
&- basis3_6 + basis3_3 - basis3_2 +basis3_1
|
|
&+basis3_8
|
|
&- zeta3/8d0
|
|
case(13)
|
|
ris = -basis3_2
|
|
case(14)
|
|
ris = llx**3/6d0
|
|
case(15)
|
|
ris = basis3_1
|
|
case(16)
|
|
ris = -(pi**2*ll2)/12d0 + ll2**3/6d0
|
|
&+ (pi**2*ll1mx)/6d0 - (ll2*ll1mx**2)/2d0
|
|
&+ ll1mx**3/6d0 - (ll1mx**2*llx)/2d0
|
|
&+ (pi**2*ll1px)/12d0 - (ll2**2*ll1px)/2d0
|
|
&+ ll2*ll1mx*ll1px + ll1mx*llx*ll1px
|
|
&-(ll1mx*ll1px**2)/2d0+ll1px*basis2_1
|
|
&+basis3_2
|
|
&- basis3_1 - basis3_8 + basis3_4 -basis3_7
|
|
&-basis3_5
|
|
&+ (7*zeta3)/8d0
|
|
case(17)
|
|
ris = llx*basis2_1 - 2*basis3_1
|
|
case(18)
|
|
ris = (pi**2*ll1mx)/6d0 - (ll1mx**2*llx)/2d0
|
|
&- ll1mx*basis2_1 - basis3_3 + zeta3
|
|
case(19)
|
|
ris = (pi**2*ll2)/12d0 - ll2**3/6d0
|
|
&- (pi**2*ll1px)/6d0 + ll2**2*ll1px
|
|
&- ll2*ll1mx*ll1px - (ll2*ll1px**2)/2d0
|
|
&+ (ll1mx*ll1px**2)/2d0 + ll1px*basis2_3
|
|
&+ basis3_5 - (7*zeta3)/8d0
|
|
case(20)
|
|
ris = -(pi**2*ll2)/12d0 + ll2**3/6d0
|
|
&- (pi**2*ll1mx)/12d0 - (ll2**2*ll1mx)/2d0
|
|
&+ (ll2*ll1mx**2)/2d0 - ll1mx**3/6d0
|
|
&- (pi**2*llx)/12d0 + (ll2**2*llx)/2d0
|
|
&- ll2*ll1mx*llx + (ll1mx**2*llx)/2d0
|
|
&+ llx*basis2_3 - basis3_6 + basis3_3
|
|
&- basis3_2 + basis3_1 + basis3_8 - zeta3/8d0
|
|
case(21)
|
|
ris = (pi**2*ll2)/6d0 - ll2**3/3d0
|
|
&- (pi**2*ll1mx)/12d0 + (ll2**2*ll1mx)/2d0
|
|
&- ll1mx*basis2_3 + 2*basis3_6 - (7*zeta3)/4d0
|
|
case(22)
|
|
ris = (pi**2*ll2)/6d0 - ll2**3/3d0
|
|
&- (pi**2*ll1mx)/12d0 + (ll2**2*ll1mx)/2d0
|
|
&- (pi**2*ll1px)/12d0 + (ll2**2*ll1px)/2d0
|
|
&- ll2*ll1mx*ll1px - ll1mx*llx*ll1px
|
|
&+(ll1mx*ll1px**2)/2d0-ll1px*basis2_1
|
|
&+basis3_6
|
|
&- basis3_3 - basis3_4+basis3_7+basis3_5
|
|
&- (3*zeta3)/4d0
|
|
case(23)
|
|
ris =-(ll1mx*llx**2)/2d0-llx*basis2_1
|
|
&+basis3_1
|
|
case(24)
|
|
ris = -(pi**2*ll1mx)/3d0 + ll1mx**2*llx
|
|
&+ ll1mx*basis2_1 + 2*basis3_3 - 2*zeta3
|
|
case(25)
|
|
ris = -(pi**2*ll2)/12d0 + ll2**3/6d0
|
|
&+ (pi**2*ll1mx)/12d0 - (ll2**2*ll1mx)/2d0
|
|
&+ (ll2*ll1mx**2)/2d0 - basis3_6 + (7*zeta3)/8d0
|
|
case(26)
|
|
ris = (pi**2*ll1mx)/6d0 - basis3_3 + zeta3
|
|
case(27)
|
|
ris = -ll1mx**3/6d0
|
|
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). Also, set imaginary
|
|
c --- part of result to zero if x is between 0 and 1.
|
|
|
|
if (bcflag.eq.1) then
|
|
x = x - dcmplx(0d0,1d-60)
|
|
xre = dreal(x)
|
|
if (xre.ge.0d0.and.xre.le.1d0) then
|
|
ris = dcmplx(dreal(ris),0d0)
|
|
endif
|
|
endif
|
|
|
|
HPL3else=ris
|
|
return
|
|
end
|