~madteam/mg5amcnlo/series2.0

50.9.3 by Johan Alwall
Added Template and HELAS into bzr
1
      subroutine jvsxxx(vc,sc,gc,vmass,vwidth , jvs)
2
c
3
c This subroutine computes an off-shell vector current from the vector-
4
c vector-scalar coupling.  The vector propagator is given in Feynman
5
c gauge for a massless vector and in unitary gauge for a massive vector.
6
c
7
c input:
8
c       complex vc(6)          : input vector                          v
9
c       complex sc(3)          : input scalar                          s
10
c       complex gc             : coupling constant                  gvvh
11
c       real    vmass          : mass  of output vector v'
12
c       real    vwidth         : width of output vector v'
13
c
14
c output:
15
c       complex jvs(6)         : vector current             j^mu(v':v,s)
16
c     
17
      implicit none
18
      double complex vc(6),sc(3),gc,jvs(6),dg,vk
19
      double complex cm2        ! mass**2- I Gamma mass (Fabio)
20
      double precision q(0:3),vmass,vwidth,q2,vm2
21
22
      double precision rZero
23
      parameter( rZero = 0.0d0 )
24
25
#ifdef HELAS_CHECK
26
      double complex cZero
27
      parameter( cZero = ( 0.0d0, 0.0d0 ) )
28
      integer stdo
29
      parameter( stdo = 6 )
30
#endif
31
c
32
#ifdef HELAS_CHECK
33
      if ( abs(vc(1))+abs(vc(2))+abs(vc(3))+abs(vc(4)).eq.rZero ) then
34
         write(stdo,*) ' helas-warn  : vc in jvsxxx is zero vector'
35
      endif
36
      if ( abs(vc(5))+abs(vc(6)).eq.rZero ) then
37
         write(stdo,*)
38
     &        ' helas-error : vc in jvsxxx has zero momentum'
39
      endif
40
      if ( sc(1).eq.cZero ) then
41
         write(stdo,*) ' helas-warn  : sc in jvsxxx is zero scalar'
42
      endif
43
      if ( abs(sc(2))+abs(sc(3)).eq.rZero ) then
44
         write(stdo,*)
45
     &        ' helas-error : sc in jvsxxx has zero momentum'
46
      endif
47
      if ( gc.eq.cZero ) then
48
         write(stdo,*) ' helas-error : gc in jvsxxx is zero coupling'
49
      endif
50
      if ( vmass.le.rZero ) then
51
         write(stdo,*) ' helas-error : vmass in jvsxxx is not positive'
52
         write(stdo,*) '             : vmass = ',vmass
53
      endif
54
      if ( vwidth.lt.rZero ) then
55
         write(stdo,*) ' helas-error : vwidth in jvsxxx is negative'
56
         write(stdo,*) '             : vwidth = ',vwidth
57
      endif
58
#endif
59
60
      jvs(5) = vc(5)+sc(2)
61
      jvs(6) = vc(6)+sc(3)
62
63
      q(0) = dble( jvs(5))
64
      q(1) = dble( jvs(6))
65
      q(2) = dimag(jvs(6))
66
      q(3) = dimag(jvs(5))
67
      q2 = q(0)**2-(q(1)**2+q(2)**2+q(3)**2)
68
      vm2 = vmass**2
69
70
#ifdef HELAS_CHECK
71
      if ( abs(jvs(5))+abs(jvs(6)).eq.rZero ) then
72
         write(stdo,*)
73
     &        ' helas-error : jvs in jvsxxx has zero momentum'
74
      endif
75
      if ( vwidth.eq.rZero .and. q2.eq.vm2 ) then
76
         write(stdo,*)
77
     &        ' helas-error : jvs in jvsxxx is on vmass pole'
78
         write(stdo,*) 
79
     &        '             : q     = ',q(0),q(1),q(2),q(3)
80
         write(stdo,*) 
81
     &        '             : abs(q)= ',sqrt(abs(q2))
82
         jvs(1)=cmplx(rZero)
83
         jvs(2)=cmplx(rZero)
84
         jvs(3)=cmplx(rZero)
85
         jvs(4)=cmplx(rZero)
86
         return
87
      endif
88
#endif
89
90
      if ( vmass.ne.rZero ) then
91
92
         dg = gc*sc(1)/dcmplx( q2-vm2, vmass*vwidth )
93
c  For the running width, use below instead of the above dg.
94
c         dg = g*sc(1)/dcmplx( q2-vm2, max(vwidth*q2/vmass,rZero) )
95
96
c     Fabio's implementation of the fixed width
97
         cm2=dcmplx( vm2, -vmass*vwidth )
98
c     vk = (-q(0)*vc(1)+q(1)*vc(2)+q(2)*vc(3)+q(3)*vc(4))/vm2
99
         vk = (-q(0)*vc(1)+q(1)*vc(2)+q(2)*vc(3)+q(3)*vc(4))/cm2
100
101
         jvs(1) = dg*(q(0)*vk+vc(1))
102
         jvs(2) = dg*(q(1)*vk+vc(2))
103
         jvs(3) = dg*(q(2)*vk+vc(3))
104
         jvs(4) = dg*(q(3)*vk+vc(4))
105
106
      else
107
108
         dg=gc*sc(1)/q2
109
110
         jvs(1) = dg*vc(1)
111
         jvs(2) = dg*vc(2)
112
         jvs(3) = dg*vc(3)
113
         jvs(4) = dg*vc(4)
114
115
      endif
116
c
117
      return
118
      end