~maddevelopers/mg5amcnlo/2.9.4

« back to all changes in this revision

Viewing changes to vendor/CutTools/src/qcdloop/ddilog.f

pass to v2.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
      DOUBLE PRECISION FUNCTION DDILOG(X)
 
2
 
 
3
      DOUBLE PRECISION X,Y,T,S,A,PI3,PI6,ZERO,ONE,HALF,MALF,MONE,MTWO
 
4
      DOUBLE PRECISION C(0:18),H,ALFA,B0,B1,B2
 
5
 
 
6
      DATA ZERO /0.0D0/, ONE /1.0D0/
 
7
      DATA HALF /0.5D0/, MALF /-0.5D0/, MONE /-1.0D0/, MTWO /-2.0D0/
 
8
      DATA PI3 /3.289868133696453D0/, PI6 /1.644934066848226D0/
 
9
 
 
10
      DATA C( 0) / 0.4299669356081370D0/
 
11
      DATA C( 1) / 0.4097598753307711D0/
 
12
      DATA C( 2) /-0.0185884366501460D0/
 
13
      DATA C( 3) / 0.0014575108406227D0/
 
14
      DATA C( 4) /-0.0001430418444234D0/
 
15
      DATA C( 5) / 0.0000158841554188D0/
 
16
      DATA C( 6) /-0.0000019078495939D0/
 
17
      DATA C( 7) / 0.0000002419518085D0/
 
18
      DATA C( 8) /-0.0000000319334127D0/
 
19
      DATA C( 9) / 0.0000000043454506D0/
 
20
      DATA C(10) /-0.0000000006057848D0/
 
21
      DATA C(11) / 0.0000000000861210D0/
 
22
      DATA C(12) /-0.0000000000124433D0/
 
23
      DATA C(13) / 0.0000000000018226D0/
 
24
      DATA C(14) /-0.0000000000002701D0/
 
25
      DATA C(15) / 0.0000000000000404D0/
 
26
      DATA C(16) /-0.0000000000000061D0/
 
27
      DATA C(17) / 0.0000000000000009D0/
 
28
      DATA C(18) /-0.0000000000000001D0/
 
29
 
 
30
      IF(X .EQ. ONE) THEN
 
31
       DDILOG=PI6
 
32
       RETURN
 
33
      ELSE IF(X .EQ. MONE) THEN
 
34
       DDILOG=MALF*PI6
 
35
       RETURN
 
36
      END IF
 
37
      T=-X
 
38
      IF(T .LE. MTWO) THEN
 
39
       Y=MONE/(ONE+T)
 
40
       S=ONE
 
41
       A=-PI3+HALF*(LOG(-T)**2-LOG(ONE+ONE/T)**2)
 
42
      ELSE IF(T .LT. MONE) THEN
 
43
       Y=MONE-T
 
44
       S=MONE
 
45
       A=LOG(-T)
 
46
       A=-PI6+A*(A+LOG(ONE+ONE/T))
 
47
      ELSE IF(T .LE. MALF) THEN
 
48
       Y=(MONE-T)/T
 
49
       S=ONE
 
50
       A=LOG(-T)
 
51
       A=-PI6+A*(MALF*A+LOG(ONE+T))
 
52
      ELSE IF(T .LT. ZERO) THEN
 
53
       Y=-T/(ONE+T)
 
54
       S=MONE
 
55
       A=HALF*LOG(ONE+T)**2
 
56
      ELSE IF(T .LE. ONE) THEN
 
57
       Y=T
 
58
       S=ONE
 
59
       A=ZERO
 
60
      ELSE
 
61
       Y=ONE/T
 
62
       S=MONE
 
63
       A=PI6+HALF*LOG(T)**2
 
64
      END IF
 
65
 
 
66
      H=Y+Y-ONE
 
67
      ALFA=H+H
 
68
      B1=ZERO
 
69
      B2=ZERO
 
70
      DO 1 I = 18,0,-1
 
71
      B0=C(I)+ALFA*B1-B2
 
72
      B2=B1
 
73
    1 B1=B0
 
74
      DDILOG=-(S*(B0-H*B2)+A)
 
75
      RETURN
 
76
      END