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.
 
 
 
 
 
 

79 lines
2.1 KiB

function DDILOG(X)
implicit none
include 'types.f'
real(dp):: DDILOG
integer:: i
real(dp):: X,Y,T,S,A,PI3,PI6,ZERO,ONE,HALF,MALF,MONE,MTWO
real(dp):: C(0:18),H,ALFA,B0,B1,B2
DATA ZERO /0.0_dp/, ONE /1.0_dp/
DATA HALF /0.5_dp/, MALF /-0.5_dp/, MONE /-1.0_dp/, MTWO /-2.0_dp/
DATA PI3 /3.28986 81336 96453_dp/, PI6 /1.64493 40668 48226_dp/
DATA C( 0) / 0.42996 69356 08137 0_dp/
DATA C( 1) / 0.40975 98753 30771 1_dp/
DATA C( 2) /-0.01858 84366 50146 0_dp/
DATA C( 3) / 0.00145 75108 40622 7_dp/
DATA C( 4) /-0.00014 30418 44423 4_dp/
DATA C( 5) / 0.00001 58841 55418 8_dp/
DATA C( 6) /-0.00000 19078 49593 9_dp/
DATA C( 7) / 0.00000 02419 51808 5_dp/
DATA C( 8) /-0.00000 00319 33412 7_dp/
DATA C( 9) / 0.00000 00043 45450 6_dp/
DATA C(10) /-0.00000 00006 05784 8_dp/
DATA C(11) / 0.00000 00000 86121 0_dp/
DATA C(12) /-0.00000 00000 12443 3_dp/
DATA C(13) / 0.00000 00000 01822 6_dp/
DATA C(14) /-0.00000 00000 00270 1_dp/
DATA C(15) / 0.00000 00000 00040 4_dp/
DATA C(16) /-0.00000 00000 00006 1_dp/
DATA C(17) / 0.00000 00000 00000 9_dp/
DATA C(18) /-0.00000 00000 00000 1_dp/
IF(X .EQ. ONE) THEN
DDILOG=PI6
RETURN
ELSE IF(X .EQ. MONE) THEN
DDILOG=MALF*PI6
RETURN
END IF
T=-X
IF(T .LE. MTWO) THEN
Y=MONE/(ONE+T)
S=ONE
A=-PI3+HALF*(LOG(-T)**2-LOG(ONE+ONE/T)**2)
ELSE IF(T .LT. MONE) THEN
Y=MONE-T
S=MONE
A=LOG(-T)
A=-PI6+A*(A+LOG(ONE+ONE/T))
ELSE IF(T .LE. MALF) THEN
Y=(MONE-T)/T
S=ONE
A=LOG(-T)
A=-PI6+A*(MALF*A+LOG(ONE+T))
ELSE IF(T .LT. ZERO) THEN
Y=-T/(ONE+T)
S=MONE
A=HALF*LOG(ONE+T)**2
ELSE IF(T .LE. ONE) THEN
Y=T
S=ONE
A=ZERO
ELSE
Y=ONE/T
S=MONE
A=PI6+HALF*LOG(T)**2
END IF
H=Y+Y-ONE
ALFA=H+H
B1=ZERO
B2=ZERO
DO 1 I = 18,0,-1
B0=C(I)+ALFA*B1-B2
B2=B1
1 B1=B0
DDILOG=-(S*(B0-H*B2)+A)
RETURN
END