Commit 0fe1c9d8 authored by Vincent Rothe's avatar Vincent Rothe
Browse files

v2.7.1

parent 7f1f51aa
......@@ -2,7 +2,25 @@ ChangeLog -- Summary of changes to the WHIZARD package
Use svn log to see detailed changes.
Version 2.7.0
Version 2.7.1
2019-03-27
RELEASE: version 2.7.1
2019-02-19
Further infrastructure for HepMC3 interface (v3.01.00)
2019-02-07
Explicit configure option for using debugging options
Bug fix for performance by removing unnecessary debug operations
2019-01-29
Bug fix for DGLAP remnants with cut-off parameter delta_i
2019-01-24
Radiative decay neu2 -> neu1 A added to MSSM_Hgg model
##################################################################
2019-01-21
RELEASE: version 2.7.0
......
......@@ -231,6 +231,9 @@ Optional Features:
purposes only. The default never has any effect.
[[no]]
--enable-fc-openmp use OpenMP for the Fortran code [[no]]
--enable-fc-debug enable debugging features for the Fortran code
[[no]]
--disable-openmp do not use OpenMP
--enable-fc-profiling use profiling for the Fortran code [[no]]
--enable-fc-impure compile Omega libraries impure [[no]]
--enable-fc-mpi use OpenMPI/MPICH for the Fortran code [[no]]
......@@ -275,6 +278,7 @@ Optional Packages:
double are guaranteed to be provided by all
Fortran compilers.
--with-mpi-lib=mpich|openmpi request an external MPI library.
--with-hepmc=dir assume the given directory for HepMC
--with-pythia8=dir assume the given directory for PYTHIA8
--with-fastjet=dir assume the given directory for FastJet
--with-gosam=dir assume the given directory for GoSam
......@@ -306,7 +310,7 @@ Some influential environment variables:
CXXCPP C++ preprocessor
#-------------------------------------------------------------
# building from svn (developper version)
# building from svn (developer version)
#-------------------------------------------------------------
You will need current versions of automake and autoconf. On some machines,
......@@ -315,7 +319,12 @@ you need to have noweb to be installed for the developer version from the
svn repository. To build the documentations, LaTeX, MetaPost and OcamlWeb
are also necessary tools. Although the first two are quite standard, you
can get them from http://www.tug.org/texlive/. Follow the instructions there.
OcamlWeb is available from http://www.lri.fr/~filliatr/ocamlweb/.
OcamlWeb is available from http://www.lri.fr/~filliatr/ocamlweb/. For building
the HTML version of the manual, you also need HeVeA, which is available from
http://hevea.inria.fr. On some Unix systems the RPC headers needed for the
legacy StdHEP event format support are now provided via the TIRPC library. To
test for this library, autoreconf from autotools makes use of pkg-config
which needs to be installed for the developer version.
The check out can be done in that way:
......@@ -331,7 +340,7 @@ Now continue with directions as if you unpacked a source code tarball.
# building autotools
#-------------------------------------------------------------
If you do not have at least autoconf 2.65 and automake 1.10, you will
If you do not have at least autoconf 2.65 and automake 1.12,2 you will
need to build autoconf and automake. On some platforms, you may also
need to build m4 and texinfo.
......
......@@ -3,5 +3,5 @@ NEWS -- User-visible changes for the WHIZARD package
(for NEWS on the O'Mega matrix element generator cf. its
corresponding NEWS file)
version 2.7.0
version 2.7.1
for details cf. the ChangeLog file
WHIZARD Core
* 2.8
- EWA implementation (some progress in 2.2.0-2)
- integration of multiple observables (cf. VAMP)
- reenabling underlying event
* 2.9
- Mathematica interface
- Parton shower matching (MLM done, CKKW pending)
- GUI extension (partially done)
- Dark Matter
* 3.0
- Tau decay module
O'Mega
* 2.8
- arbitrary Lorentz structure
- flavor sums
- model files unification
- helicity optimization (numerically done/analytically pending)
* 2.8
- W-gamma couplings to resonances
- W'
VAMP
* 2.8
- unify naming conventions for types with WHIZARD (JR will do,
e.g. type :: division -> division_t (partially done)
* 2.9
- integration of multiple observables
Misc
* Release 2.8
- Manual + O'Mega Paper (partially done)
* 2.8
- review gamelan (partially done, esp. docu)
VAMP
* reenable as much PURE and ELEMENTAL as possible and try to make
the `poor man's elemental procedures' in pmep.nw obsolete.
Longer term:
* replace pointers by allocatable arrays (using deep copy?)
* try to declare WK's PRC_INDEX as OPTIONAL
* try to declare WK's PRC_INDEX more abstractly
CIRCE2
* fix multi channel distributions with singularities at x = 0
* find a better way to test distributions with delta contributions
* update the documentation
* add sensible installcheck for the library (and sample data files)
CIRCE2
* fix multi channel distributions with singularities at x = 0
* find a better way to test distributions with delta contributions
* update the documentation
* add sensible installcheck for the library (and sample data files)
......@@ -372,7 +372,7 @@ contains
return
end if
if (ierror .gt. 0) then
write (*, '(2A)') 'circe2_load: ', 'Version 2.7.0'
write (*, '(2A)') 'circe2_load: ', 'Version 2.7.1'
end if
prefix = index (design, '*') - 1
do
......
......@@ -3,7 +3,7 @@
@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Implementation of [[circe2]]}
<<Version>>=
'Version 2.7.0'
'Version 2.7.1'
@
<<[[implicit none]]>>=
implicit none
......
......@@ -216,6 +216,11 @@ echo "Fortran compiler: --- $FC_VENDOR ---"
echo " Version: --- $FC_VERSION ---"
echo " Flags: --- $FCFLAGS ---"
echo " float precision: --- $FC_PRECISION ---"
if test "$FC_DEBUG_ON" = ".true."; then
echo " debug features: --- on ---"
else
echo " debug features: --- off ---"
fi
if test "$FC_OPENMP_OFF" = "!" ; then
echo " OpenMP: --- on with max. $FC_OPENMP_DEFAULT_MAX_THREADS threads"
elif test "$FC_OPENMP_ON" = "!" ; then
......
......@@ -774,6 +774,28 @@ AC_SUBST([FC_SUPPORTS_OPENMP])
])
### end WO_FC_CHECK_OPENMP
### Turn on/off master switch for debugging features
AC_DEFUN([WO_FC_SET_DEBUG],
[dnl
AC_ARG_ENABLE([fc_debug],
[AS_HELP_STRING([--enable-fc-debug],
[enable debugging features for the Fortran code [[no]]])])
AC_CACHE_CHECK([whether debugging facilities are enabled], [wo_cv_fc_debug_on],
[dnl
if test "$enable_fc_debug" = "yes"; then
wo_cv_fc_debug_on=yes
else
wo_cv_fc_debug_on=no
fi
])
if test "$wo_cv_fc_debug_on" = "yes"; then
FC_DEBUG_ON=.true.
else
FC_DEBUG_ON=.false.
fi
AC_SUBST([FC_DEBUG_ON])
])
### Enable/disable OpenMP support
AC_DEFUN([WO_FC_SET_OPENMP],
[dnl
......
......@@ -20,7 +20,7 @@ hepmcok="no"
if test "$enable_hepmc" = "yes"; then
ACX_CHECK_HEPMC3()
if test "${hepmcok}" = "no"; then
AC_MSG_NOTICE([HepMC3 not found, incompatible, or HepMC-config not found])
AC_MSG_NOTICE([HepMC3 not found, incompatible, or HepMC3-config not found])
AC_MSG_NOTICE([looking for HepMC2 instead ... ])
if test -n "$HEPMC_DIR"; then
wo_hepmc_includes="-I$HEPMC_DIR/include"
......@@ -75,7 +75,7 @@ if test "$enable_hepmc" = "yes"; then
fi
else
hepmc_is_v3="yes"
AC_MSG_CHECKING([the HepMC version])
AC_MSG_CHECKING([the HepMC3 version])
save_CXXFLAGS="$CXXFLAGS"
save_LIBS="$LIBS"
CXXFLAGS="${CXXFLAGS} --std=c++11 `${hepmcconfig} --cxxflags`"
......@@ -85,9 +85,9 @@ if test "$enable_hepmc" = "yes"; then
AC_LANG_PROGRAM([[
#include <stdio.h>
#include <iostream>
#include "HepMC/Version.h"
#include "HepMC3/Version.h"
]],
[[using namespace HepMC; std::cout << HepMC::version();]])],
[[using namespace HepMC3; std::cout << HepMC3::version();]])],
[dnl
wk_hepmc_version=`./conftest`
AC_MSG_RESULT([$wk_hepmc_version])],
......@@ -130,11 +130,11 @@ AC_ARG_WITH(HepMC,
[AC_HELP_STRING([--with-hepmc=dir],
[assume the given directory for HepMC])])
dnl search for the hepmc-config script
dnl search for the Hepmc3-config script
if test "$with_hepmc" = ""; then
AC_PATH_PROG(hepmcconfig, HepMC-config, no)
AC_PATH_PROG(hepmcconfig, HepMC3-config, no)
else
AC_PATH_PROG(hepmcconfig, HepMC-config, no, ${with_hepmc}/bin)
AC_PATH_PROG(hepmcconfig, HepMC3-config, no, ${with_hepmc}/bin)
fi
if test "${hepmcconfig}" = "no"; then
......
......@@ -21,8 +21,8 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *)
let version = "2.7.0"
let date = "Jan 21 2019"
let version = "2.7.1"
let date = "Mar 27 2019"
let status = "release"
let default_UFO_dir = "/Users/reuter/local/omega/share/UFO"
......
......@@ -422,7 +422,7 @@ module MSSM (Flags : MSSM_flags) =
| G_strong | G_SS | I_G_S | G_S_Sqrt
| Gs
| M of flavor | W of flavor
| G_NZN of neu*neu | G_CZC of char*char
| G_NZN of neu*neu | G_CZC of char*char | G_NNA
| G_YUK of int*int
| G_YUK_1 of int*int | G_YUK_2 of int*int | G_YUK_3 of int*int
| G_YUK_4 of int*int | G_NHC of neu*char | G_CHN of char*neu
......@@ -727,7 +727,17 @@ generalization to complex parameters is obvious. *)
(*** REVISED: Compatible with CD+. ***)
let neutral_Z_2 n =
[ ((Neutralino n, Z, Neutralino n), FBF (1, Chibar, Coupling.A, Chi),
(G_NZN (n,n)) )]
(G_NZN (n,n)) )]
(* For very compressed spectra, radiative decays of the next-to-lightest neutralino
become important. The formula can be found Haber/Wyler, 1989. In abuse, we
include this loop-induced coupling together in the same model variant with the
triangle Higgs couplings. *)
let neutral_A =
if Flags.higgs_triangle then
[ ((Neutralino N2, Ga, Neutralino N1), FBF (1, Chibar, TVAM, Chi), G_NNA) ]
else
[]
(*** REVISED: Compatible with CD+. ***)
let charged_Z c1 c2 =
......@@ -1785,7 +1795,7 @@ generalization to complex parameters is obvious. *)
[C1;C2]) @ triple_gauge @
ThoList.flatmap neutral_Z_1 [(N1,N2);(N1,N3);(N1,N4);(N2,N3);(N2,N4);
(N3,N4)] @
ThoList.flatmap neutral_Z_2 [N1;N2;N3;N4] @
ThoList.flatmap neutral_Z_2 [N1;N2;N3;N4] @ neutral_A @
Product.list2 charged_Z [C1;C2] [C1;C2] @
gauge_higgs @ higgs @ yukawa_higgs_2 @
List.flatten (Product.list2 higgs_charg_neutr [N1;N2;N3;N4] [C1;C2]) @
......@@ -1817,7 +1827,7 @@ generalization to complex parameters is obvious. *)
[C1;C2]) @ triple_gauge @
ThoList.flatmap neutral_Z_1 [(N1,N2);(N1,N3);(N1,N4);(N2,N3);(N2,N4);
(N3,N4)] @
ThoList.flatmap neutral_Z_2 [N1;N2;N3;N4] @
ThoList.flatmap neutral_Z_2 [N1;N2;N3;N4] @ neutral_A @
Product.list2 charged_Z [C1;C2] [C1;C2] @
gauge_higgs @ higgs @ yukawa_higgs_2 @
List.flatten (Product.list2 higgs_charg_neutr [N1;N2;N3;N4] [C1;C2]) @
......@@ -2361,7 +2371,8 @@ generalization to complex parameters is obvious. *)
| G_CAC (c1,c2) -> "gcac_" ^ string_of_char c1 ^ "_" ^ string_of_char c2
| G_CGC (c1,c2) -> "gcgc_" ^ string_of_char c1 ^ "_" ^ string_of_char c2
| G_YUK (i,g) -> "g_yuk" ^ string_of_int i ^ "_" ^ string_of_int g
| G_NZN (n1,n2) -> "gnzn_" ^ string_of_neu n1 ^ "_" ^ string_of_neu n2
| G_NZN (n1,n2) -> "gnzn_" ^ string_of_neu n1 ^ "_" ^ string_of_neu n2
| G_NNA -> "gnna"
| G_CZC (c1,c2) -> "gczc_" ^ string_of_char c1 ^ "_" ^ string_of_char
c2
| G_YUK_1 (n,m) -> "g_yuk1_" ^ string_of_int n ^ "_" ^ string_of_int m
......
......@@ -35,8 +35,10 @@ module omega_bispinor_couplings
private
public :: u, v, ghost
public :: brs_u, brs_v
public :: va_ff, v_ff, a_ff, vl_ff, vr_ff, vlr_ff, va2_ff
public :: f_vaf, f_vf, f_af, f_vlf, f_vrf, f_vlrf, f_va2f
public :: va_ff, v_ff, a_ff, vl_ff, vr_ff, vlr_ff, va2_ff, tva_ff, tvam_ff, &
tlr_ff, tlrm_ff
public :: f_vaf, f_vf, f_af, f_vlf, f_vrf, f_vlrf, f_va2f, &
f_tvaf, f_tlrf, f_tvamf, f_tlrmf
public :: sp_ff, s_ff, p_ff, sl_ff, sr_ff, slr_ff
public :: f_spf, f_sf, f_pf, f_slf, f_srf, f_slrf
private :: vv_ff, f_vvf
......@@ -310,6 +312,51 @@ contains
type(bispinor), intent(in) :: psi
j = va_ff (gl+gr, gl-gr, psibar, psi)
end function vlr_ff
pure function tva_ff (gv, ga, psibar, psi) result (t)
type(tensor2odd) :: t
complex(kind=default), intent(in) :: gv, ga
type(bispinor), intent(in) :: psibar
type(bispinor), intent(in) :: psi
complex(kind=default) :: gl, gr
complex(kind=default) :: g11, g22, g33, g44, g1p2, g3p4
gr = gv + ga
gl = gv - ga
g11 = psibar%a(1)*psi%a(1)
g22 = psibar%a(2)*psi%a(2)
g1p2 = psibar%a(1)*psi%a(2) + psibar%a(2)*psi%a(1)
g3p4 = psibar%a(3)*psi%a(4) + psibar%a(4)*psi%a(3)
g33 = psibar%a(3)*psi%a(3)
g44 = psibar%a(4)*psi%a(4)
t%e(1) = (gl * ( - g11 + g22) + gr * ( - g33 + g44)) * (0, 1)
t%e(2) = gl * ( g11 + g22) + gr * ( g33 + g44)
t%e(3) = (gl * ( g1p2 ) + gr * ( g3p4 )) * (0, 1)
t%b(1) = gl * ( g11 - g22) + gr * ( - g33 + g44)
t%b(2) = (gl * ( g11 + g22) + gr * ( - g33 - g44)) * (0, 1)
t%b(3) = gl * ( - g1p2 ) + gr * ( g3p4 )
end function tva_ff
pure function tlr_ff (gl, gr, psibar, psi) result (t)
type(tensor2odd) :: t
complex(kind=default), intent(in) :: gl, gr
type(bispinor), intent(in) :: psibar
type(bispinor), intent(in) :: psi
t = tva_ff (gr+gl, gr-gl, psibar, psi)
end function tlr_ff
pure function tvam_ff (gv, ga, psibar, psi, p) result (j)
type(vector) :: j
complex(kind=default), intent(in) :: gv, ga
type(bispinor), intent(in) :: psibar
type(bispinor), intent(in) :: psi
type(momentum), intent(in) :: p
j = (tva_ff(gv, ga, psibar, psi) * p) * (0,1)
end function tvam_ff
pure function tlrm_ff (gl, gr, psibar, psi, p) result (j)
type(vector) :: j
complex(kind=default), intent(in) :: gl, gr
type(bispinor), intent(in) :: psibar
type(bispinor), intent(in) :: psi
type(momentum), intent(in) :: p
j = tvam_ff (gr+gl, gr-gl, psibar, psi, p)
end function tlrm_ff
pure function f_vaf (gv, ga, v, psi) result (vpsi)
type(bispinor) :: vpsi
complex(kind=default), intent(in) :: gv, ga
......@@ -417,6 +464,51 @@ contains
type(bispinor), intent(in) :: psi
vpsi = f_vaf (gl+gr, gl-gr, v, psi)
end function f_vlrf
pure function f_tvaf (gv, ga, t, psi) result (tpsi)
type(bispinor) :: tpsi
complex(kind=default), intent(in) :: gv, ga
type(tensor2odd), intent(in) :: t
type(bispinor), intent(in) :: psi
complex(kind=default) :: gl, gr
complex(kind=default) :: e21, e21s, b12, b12s, be3, be3s
gr = gv + ga
gl = gv - ga
e21 = t%e(2) + t%e(1)*(0,1)
e21s = t%e(2) - t%e(1)*(0,1)
b12 = t%b(1) + t%b(2)*(0,1)
b12s = t%b(1) - t%b(2)*(0,1)
be3 = t%b(3) + t%e(3)*(0,1)
be3s = t%b(3) - t%e(3)*(0,1)
tpsi%a(1) = 2*gl * ( psi%a(1) * be3 + psi%a(2) * ( e21 +b12s))
tpsi%a(2) = 2*gl * ( - psi%a(2) * be3 + psi%a(1) * (-e21s+b12 ))
tpsi%a(3) = 2*gr * ( psi%a(3) * be3s + psi%a(4) * (-e21 +b12s))
tpsi%a(4) = 2*gr * ( - psi%a(4) * be3s + psi%a(3) * ( e21s+b12 ))
end function f_tvaf
pure function f_tlrf (gl, gr, t, psi) result (tpsi)
type(bispinor) :: tpsi
complex(kind=default), intent(in) :: gl, gr
type(tensor2odd), intent(in) :: t
type(bispinor), intent(in) :: psi
tpsi = f_tvaf (gr+gl, gr-gl, t, psi)
end function f_tlrf
pure function f_tvamf (gv, ga, v, psi, k) result (vpsi)
type(bispinor) :: vpsi
complex(kind=default), intent(in) :: gv, ga
type(vector), intent(in) :: v
type(bispinor), intent(in) :: psi
type(momentum), intent(in) :: k
type(tensor2odd) :: t
t = (v.wedge.k) * (0, 0.5)
vpsi = f_tvaf(gv, ga, t, psi)
end function f_tvamf
pure function f_tlrmf (gl, gr, v, psi, k) result (vpsi)
type(bispinor) :: vpsi
complex(kind=default), intent(in) :: gl, gr
type(vector), intent(in) :: v
type(bispinor), intent(in) :: psi
type(momentum), intent(in) :: k
vpsi = f_tvamf (gr+gl, gr-gl, v, psi, k)
end function f_tlrmf
pure function sp_ff (gs, gp, psil, psir) result (j)
complex(kind=default) :: j
complex(kind=default), intent(in) :: gs, gp
......
......@@ -6549,7 +6549,8 @@ and
\end{align}
\end{subequations}
<<Declaration of bispinor currents>>=
public :: va_ff, v_ff, a_ff, vl_ff, vr_ff, vlr_ff, va2_ff
public :: va_ff, v_ff, a_ff, vl_ff, vr_ff, vlr_ff, va2_ff, tva_ff, tvam_ff, &
tlr_ff, tlrm_ff
@
<<Implementation of bispinor currents>>=
pure function va_ff (gv, ga, psil, psir) result (j)
......@@ -6682,6 +6683,59 @@ pure function vlr_ff (gl, gr, psibar, psi) result (j)
j = va_ff (gl+gr, gl-gr, psibar, psi)
end function vlr_ff
@
<<Implementation of bispinor currents>>=
pure function tva_ff (gv, ga, psibar, psi) result (t)
type(tensor2odd) :: t
complex(kind=default), intent(in) :: gv, ga
type(bispinor), intent(in) :: psibar
type(bispinor), intent(in) :: psi
complex(kind=default) :: gl, gr
complex(kind=default) :: g11, g22, g33, g44, g1p2, g3p4
gr = gv + ga
gl = gv - ga
g11 = psibar%a(1)*psi%a(1)
g22 = psibar%a(2)*psi%a(2)
g1p2 = psibar%a(1)*psi%a(2) + psibar%a(2)*psi%a(1)
g3p4 = psibar%a(3)*psi%a(4) + psibar%a(4)*psi%a(3)
g33 = psibar%a(3)*psi%a(3)
g44 = psibar%a(4)*psi%a(4)
t%e(1) = (gl * ( - g11 + g22) + gr * ( - g33 + g44)) * (0, 1)
t%e(2) = gl * ( g11 + g22) + gr * ( g33 + g44)
t%e(3) = (gl * ( g1p2 ) + gr * ( g3p4 )) * (0, 1)
t%b(1) = gl * ( g11 - g22) + gr * ( - g33 + g44)
t%b(2) = (gl * ( g11 + g22) + gr * ( - g33 - g44)) * (0, 1)
t%b(3) = gl * ( - g1p2 ) + gr * ( g3p4 )
end function tva_ff
@
<<Implementation of bispinor currents>>=
pure function tlr_ff (gl, gr, psibar, psi) result (t)
type(tensor2odd) :: t
complex(kind=default), intent(in) :: gl, gr
type(bispinor), intent(in) :: psibar
type(bispinor), intent(in) :: psi
t = tva_ff (gr+gl, gr-gl, psibar, psi)
end function tlr_ff
@
<<Implementation of bispinor currents>>=
pure function tvam_ff (gv, ga, psibar, psi, p) result (j)
type(vector) :: j
complex(kind=default), intent(in) :: gv, ga
type(bispinor), intent(in) :: psibar
type(bispinor), intent(in) :: psi
type(momentum), intent(in) :: p
j = (tva_ff(gv, ga, psibar, psi) * p) * (0,1)
end function tvam_ff
@
<<Implementation of bispinor currents>>=
pure function tlrm_ff (gl, gr, psibar, psi, p) result (j)
type(vector) :: j
complex(kind=default), intent(in) :: gl, gr
type(bispinor), intent(in) :: psibar
type(bispinor), intent(in) :: psi
type(momentum), intent(in) :: p
j = tvam_ff (gr+gl, gr-gl, psibar, psi, p)
end function tlrm_ff
@
and
\begin{equation}
\fmslash{v} - \fmslash{a}\gamma_5 =
......@@ -6697,7 +6751,8 @@ $v^*=v_1-\ii v_2$, $a=a_1+\ii a_2$, and $a^*=a_1-\ii a_2$. But note
that~$\cdot^*$ is \emph{not} complex conjugation for complex~$v_\mu$
or~$a_\mu$.
<<Declaration of bispinor currents>>=
public :: f_vaf, f_vf, f_af, f_vlf, f_vrf, f_vlrf, f_va2f
public :: f_vaf, f_vf, f_af, f_vlf, f_vrf, f_vlrf, f_va2f, &
f_tvaf, f_tlrf, f_tvamf, f_tlrmf
@
<<Implementation of bispinor currents>>=
pure function f_vaf (gv, ga, v, psi) result (vpsi)
......@@ -6819,6 +6874,59 @@ pure function f_vlrf (gl, gr, v, psi) result (vpsi)
type(bispinor), intent(in) :: psi
vpsi = f_vaf (gl+gr, gl-gr, v, psi)
end function f_vlrf
@
<<Implementation of bispinor currents>>=
pure function f_tvaf (gv, ga, t, psi) result (tpsi)
type(bispinor) :: tpsi
complex(kind=default), intent(in) :: gv, ga
type(tensor2odd), intent(in) :: t
type(bispinor), intent(in) :: psi
complex(kind=default) :: gl, gr
complex(kind=default) :: e21, e21s, b12, b12s, be3, be3s
gr = gv + ga
gl = gv - ga
e21 = t%e(2) + t%e(1)*(0,1)
e21s = t%e(2) - t%e(1)*(0,1)
b12 = t%b(1) + t%b(2)*(0,1)
b12s = t%b(1) - t%b(2)*(0,1)
be3 = t%b(3) + t%e(3)*(0,1)
be3s = t%b(3) - t%e(3)*(0,1)
tpsi%a(1) = 2*gl * ( psi%a(1) * be3 + psi%a(2) * ( e21 +b12s))
tpsi%a(2) = 2*gl * ( - psi%a(2) * be3 + psi%a(1) * (-e21s+b12 ))
tpsi%a(3) = 2*gr * ( psi%a(3) * be3s + psi%a(4) * (-e21 +b12s))
tpsi%a(4) = 2*gr * ( - psi%a(4) * be3s + psi%a(3) * ( e21s+b12 ))
end function f_tvaf
@
<<Implementation of bispinor currents>>=
pure function f_tlrf (gl, gr, t, psi) result (tpsi)
type(bispinor) :: tpsi
complex(kind=default), intent(in) :: gl, gr
type(tensor2odd), intent(in) :: t
type(bispinor), intent(in) :: psi
tpsi = f_tvaf (gr+gl, gr-gl, t, psi)
end function f_tlrf
@
<<Implementation of bispinor currents>>=
pure function f_tvamf (gv, ga, v, psi, k) result (vpsi)
type(bispinor) :: vpsi
complex(kind=default), intent(in) :: gv, ga
type(vector), intent(in) :: v
type(bispinor), intent(in) :: psi
type(momentum), intent(in) :: k
type(tensor2odd) :: t
t = (v.wedge.k) * (0, 0.5)
vpsi = f_tvaf(gv, ga, t, psi)
end function f_tvamf
@
<<Implementation of bispinor currents>>=
pure function f_tlrmf (gl, gr, v, psi, k) result (vpsi)
type(bispinor) :: vpsi
complex(kind=default), intent(in) :: gl, gr
type(vector), intent(in) :: v
type(bispinor), intent(in) :: psi
type(momentum), intent(in) :: k
vpsi = f_tvamf (gr+gl, gr-gl, v, psi, k)
end function f_tlrmf
@ \subsection{Fermionic Scalar and Pseudo Scalar Couplings}
<<Declaration of bispinor currents>>=
public :: sp_ff, s_ff, p_ff, sl_ff, sr_ff, slr_ff
......@@ -11380,15 +11488,16 @@ program test_omega95_bispinors
integer :: i, j
real(kind=default) :: m, pabs, qabs, tabs, zabs, w
real(kind=default), dimension(4) :: r
complex(kind=default) :: c_one, c_two
complex(kind=default) :: c_nil, c_one, c_two
type(momentum) :: p, q, t, z, p_0
type(vector) :: vp, vq, vt, vz
type(vectorspinor) :: testv
type(bispinor) :: vv
logical :: passed
call random_seed ()
c_one = 1
c_two = 2
c_nil = 0.0_default
c_one = 1.0_default
c_two = 2.0_default
w = 1.4142