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.
 
 
 
 
 
 

62 lines
1.7 KiB

FUNCTION XCDIL(Z)
c
c CALLED BY XSPENZ FOR THE CALCULATION OF THE EULER DILOG
c completely rewritten 13-06-2008
c evaluates Li_2(z) for complex z with |z|<1, Real(z)<1/2
c
implicit none
include 'types.f'
include 'constants.f'
COMPLEX(dp)::XCDIL
integer::j,Num
COMPLEX(dp)::Z,Z1,CLZ,XLI2
real(dp)::AAZ,REZ
real(dp),parameter::C2fac(20)=
& (/ -0.027777777777777777778e0_dp,
& 0.00027777777777777777778e0_dp,
& -4.7241118669690098262 e-6_dp,
& 9.1857730746619635509 e-8_dp,
& -1.8978869988970999072 e-9_dp,
& 4.0647616451442255268 e-11_dp,
& -8.9216910204564525552 e-13_dp,
& 1.9939295860721075687 e-14_dp,
& -4.5189800296199181917 e-16_dp,
& 1.0356517612181247014 e-17_dp,
& -2.3952186210261867457 e-19_dp,
& 5.5817858743250093363 e-21_dp,
& -1.3091507554183212858 e-22_dp,
& 3.0874198024267402932 e-24_dp,
& -7.3159756527022034204 e-26_dp,
& 1.740845657234000741 e-27_dp,
& -4.1576356446138997196 e-29_dp,
& 9.9621484882846221032 e-31_dp,
& -2.3940344248961653005 e-32_dp,
& 5.7683473553673900843 e-34_dp/)
c
c ... Num = number of terms in sum xcdil(z) for Li_2(z)
c Num=12 gives more then 12 safe digits
c
Num=12
c
AAZ=ABS(Z)
REZ=REAL(Z)
IF(AAZ-1.) 4,2,3
3 PRINT 1000
1000 FORMAT(3X,6 (15HERROR MODULUS Z) )
2 IF(REZ-.5) 4,4,3
4 CONTINUE
Z1=DCMPLX(1.D0,0.D0)-Z
CLZ=LOG(Z1)
xli2=-CLZ-.25*(CLZ)**2
do 13 j=1,Num
xli2 = xli2 + c2fac(j) * clz**(2*j+1)
13 continue
xcdil=xli2
RETURN
END