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.
68 lines
1.7 KiB
68 lines
1.7 KiB
C=============================================================================
|
|
C--- HPLs of Rank 2
|
|
C=============================================================================
|
|
|
|
double complex function HPL2else(n1,n2,x)
|
|
implicit none
|
|
double precision pi,ll2,xre
|
|
double complex x, ris,myi,ll1x,ll1mx,llx
|
|
double complex ccli2
|
|
integer n1,n2,j,bcflag
|
|
|
|
pi=3.1415926535897932385D0
|
|
myi=dcmplx(0d0,1d0)
|
|
|
|
ll2 = dlog(2d0)
|
|
j = 3*(n1+1) + (n2+1) +1
|
|
|
|
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---
|
|
ll1x = log(1d0+x)
|
|
ll1mx = log(1d0-x)
|
|
llx = log(x)
|
|
|
|
select case(j)
|
|
case(1)
|
|
ris=ll1x**2/2d0
|
|
case(2)
|
|
ris=ccli2(-x) + llx*ll1x
|
|
case(3)
|
|
ris= pi**2/12d0 - ll2**2/2d0 + ll2*ll1mx
|
|
& - ll1mx*ll1x - ccli2((1d0-x)/2d0)
|
|
case(4)
|
|
ris=-ccli2(-x)
|
|
case(5)
|
|
ris=llx**2/2d0
|
|
case(6)
|
|
ris=ccli2(x)
|
|
case(7)
|
|
ris=-pi**2/12d0 + ccli2((1d0-x)/2d0) + ll2**2/2d0
|
|
& -ll2*ll1mx
|
|
case(8)
|
|
ris=-ccli2(x)-ll1mx*llx
|
|
case(9)
|
|
ris=ll1mx**2/2d0
|
|
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
|
|
|
|
HPL2else=ris
|
|
return
|
|
end
|