~madteam/mg5amcnlo/series2.0

50.9.3 by Johan Alwall
Added Template and HELAS into bzr
1
      subroutine ggggxx(ga,gb,gc,gd,g, vertex)
2
c
3
c This subroutine computes the portion of the amplitude of the four-point 
4
c coupling of 4 massless color octet gauge bosons (gluons) corresponding 
5
c to the color structure f^{a,b,e} f{c,d,e}. 
6
c To optain the complete amplitude, this coupling must be called three
7
c times (once for each color structure) with the following permutations:
8
c	call ggggxx(ga,gb,gc,gd,g,v1)
9
c       call ggggxx(ga,gc,gd,gb,g,v2)
10
c       call ggggxx(ga,gd,gb,gc,g,v3)
11
c
12
c	f^{a,b,e} f{c,d,e}*v1+
13
c	f^{a,c,e} f{d,b,e}*v2+
14
c	f^{a,d,e} f{b,c,e}*v3
15
c (See 2.9.1 of the manual for more information).
16
c                                                                       
17
c input:                                                                
18
c       complex ga(0:3)        : Boson with adjoint color index a 
19
c       complex gb(0:3)        : Boson with adjoint color index b
20
c       complex gc(0:3)        : Boson with adjoint color index c 
21
c       complex gd(0:3)        : Boson with adjoint color index d
22
c       real    g              : coupling of w31 with w-/w+             
23
c
24
      implicit none
25
      double complex ga(6),gb(6),gc(6),gd(6),vertex
26
      double complex dv1(0:3),dv2(0:3),dv3(0:3),dv4(0:3),
27
     &     dvertx,v12,v13,v14,v23,v24,v34
28
      double precision pga(0:3),pgb(0:3),pgc(0:3),pgd(0:3),g
29
30
      save dv1,dv2,dv3, dv4
31
c      save dv1,dv2,dv3,dv4,dvertx,v12,v13,v14,v23,v24,v34
32
33
#ifdef HELAS_CHECK
34
      double precision pm
35
      double precision epsi
36
      parameter( epsi = 2.0d-5 )
37
      double precision rZero
38
      parameter( rZero = 0.0d0 )
39
      integer stdo
40
      parameter( stdo = 6 )
41
#endif
42
c
43
#ifdef HELAS_CHECK
44
      pga(0) = dble( ga(5))
45
      pga(1) = dble( ga(6))
46
      pga(2) = dimag(ga(6))
47
      pga(3) = dimag(ga(5))
48
      pgb(0) = dble( gb(5))
49
      pgb(1) = dble( gb(6))
50
      pgb(2) = dimag(gb(6))
51
      pgb(3) = dimag(gb(5))
52
      pgc(0) = dble( gc(5))
53
      pgc(1) = dble( gc(6))
54
      pgc(2) = dimag(gc(6))
55
      pgc(3) = dimag(gc(5))
56
      pgd(0) = dble( gd(5))
57
      pgd(1) = dble( gd(6))
58
      pgd(2) = dimag(gd(6))
59
      pgd(3) = dimag(gd(5))
60
61
      if (  abs(ga(1))+abs(ga(2))
62
     &     +abs(ga(3))+abs(ga(4)).eq.rZero ) then
63
         write(stdo,*) ' helas-warn  : ga in ggggxx is zero vector'
64
      endif
65
      if ( abs(ga(5))+abs(ga(5)).eq.rZero ) then
66
         write(stdo,*)
67
     &        ' helas-error : ga in ggggxx has zero momentum'
68
      endif
69
      if (  abs(gb(1))+abs(gb(2))
70
     &     +abs(gb(3))+abs(gb(4)).eq.rZero ) then
71
         write(stdo,*) ' helas-warn  : gb in ggggxx is zero vector'
72
      endif
73
      if ( abs(gb(5))+abs(gb(5)).eq.rZero ) then
74
         write(stdo,*)
75
     &        ' helas-error : gb in ggggxx has zero momentum'
76
      endif
77
      if (  abs(gc(1))+abs(gc(2))
78
     &     +abs(gc(3))+abs(gc(4)).eq.rZero ) then
79
         write(stdo,*) ' helas-warn  : gc in ggggxx is zero vector'
80
      endif
81
      if ( abs(gc(5))+abs(gc(5)).eq.rZero ) then
82
         write(stdo,*)
83
     &        ' helas-error : gc in ggggxx has zero momentum'
84
      endif
85
      if (  abs(gd(1))+abs(gd(2))
86
     &     +abs(gd(3))+abs(gd(4)).eq.rZero ) then
87
         write(stdo,*) ' helas-warn  : gd in ggggxx is zero vector'
88
      endif
89
      if ( abs(gd(5))+abs(gd(5)).eq.rZero ) then
90
         write(stdo,*)
91
     &        ' helas-error : gd in ggggxx has zero momentum'
92
      endif
93
      pm = max( abs(pga(0)),abs(pgb(0)),abs(pgc(0)),abs(pgd(0)),
94
     &          abs(pga(1)),abs(pgb(1)),abs(pgc(1)),abs(pgd(1)),
95
     &          abs(pga(2)),abs(pgb(2)),abs(pgc(2)),abs(pgd(2)),
96
     &          abs(pga(3)),abs(pgb(3)),abs(pgc(3)),abs(pgd(3)) )
97
      if (  abs(ga(5)+gb(5)+gc(5)+gd(5))
98
     &     +abs(ga(6)+gb(6)+gc(6)+gd(6)).ge.pm*epsi) then
99
         write(stdo,*)
100
     &        ' helas-error : ga,gb,gc,gd in ggggxx'
101
         write(stdo,*)
102
     &        '             : have not balanced momenta'
103
      endif
104
      if ( g.eq.rZero ) then
105
         write(stdo,*) ' helas-error : g in ggggxx is zero coupling'
106
      endif
107
#endif
108
109
      dv1(0) = dcmplx(ga(1))
110
      dv1(1) = dcmplx(ga(2))
111
      dv1(2) = dcmplx(ga(3))
112
      dv1(3) = dcmplx(ga(4))
113
      dv2(0) = dcmplx(gb(1))
114
      dv2(1) = dcmplx(gb(2))
115
      dv2(2) = dcmplx(gb(3))
116
      dv2(3) = dcmplx(gb(4))
117
      dv3(0) = dcmplx(gc(1))
118
      dv3(1) = dcmplx(gc(2))
119
      dv3(2) = dcmplx(gc(3))
120
      dv3(3) = dcmplx(gc(4))
121
      dv4(0) = dcmplx(gd(1))
122
      dv4(1) = dcmplx(gd(2))
123
      dv4(2) = dcmplx(gd(3))
124
      dv4(3) = dcmplx(gd(4))
125
126
      v12 = dv1(0)*dv2(0)-dv1(1)*dv2(1)-dv1(2)*dv2(2)-dv1(3)*dv2(3)
127
      v13 = dv1(0)*dv3(0)-dv1(1)*dv3(1)-dv1(2)*dv3(2)-dv1(3)*dv3(3)
128
      v14 = dv1(0)*dv4(0)-dv1(1)*dv4(1)-dv1(2)*dv4(2)-dv1(3)*dv4(3)
129
      v23 = dv2(0)*dv3(0)-dv2(1)*dv3(1)-dv2(2)*dv3(2)-dv2(3)*dv3(3)
130
      v24 = dv2(0)*dv4(0)-dv2(1)*dv4(1)-dv2(2)*dv4(2)-dv2(3)*dv4(3)
131
      v34 = dv3(0)*dv4(0)-dv3(1)*dv4(1)-dv3(2)*dv4(2)-dv3(3)*dv4(3)
132
133
      dvertx = v14*v23 -v13*v24
134
135
      vertex = dcmplx( dvertx ) * (g*g)
136
137
c      if (abs(dvertx) .gt. 1d40) then
138
c         write(*,*) 'Careful',abs(dvertx)
139
c         write(*,*) v12,v13,v14
140
c         write(*,*) v23,v24,v34
141
c      endif
142
c
143
      return
144
      end