1
SUBROUTINE INITIALISE(PATH)
8
C the include file with the values of the parameters and masses
15
SUBROUTINE GET_ME(P, ALPHAS, SCALE2, NHEL , ANS,RETURNCODE)
23
C integer nexternal C number particles (incoming+outgoing) in the
25
INCLUDE 'nexternal.inc'
27
C CHARACTER(512) MADLOOPRESOURCEPATH
31
C the include file with the values of the parameters and masses
35
REAL*8 PMASS(NEXTERNAL)
38
INCLUDE 'nsquaredSO.inc'
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(:,:)
48
INTEGER NSQUAREDSO_LOOP
49
REAL*8 , ALLOCATABLE :: PREC_FOUND(:)
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
61
C LOCAL BUFFERING OF ANSWER to avoid re-computing
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
73
DATA BUFFER_POSITION /1/
74
SAVE OLD_ALPHAS, OLD_SCALE2, OLD_NHEL, OLD_P, BUFFER_POSITION
75
SAVE OLD_ME, OLD_RETURN
79
C This is from ML code for the list of split orders selected by
80
C the process definition
83
CHARACTER*20 CHOSEN_LOOP_SO_INDICES(NSQUAREDSO)
84
LOGICAL CHOSEN_LOOP_SO_CONFIGS(NSQUAREDSO)
85
COMMON/CHOSEN_LOOP_SQSO/CHOSEN_LOOP_SO_CONFIGS
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
94
RETURNCODE = OLD_RETURN(I)
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))
110
C Start by initializing what is the squared split orders indices
114
IF (CHOSEN_LOOP_SO_CONFIGS(I)) THEN
115
NLOOPCHOSEN=NLOOPCHOSEN+1
116
WRITE(CHOSEN_LOOP_SO_INDICES(NLOOPCHOSEN),'(I3,A2)') I,'L)'
120
C Update the couplings with the new ALPHAS
121
CALL UPDATE_AS_PARAM2(SCALE2, ALPHAS)
124
C Now we can call the matrix element
127
CALL SLOOPMATRIX_THRES(P,MATELEM,-1.0D0, PREC_FOUND,
130
CALL SLOOPMATRIXHEL_THRES(P,NHEL, MATELEM,-1.0D0, PREC_FOUND,
134
C loop induce -> only finite part
138
C Store result for the buffering
140
OLD_ME(BUFFER_POSITION) = ANS
141
OLD_RETURN(BUFFER_POSITION) = RETURNCODE
142
BUFFER_POSITION = MOD(BUFFER_POSITION, BUFFER_SIZE) +1