~madteam/mg5amcnlo/series2.0

50.9.3 by Johan Alwall
Added Template and HELAS into bzr
1
      subroutine w3w3nx(wm,w31,wp,w32,g31,g32, vertex)
2
c
3
c This subroutine computes an amplitude of the four-point coupling of
4
c the W-, W+ and two W3/Z/A.
5
c If one sets wmass=0.0, then the gggg vertex is given
6
c (see sect 2.9.1 of the manual).
7
c
8
c input:
9
c       complex wm(0:3)        : flow-out W-                         wm
10
c       complex w31(0:3)       : first    W3/Z/A                     w31
11
c       complex wp(0:3)        : flow-out W+                         wp
12
c       complex w32(0:3)       : second   W3/Z/A                     w32
13
c       real    g31            : coupling of w31 with W-/W+
14
c       real    g32            : coupling of w32 with W-/W+
15
c                                                  (see the table below)
16
c       real    wmass          : mass  of W
17
c       real    wwidth         : width of W
18
c
19
c the possible sets of the inputs are as follows:
20
c   -------------------------------------------
21
c   |  wm  |  w31 |  wp  |  w32 |  g31 |  g32 |
22
c   -------------------------------------------
23
c   |  W-  |  W3  |  W+  |  W3  |  gw  |  gw  |
24
c   |  W-  |  W3  |  W+  |  Z   |  gw  | gwwz |
25
c   |  W-  |  W3  |  W+  |  A   |  gw  | gwwa |
26
c   |  W-  |  Z   |  W+  |  Z   | gwwz | gwwz |
27
c   |  W-  |  Z   |  W+  |  A   | gwwz | gwwa |
28
c   |  W-  |  A   |  W+  |  A   | gwwa | gwwa |
29
c   -------------------------------------------
30
c where all the bosons are defined by the flowing-OUT quantum number.
31
c
32
c output:
33
c       complex vertex         : amplitude          gamma(wm,w31,wp,w32)
34
c     
35
      implicit none
36
      double complex wm(6),w31(6),wp(6),w32(6),vertex
37
      double complex dv1(0:3),dv2(0:3),dv3(0:3),dv4(0:3),dvertx
38
      double complex v12,v13,v14,v23,v24,v34
39
      double precision pwm(0:3),pw31(0:3),pwp(0:3),pw32(0:3)
40
      double precision g31,g32,gtemp
41
42
      double precision rZero, rOne, rTwo
43
      parameter( rZero = 0.0d0, rOne = 1.0d0, rTwo = 2.0d0 )
44
45
#ifdef HELAS_CHECK
46
      double precision pm
47
      double precision epsi
48
      parameter( epsi = 4.0d-5 )
49
      integer stdo
50
      parameter( stdo = 6 )
51
#endif
52
c
53
54
55
c Benj's modif in order to have FR running
56
      gtemp=rZero
57
      if(g31.eq.rzero) gtemp=g32
58
      if(g32.eq.rzero) gtemp=g31
59
c End of Benj'S modif
60
61
62
      pwm(0) = dble( wm(5))
63
      pwm(1) = dble( wm(6))
64
      pwm(2) = dimag(wm(6))
65
      pwm(3) = dimag(wm(5))
66
      pwp(0) = dble( wp(5))
67
      pwp(1) = dble( wp(6))
68
      pwp(2) = dimag(wp(6))
69
      pwp(3) = dimag(wp(5))
70
      pw31(0) = dble( w31(5))
71
      pw31(1) = dble( w31(6))
72
      pw31(2) = dimag(w31(6))
73
      pw31(3) = dimag(w31(5))
74
      pw32(0) = dble( w32(5))
75
      pw32(1) = dble( w32(6))
76
      pw32(2) = dimag(w32(6))
77
      pw32(3) = dimag(w32(5))
78
79
#ifdef HELAS_CHECK
80
      if (  abs(wm(1))+abs(wm(2))
81
     &     +abs(wm(3))+abs(wm(4)).eq.rZero ) then
82
         write(stdo,*) ' helas-warn  : wm in w3w3xx is zero vector'
83
      endif
84
      if ( abs(wm(5))+abs(wm(6)).eq.rZero ) then
85
         write(stdo,*)
86
     &        ' helas-error : wm in w3w3xx has zero momentum'
87
      endif
88
      if (  abs(w31(1))+abs(w31(2))
89
     &     +abs(w31(3))+abs(w31(4)).eq.rZero ) then
90
         write(stdo,*) ' helas-warn  : w31 in w3w3xx is zero vector'
91
      endif
92
      if ( abs(w31(5))+abs(w31(6)).eq.rZero ) then
93
         write(stdo,*)
94
     &        ' helas-error : w31 in w3w3xx has zero momentum'
95
      endif
96
      if (  abs(wp(1))+abs(wp(2))
97
     &     +abs(wp(3))+abs(wp(4)).eq.rZero ) then
98
         write(stdo,*) ' helas-warn  : wp in w3w3xx is zero vector'
99
      endif
100
      if ( abs(wp(5))+abs(wp(5)).eq.rZero ) then
101
         write(stdo,*)
102
     &        ' helas-error : wp in w3w3xx has zero momentum'
103
      endif
104
      if (  abs(w32(1))+abs(w32(2))
105
     &     +abs(w32(3))+abs(w32(4)).eq.rZero ) then
106
         write(stdo,*) ' helas-warn  : w32 in w3w3xx is zero vector'
107
      endif
108
      if ( abs(w32(5))+abs(w32(6)).eq.rZero ) then
109
         write(stdo,*)
110
     &        ' helas-error : w32 in w3w3xx has zero momentum'
111
      endif
112
      pm = max( abs(pwm(0)),abs(pw31(0)),abs(pwp(0)),abs(pw32(0)),
113
     &          abs(pwm(1)),abs(pw31(1)),abs(pwp(1)),abs(pw32(1)),
114
     &          abs(pwm(2)),abs(pw31(2)),abs(pwp(2)),abs(pw32(2)),
115
     &          abs(pwm(3)),abs(pw31(3)),abs(pwp(3)),abs(pw32(3)) )
116
      if (  abs(wm(5)+w31(5)+wp(5)+w32(5))
117
     &     +abs(wm(6)+w31(6)+wp(6)+w32(6)).ge.pm*epsi ) then
118
         write(stdo,*)
119
     &        ' helas-error : wm,w31,wp,w32 in w3w3xx'
120
         write(stdo,*)
121
     &        '             : have not balanced momenta'
122
      endif
123
c     Neil edited this file to allow 3-site couplings.
124
c      if ( g31.eq.rZero ) then
125
c         write(stdo,*) ' helas-error : g31 in w3w3xx is zero coupling'
126
c      endif
127
c      if ( g32.eq.rZero ) then
128
c         write(stdo,*) ' helas-error : g32 in w3w3xx is zero coupling'
129
c      endif
130
c      if ( g31.lt.rZero ) then
131
c         write(stdo,*)
132
c     &        ' helas-warn  : g31 in w3w3xx is non-standard coupling'
133
c         write(stdo,*) 
134
c     &        '             : g31 = ',g31
135
c      endif
136
c      if ( g32.lt.rZero ) then
137
c         write(stdo,*)
138
c     &        ' helas-warn  : g32 in w3w3xx is non-standard coupling'
139
c         write(stdo,*)
140
c     &        '             : g32 = ',g32
141
c      endif
142
c     End Neil's edit.
143
#endif
144
145
      dv1(0) = dcmplx(wm(1))
146
      dv1(1) = dcmplx(wm(2))
147
      dv1(2) = dcmplx(wm(3))
148
      dv1(3) = dcmplx(wm(4))
149
      dv2(0) = dcmplx(w31(1))
150
      dv2(1) = dcmplx(w31(2))
151
      dv2(2) = dcmplx(w31(3))
152
      dv2(3) = dcmplx(w31(4))
153
      dv3(0) = dcmplx(wp(1))
154
      dv3(1) = dcmplx(wp(2))
155
      dv3(2) = dcmplx(wp(3))
156
      dv3(3) = dcmplx(wp(4))
157
      dv4(0) = dcmplx(w32(1))
158
      dv4(1) = dcmplx(w32(2))
159
      dv4(2) = dcmplx(w32(3))
160
      dv4(3) = dcmplx(w32(4))
161
162
      v12 = dv1(0)*dv2(0)-dv1(1)*dv2(1)-dv1(2)*dv2(2)-dv1(3)*dv2(3)
163
      v13 = dv1(0)*dv3(0)-dv1(1)*dv3(1)-dv1(2)*dv3(2)-dv1(3)*dv3(3)
164
      v14 = dv1(0)*dv4(0)-dv1(1)*dv4(1)-dv1(2)*dv4(2)-dv1(3)*dv4(3)
165
      v23 = dv2(0)*dv3(0)-dv2(1)*dv3(1)-dv2(2)*dv3(2)-dv2(3)*dv3(3)
166
      v24 = dv2(0)*dv4(0)-dv2(1)*dv4(1)-dv2(2)*dv4(2)-dv2(3)*dv4(3)
167
      v34 = dv3(0)*dv4(0)-dv3(1)*dv4(1)-dv3(2)*dv4(2)-dv3(3)*dv4(3)
168
169
      dvertx = v12*v34 + v14*v23 - rTwo*v13*v24
170
171
c     Neil edited this to allow 3 site coupling.
172
c     Now only g31 is important.  g32 does nothing.
173
c      vertex = dcmplx( dvertx ) * (g31*g32)
174
c      vertex = dcmplx( dvertx ) * (g31)
175
c     End Neil's edit
176
c
177
178
c Start of Benj's modif to have FR running
179
      vertex = dcmplx( dvertx ) * (gtemp)
180
c End of Benj's modif
181
      return
182
      end