~maddevelopers/mg5amcnlo/3.0.2-alpha0

« back to all changes in this revision

Viewing changes to HELAS/vvvxxx.F

Added Template and HELAS into bzr

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
      subroutine vvvxxx(wm,wp,w3,g , vertex)
 
2
c
 
3
c This subroutine computes an amplitude of the three-point coupling of
 
4
c the gauge bosons.
 
5
c
 
6
c input:
 
7
c       complex wm(6)          : vector               flow-out W-
 
8
c       complex wp(6)          : vector               flow-out W+
 
9
c       complex w3(6)          : vector               j3 or A    or Z
 
10
c       real    g              : coupling constant    gw or gwwa or gwwz
 
11
c
 
12
c output:
 
13
c       complex vertex         : amplitude               gamma(wm,wp,w3)
 
14
c     
 
15
      implicit none
 
16
      double complex wm(6),wp(6),w3(6),vertex,
 
17
     &     xv1,xv2,xv3,v12,v23,v31,p12,p13,p21,p23,p31,p32
 
18
      double precision pwm(0:3),pwp(0:3),pw3(0:3),g
 
19
 
 
20
      double precision rZero, rTenth
 
21
      parameter( rZero = 0.0d0, rTenth = 0.1d0 )
 
22
 
 
23
#ifdef HELAS_CHECK
 
24
      double precision pm
 
25
      double precision epsi
 
26
      parameter( epsi = 4.0d-5 )
 
27
      double complex cZero
 
28
      parameter( cZero = ( 0.0d0, 0.0d0 ) )
 
29
      integer stdo
 
30
      parameter( stdo = 6 )
 
31
#endif
 
32
c
 
33
      pwm(0) = dble( wm(5))
 
34
      pwm(1) = dble( wm(6))
 
35
      pwm(2) = dimag(wm(6))
 
36
      pwm(3) = dimag(wm(5))
 
37
      pwp(0) = dble( wp(5))
 
38
      pwp(1) = dble( wp(6))
 
39
      pwp(2) = dimag(wp(6))
 
40
      pwp(3) = dimag(wp(5))
 
41
      pw3(0) = dble( w3(5))
 
42
      pw3(1) = dble( w3(6))
 
43
      pw3(2) = dimag(w3(6))
 
44
      pw3(3) = dimag(w3(5))
 
45
 
 
46
#ifdef HELAS_CHECK
 
47
      if (  abs(wm(1))+abs(wm(2))
 
48
     &     +abs(wm(3))+abs(wm(4)).eq.rZero ) then
 
49
         write(stdo,*) ' helas-warn  : wm in vvvxxx is zero vector'
 
50
      endif
 
51
      if ( abs(wm(5))+abs(wm(6)).eq.rZero ) then
 
52
         write(stdo,*)
 
53
     &        ' helas-error : wm in vvvxxx has zero momentum'
 
54
      endif
 
55
      if (  abs(wp(1))+abs(wp(2))
 
56
     &     +abs(wp(3))+abs(wp(4)).eq.rZero ) then
 
57
         write(stdo,*) ' helas-warn  : wp in vvvxxx is zero vector'
 
58
      endif
 
59
      if ( abs(wp(5))+abs(wp(6)).eq.rZero ) then
 
60
         write(stdo,*)
 
61
     &        ' helas-error : wp in vvvxxx has zero momentum'
 
62
      endif
 
63
      if (  abs(w3(1))+abs(w3(2))
 
64
     &     +abs(w3(3))+abs(w3(4)).eq.rZero ) then
 
65
         write(stdo,*) ' helas-warn  : w3 in vvvxxx is zero vector'
 
66
      endif
 
67
      if ( abs(w3(5))+abs(w3(6)).eq.rZero ) then
 
68
         write(stdo,*)
 
69
     &        ' helas-error : w3 in vvvxxx has zero momentum'
 
70
      endif
 
71
      pm = max( abs(pwm(0)),abs(pwp(0)),abs(pw3(0)),
 
72
     &          abs(pwm(1)),abs(pwp(1)),abs(pw3(1)),
 
73
     &          abs(pwm(2)),abs(pwp(2)),abs(pw3(2)),
 
74
     &          abs(pwm(3)),abs(pwp(3)),abs(pw3(3)) )
 
75
      if ( abs(wm(5)+wp(5)+w3(5))+abs(wm(6)+wp(6)+w3(6))
 
76
     &                                       .ge.pm*epsi ) then
 
77
         write(stdo,*)
 
78
     &        ' helas-error : wm,wp,w3 in vvvxxx'
 
79
         write(stdo,*)
 
80
     &        '             : have not balanced momenta'
 
81
      endif
 
82
      if ( g.eq.rZero ) then
 
83
         write(stdo,*) ' helas-error : g in vvvxxx is zero coupling'
 
84
      endif
 
85
#endif
 
86
 
 
87
      v12 = wm(1)*wp(1)-wm(2)*wp(2)-wm(3)*wp(3)-wm(4)*wp(4)
 
88
      v23 = wp(1)*w3(1)-wp(2)*w3(2)-wp(3)*w3(3)-wp(4)*w3(4)
 
89
      v31 = w3(1)*wm(1)-w3(2)*wm(2)-w3(3)*wm(3)-w3(4)*wm(4)
 
90
      xv1 = rZero
 
91
      xv2 = rZero
 
92
      xv3 = rZero
 
93
 
 
94
      if ( abs(wm(1)).ne.rZero ) then
 
95
         if ( abs(wm(1)).ge.max(abs(wm(2)),abs(wm(3)),abs(wm(4)))
 
96
     &        *rTenth )
 
97
     &      xv1 = pwm(0)/wm(1)
 
98
      endif
 
99
      if ( abs(wp(1)).ne.rZero) then
 
100
         if ( abs(wp(1)).ge.max(abs(wp(2)),abs(wp(3)),abs(wp(4)))
 
101
     &        *rTenth )
 
102
     &      xv2 = pwp(0)/wp(1)
 
103
      endif
 
104
      if ( abs(w3(1)).ne.rZero) then
 
105
         if ( abs(w3(1)).ge.max(abs(w3(2)),abs(w3(3)),abs(w3(4)))
 
106
     &        *rTenth )
 
107
     &      xv3 = pw3(0)/w3(1)
 
108
      endif
 
109
 
 
110
      p12 = (pwm(0)-xv1*wm(1))*wp(1)-(pwm(1)-xv1*wm(2))*wp(2)
 
111
     &     -(pwm(2)-xv1*wm(3))*wp(3)-(pwm(3)-xv1*wm(4))*wp(4)
 
112
      p13 = (pwm(0)-xv1*wm(1))*w3(1)-(pwm(1)-xv1*wm(2))*w3(2)
 
113
     &     -(pwm(2)-xv1*wm(3))*w3(3)-(pwm(3)-xv1*wm(4))*w3(4)
 
114
      p21 = (pwp(0)-xv2*wp(1))*wm(1)-(pwp(1)-xv2*wp(2))*wm(2)
 
115
     &     -(pwp(2)-xv2*wp(3))*wm(3)-(pwp(3)-xv2*wp(4))*wm(4)
 
116
      p23 = (pwp(0)-xv2*wp(1))*w3(1)-(pwp(1)-xv2*wp(2))*w3(2)
 
117
     &     -(pwp(2)-xv2*wp(3))*w3(3)-(pwp(3)-xv2*wp(4))*w3(4)
 
118
      p31 = (pw3(0)-xv3*w3(1))*wm(1)-(pw3(1)-xv3*w3(2))*wm(2)
 
119
     &     -(pw3(2)-xv3*w3(3))*wm(3)-(pw3(3)-xv3*w3(4))*wm(4)
 
120
      p32 = (pw3(0)-xv3*w3(1))*wp(1)-(pw3(1)-xv3*w3(2))*wp(2)
 
121
     &     -(pw3(2)-xv3*w3(3))*wp(3)-(pw3(3)-xv3*w3(4))*wp(4)
 
122
 
 
123
      vertex = -(v12*(p13-p23)+v23*(p21-p31)+v31*(p32-p12))*g
 
124
c
 
125
      return
 
126
      end