~chirality-flow/chiralityflow/ChiralityFlowMG

« back to all changes in this revision

Viewing changes to tests/input_files/IOTestsComparison/IOExportFKSTest/test_wprod_fksew/%SubProcesses%P0_dxu_veep%V0_dxu_veep%f2py_wrapper.f

  • Committer: andrew.lifson at lu
  • Date: 2021-09-02 13:57:34 UTC
  • Revision ID: andrew.lifson@thep.lu.se-20210902135734-4eybgli0iljkax9b
added fresh copy of MG5_aMC_v3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
      SUBROUTINE INITIALISE(PATH)
 
2
 
 
3
      CHARACTER(128) PATH
 
4
CF2PY intent(in)::path
 
5
 
 
6
C     INCLUDE FILES
 
7
C     
 
8
C     the include file with the values of the parameters and masses   
 
9
C     
 
10
      INCLUDE 'coupl.inc'
 
11
      CALL SETPARA(PATH)
 
12
      RETURN
 
13
      END
 
14
 
 
15
      SUBROUTINE GET_ME(P, ALPHAS, SCALE2, NHEL , ANS,RETURNCODE)
 
16
      IMPLICIT NONE
 
17
C     
 
18
C     CONSTANTS  
 
19
C     
 
20
      REAL*8 ZERO
 
21
      PARAMETER (ZERO=0D0)
 
22
 
 
23
C     integer nexternal C number particles (incoming+outgoing) in the
 
24
C     me 
 
25
      INCLUDE 'nexternal.inc'
 
26
 
 
27
C     CHARACTER(512) MADLOOPRESOURCEPATH
 
28
C     
 
29
C     INCLUDE FILES
 
30
C     
 
31
C     the include file with the values of the parameters and masses   
 
32
C     
 
33
      INCLUDE 'coupl.inc'
 
34
C     particle masses
 
35
      REAL*8 PMASS(NEXTERNAL)
 
36
C     integer    n_max_cg
 
37
      INCLUDE 'ngraphs.inc'
 
38
      INCLUDE 'nsquaredSO.inc'
 
39
 
 
40
C     LOCAL
 
41
C     
 
42
      INTEGER I
 
43
C     four momenta. Energy is the zeroth component.
 
44
      REAL*8 P(0:3,NEXTERNAL)
 
45
      INTEGER MATELEM_ARRAY_DIM
 
46
      REAL*8 , ALLOCATABLE :: MATELEM(:,:)
 
47
      INTEGER RETURNCODE
 
48
      INTEGER NSQUAREDSO_LOOP
 
49
      REAL*8 , ALLOCATABLE :: PREC_FOUND(:)
 
50
 
 
51
      DOUBLE PRECISION ANS
 
52
      INTEGER NHEL
 
53
      DOUBLE PRECISION ALPHAS, SCALE2
 
54
CF2PY INTENT(OUT) :: ANS
 
55
CF2PY INTENT(OUT) :: RETURNCODE
 
56
CF2PY INTENT(IN) :: NHEL
 
57
CF2PY INTENT(IN) :: P(0:3,NEXTERNAL)
 
58
CF2PY INTENT(IN) :: ALPHAS
 
59
CF2PY INTENT(IN) :: SCALE2
 
60
C     
 
61
C     LOCAL BUFFERING OF ANSWER to avoid re-computing
 
62
C     
 
63
      INTEGER BUFFER_SIZE
 
64
      PARAMETER (BUFFER_SIZE=5)
 
65
      DOUBLE PRECISION OLD_ALPHAS(BUFFER_SIZE)
 
66
      DOUBLE PRECISION OLD_SCALE2(BUFFER_SIZE)
 
67
      INTEGER OLD_NHEL(BUFFER_SIZE)
 
68
      DOUBLE PRECISION OLD_P(0:3,NEXTERNAL,BUFFER_SIZE)
 
69
      DOUBLE PRECISION OLD_ME(BUFFER_SIZE)
 
70
      INTEGER OLD_RETURN(BUFFER_SIZE)
 
71
      INTEGER BUFFER_POSITION
 
72
 
 
73
      DATA BUFFER_POSITION /1/
 
74
      SAVE OLD_ALPHAS, OLD_SCALE2, OLD_NHEL, OLD_P, BUFFER_POSITION
 
75
      SAVE OLD_ME, OLD_RETURN
 
76
C     
 
77
C     GLOBAL VARIABLES
 
78
C     
 
79
C     This is from ML code for the list of split orders selected by
 
80
C     the process definition
 
81
C     
 
82
      INTEGER NLOOPCHOSEN
 
83
      CHARACTER*20 CHOSEN_LOOP_SO_INDICES(NSQUAREDSO)
 
84
      LOGICAL CHOSEN_LOOP_SO_CONFIGS(NSQUAREDSO)
 
85
      COMMON/CHOSEN_LOOP_SQSO/CHOSEN_LOOP_SO_CONFIGS
 
86
C     
 
87
C     CHECK BUFFERING
 
88
C     
 
89
      DO I=1, BUFFER_SIZE
 
90
        IF(SCALE2.EQ.OLD_SCALE2(I))THEN
 
91
          IF(ALPHAS.EQ.OLD_ALPHAS(I).AND.NHEL.EQ.OLD_NHEL(I))THEN
 
92
            IF(ALL(P.EQ.OLD_P(:,:,I)))THEN
 
93
              ANS = OLD_ME(I)
 
94
              RETURNCODE = OLD_RETURN(I)
 
95
              RETURN
 
96
            ENDIF
 
97
          ENDIF
 
98
        ENDIF
 
99
      ENDDO
 
100
C     
 
101
C     BEGIN CODE
 
102
C     
 
103
      CALL FORCE_STABILITY_CHECK(.TRUE.)
 
104
      CALL GET_ANSWER_DIMENSION(MATELEM_ARRAY_DIM)
 
105
      ALLOCATE(MATELEM(0:3,0:MATELEM_ARRAY_DIM))
 
106
      CALL GET_NSQSO_LOOP(NSQUAREDSO_LOOP)
 
107
      ALLOCATE(PREC_FOUND(0:NSQUAREDSO_LOOP))
 
108
      INCLUDE 'pmass.inc'
 
109
 
 
110
C     Start by initializing what is the squared split orders indices
 
111
C     chosen
 
112
      NLOOPCHOSEN=0
 
113
      DO I=1,NSQUAREDSO
 
114
        IF (CHOSEN_LOOP_SO_CONFIGS(I)) THEN
 
115
          NLOOPCHOSEN=NLOOPCHOSEN+1
 
116
          WRITE(CHOSEN_LOOP_SO_INDICES(NLOOPCHOSEN),'(I3,A2)') I,'L)'
 
117
        ENDIF
 
118
      ENDDO
 
119
 
 
120
C     Update the couplings with the new ALPHAS
 
121
      CALL UPDATE_AS_PARAM2(SCALE2, ALPHAS)
 
122
 
 
123
C     
 
124
C     Now we can call the matrix element
 
125
C     
 
126
      IF (NHEL.EQ.0) THEN
 
127
        CALL SLOOPMATRIX_THRES(P,MATELEM,-1.0D0, PREC_FOUND,
 
128
     $    RETURNCODE)
 
129
      ELSE
 
130
        CALL SLOOPMATRIXHEL_THRES(P,NHEL, MATELEM,-1.0D0, PREC_FOUND,
 
131
     $    RETURNCODE)
 
132
      ENDIF
 
133
 
 
134
C     loop induce -> only finite part 
 
135
      ANS =  MATELEM(1,0)
 
136
 
 
137
C     
 
138
C     Store result for the buffering
 
139
C     
 
140
      OLD_ME(BUFFER_POSITION) = ANS
 
141
      OLD_RETURN(BUFFER_POSITION) = RETURNCODE
 
142
      BUFFER_POSITION = MOD(BUFFER_POSITION, BUFFER_SIZE) +1
 
143
 
 
144
      END
 
145
 
 
146
 
 
147
 
 
148
 
 
149
 
 
150
 
 
151
 
 
152