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 |