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 |