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.
90 lines
2.6 KiB
90 lines
2.6 KiB
C=============================================================================
|
|
C--- HPLs of Rank 3
|
|
C=============================================================================
|
|
c--- main forking function
|
|
double complex function HPL3(n1, n2, n3, x)
|
|
implicit none
|
|
integer n1,n2,n3
|
|
double complex x,ris
|
|
double complex HPL3at0,HPL3at1,HPL3atm1
|
|
double complex HPL3ar1,HPL3arm1,HPL3ar0,HPL3else
|
|
double precision rad1,radm1,rad0
|
|
|
|
rad1 = 0.01d0
|
|
radm1 = 0.025d0
|
|
rad0 = 0.025d0
|
|
|
|
if ((abs(n1).gt.1).or.(abs(n2).gt.1).or.(abs(n3).gt.1)) then
|
|
print*, ""
|
|
print*, "****************"
|
|
print*, "Error in HPL3:"
|
|
print*, "Indices",n1,n2,n3," out of range !"
|
|
print*, "Aborting..."
|
|
print*,"****************"
|
|
stop
|
|
endif
|
|
|
|
ris = dcmplx(0d0,0d0)
|
|
|
|
if (x.eq.dcmplx(0d0,0d0)) then
|
|
ris = HPL3at0(n1,n2,n3)
|
|
elseif (x.eq.dcmplx(1d0,0d0)) then
|
|
ris = HPL3at1(n1,n2,n3)
|
|
elseif (x.eq.dcmplx(-1d0,0d0)) then
|
|
ris = HPL3atm1(n1,n2,n3)
|
|
elseif (abs(x-dcmplx(1d0,0d0)).lt.rad1) then
|
|
ris = HPL3ar1(n1,n2,n3,x)
|
|
elseif (abs(x+dcmplx(1d0,0d0)).lt.radm1) then
|
|
ris = HPL3arm1(n1,n2,n3,x)
|
|
elseif (abs(x-dcmplx(0d0,0d0)).lt.rad0) then
|
|
ris = HPL3ar0(n1,n2,n3,x)
|
|
else
|
|
ris = HPL3else(n1,n2,n3,x)
|
|
endif
|
|
HPL3=ris
|
|
return
|
|
end function
|
|
c ------------------------------------------------
|
|
double complex function HPL3at0(n1, n2, n3)
|
|
implicit none
|
|
integer n1,n2,n3,j
|
|
double complex ris
|
|
|
|
j=1+(n3+1)*1+(n2+1)*3+(n1+1)*9
|
|
ris = dcmplx(0d0,0d0)
|
|
|
|
if (j.eq.14) then
|
|
print*, ""
|
|
print*, "****************"
|
|
print*, "ERROR in HPL3: "
|
|
print*, "HPL3(",n1,",",n2,",",n3
|
|
& ,",0) is divergent!"
|
|
print*, "Aborting..."
|
|
print*,"****************"
|
|
stop
|
|
endif
|
|
HPL3at0=ris
|
|
return
|
|
end function
|
|
c ------------------------------------------------
|
|
c --- Real part of HPL3
|
|
double precision function HPL3real(n1,n2,n3,xr,xi)
|
|
implicit none
|
|
double precision xr,xi
|
|
integer n1,n2,n3
|
|
double complex x,HPL3
|
|
x=dcmplx(xr,xi)
|
|
HPL3real = dreal(HPL3(n1,n2,n3,x))
|
|
return
|
|
end
|
|
|
|
c --- Imaginary part of HPL3
|
|
double precision function HPL3im(n1,n2,n3,xr,xi)
|
|
implicit none
|
|
double precision xr,xi
|
|
integer n1,n2,n3
|
|
double complex x,HPL3
|
|
x=dcmplx(xr,xi)
|
|
HPL3im = dimag(HPL3(n1,n2,n3,x))
|
|
return
|
|
end
|