Skip to content

Commit

Permalink
[lhe] madgraph5#402 and madgraph5#403 ggtt.mad - WIP on patching auto…
Browse files Browse the repository at this point in the history
…_dsig1.f, auto_dsig.f, matrix1.f

This commit formally merges my "patches" and Olivier's color/helicity changes in these three files
(the only three files affected by Olivier's changes)

BUT I am still missing all of my other "patches"
  • Loading branch information
valassi committed Dec 6, 2022
1 parent 79d8f63 commit 3ad6a11
Show file tree
Hide file tree
Showing 3 changed files with 160 additions and 54 deletions.
66 changes: 33 additions & 33 deletions epochX/cudacpp/gg_tt.mad/SubProcesses/P1_gg_ttx/auto_dsig.f
Original file line number Diff line number Diff line change
Expand Up @@ -117,23 +117,23 @@ SUBROUTINE PREPARE_GROUPING_CHOICE(PP, WGT, INIT)
ENDIF
END

SUBROUTINE SELECT_GROUPING(IMIRROR, IPROC, ICONF, WGT, NB_PAGE)
SUBROUTINE SELECT_GROUPING(IMIRROR, IPROC, ICONF, WGT, NB_PAGE_LOOP)
USE DISCRETESAMPLER
IMPLICIT NONE
C
C INPUT (VIA COMMAND BLOCK)
C SELPROC
C SUMPROB
C INPUT
C nb_page (number of weight to update)
C nb_page_loop (number of weight to update)
C INPUT/OUTPUT
C WGTS(nb_page) #multiplied by the associated jacobian
C WGTS(nb_page_loop) #multiplied by the associated jacobian
C
C OUTPUT
C
C iconf, iproc, imirror
C
INTEGER NB_PAGE
INTEGER NB_PAGE_LOOP
DOUBLE PRECISION WGT(*)
INTEGER IMIRROR, IPROC, ICONF

Expand Down Expand Up @@ -207,15 +207,15 @@ SUBROUTINE SELECT_GROUPING(IMIRROR, IPROC, ICONF, WGT, NB_PAGE)
50 CONTINUE
C Update weigth w.r.t SELPROC normalized to selection probability

DO I=1, NB_PAGE
DO I=1, NB_PAGE_LOOP
WGT(I)=WGT(I)*(SUMPROB/SELPROC(IMIRROR,IPROC,ICONF))
ENDDO

ELSE
C We are using the grouped_processes grid and it is initialized.
CALL DS_GET_POINT('grouped_processes',R,LMAPPED
$ ,MC_GROUPED_PROC_JACOBIAN,'norm',(/'PDF_convolution'/))
DO I=1, NB_PAGE
DO I=1, NB_PAGE_LOOP
WGT(I)=WGT(I)*MC_GROUPED_PROC_JACOBIAN
ENDDO
CALL MAP_1_TO_3(LMAPPED,MAXSPROC,2,ICONF,IPROC,IMIRROR)
Expand All @@ -224,19 +224,19 @@ SUBROUTINE SELECT_GROUPING(IMIRROR, IPROC, ICONF, WGT, NB_PAGE)
END

SUBROUTINE DSIG_VEC(ALL_P,ALL_WGT,ALL_XBK, ALL_Q2FACT,
$ ALL_CM_RAP, ICONF,IPROC,IMIRROR, ALL_OUT,NB_PAGE)
$ ALL_CM_RAP, ICONF,IPROC,IMIRROR, ALL_OUT,NB_PAGE_LOOP)
C ******************************************************
C
C INPUT: ALL_PP(0:3, NEXTERNAL, NB_PAGE)
C INPUT/OUtpUT ALL_WGT(Nb_PAGE)
C nb_page = vector size
C ALL_OUT(NB_PAGE)
C INPUT: ALL_PP(0:3, NEXTERNAL, NB_PAGE_LOOP)
C INPUT/OUtpUT ALL_WGT(Nb_Page_Loop)
C nb_page_loop = vector size
C ALL_OUT(NB_PAGE_LOOP)
C function (PDf*cross)
C ******************************************************
USE DISCRETESAMPLER
IMPLICIT NONE

INTEGER NB_PAGE
INTEGER NB_PAGE_LOOP
INCLUDE 'genps.inc'
DOUBLE PRECISION ALL_P(4*MAXDIM/3+14,*)
DOUBLE PRECISION ALL_WGT(*)
Expand Down Expand Up @@ -301,8 +301,7 @@ SUBROUTINE DSIG_VEC(ALL_P,ALL_WGT,ALL_XBK, ALL_Q2FACT,

C set the running scale
C and update the couplings accordingly
CALL UPDATE_SCALE_COUPLING_VEC(ALL_P, ALL_WGT, ALL_Q2FACT,
$ NB_PAGE)
CALL UPDATE_SCALE_COUPLING_VEC(ALL_P, ALL_WGT, ALL_Q2FACT, NB_PAGE_LOOP)

IF(GROUPED_MC_GRID_STATUS.EQ.0) THEN
C If we were in the initialization phase of the grid for MC over
Expand All @@ -316,7 +315,7 @@ SUBROUTINE DSIG_VEC(ALL_P,ALL_WGT,ALL_XBK, ALL_Q2FACT,
$ IPROC,IMIRROR,SYMCONF,CONFSUB,ALL_WGT,0, ALL_OUT)


DO I =1,NB_PAGE
DO I =1,NB_PAGE_LOOP
C Reset ALLOW_HELICITY_GRID_ENTRIES
ALLOW_HELICITY_GRID_ENTRIES = .TRUE.

Expand All @@ -333,7 +332,7 @@ SUBROUTINE DSIG_VEC(ALL_P,ALL_WGT,ALL_XBK, ALL_Q2FACT,
C ENDIF

ENDDO
DO I=1, NB_PAGE
DO I=1, NB_PAGE_LOOP
IF(ALL_OUT(I).GT.0D0)THEN
C Update summed weight and number of events
SUMWGT(IMIRROR,IPROC,ICONF)=SUMWGT(IMIRROR,IPROC,ICONF)
Expand Down Expand Up @@ -429,7 +428,8 @@ DOUBLE PRECISION FUNCTION DSIG(PP,WGT,IMODE)
DATA NB_SPIN_STATE /2,2/
COMMON /NB_HEL_STATE/ NB_SPIN_STATE

INCLUDE 'coupl.inc'
include 'vector.inc'
include 'coupl.inc'
INCLUDE 'run.inc'
C ICONFIG has this config number
INTEGER MAPCONFIG(0:LMAXCONFIGS), ICONFIG
Expand Down Expand Up @@ -772,9 +772,9 @@ FUNCTION DSIGPROC(PP,ICONF,IPROC,IMIRROR,SYMCONF,CONFSUB,WGT
INCLUDE 'maxconfigs.inc'
INCLUDE 'nexternal.inc'
INCLUDE 'maxamps.inc'
INCLUDE 'coupl.inc'
include 'vector.inc'
include 'coupl.inc'
INCLUDE 'run.inc'
INCLUDE 'vector.inc'
C
C ARGUMENTS
C
Expand Down Expand Up @@ -862,7 +862,7 @@ FUNCTION DSIGPROC(PP,ICONF,IPROC,IMIRROR,SYMCONF,CONFSUB,WGT
ENDIF
C set the running scale
C and update the couplings accordingly
IF (NB_PAGE.LE.1) THEN
IF (NB_PAGE_LOOP.LE.1) THEN
CALL UPDATE_SCALE_COUPLING(PP, WGT)
ENDIF

Expand Down Expand Up @@ -910,18 +910,18 @@ SUBROUTINE DSIGPROC_VEC(ALL_P, ALL_XBK, ALL_Q2FACT, ALL_CM_RAP,
INCLUDE 'maxconfigs.inc'
INCLUDE 'nexternal.inc'
INCLUDE 'maxamps.inc'
INCLUDE 'coupl.inc'
include 'vector.inc'
include 'coupl.inc'
INCLUDE 'run.inc'
INCLUDE '../../Source/vector.inc'
C
C ARGUMENTS
C
DOUBLE PRECISION ALL_P(4*MAXDIM/3+14,NB_PAGE)
DOUBLE PRECISION ALL_XBK(2, NB_PAGE)
DOUBLE PRECISION ALL_Q2FACT(2, NB_PAGE)
DOUBLE PRECISION ALL_CM_RAP(NB_PAGE)
DOUBLE PRECISION ALL_WGT(NB_PAGE)
DOUBLE PRECISION ALL_OUT(NB_PAGE)
DOUBLE PRECISION ALL_P(4*MAXDIM/3+14,NB_PAGE_MAX)
DOUBLE PRECISION ALL_XBK(2, NB_PAGE_MAX)
DOUBLE PRECISION ALL_Q2FACT(2, NB_PAGE_MAX)
DOUBLE PRECISION ALL_CM_RAP(NB_PAGE_MAX)
DOUBLE PRECISION ALL_WGT(NB_PAGE_MAX)
DOUBLE PRECISION ALL_OUT(NB_PAGE_MAX)
DOUBLE PRECISION DSIGPROC
INTEGER ICONF,IPROC,IMIRROR,IMODE
INTEGER SYMCONF(0:LMAXCONFIGS)
Expand Down Expand Up @@ -956,7 +956,7 @@ SUBROUTINE DSIGPROC_VEC(ALL_P, ALL_XBK, ALL_Q2FACT, ALL_CM_RAP,
C
C LOCAL VARIABLES
C
DOUBLE PRECISION ALL_P1(0:3,NEXTERNAL,NB_PAGE),XDUM
DOUBLE PRECISION ALL_P1(0:3,NEXTERNAL,NB_PAGE_MAX),XDUM
INTEGER I,J,K,JC(NEXTERNAL)
INTEGER PERMS(NEXTERNAL,LMAXCONFIGS)
INCLUDE 'symperms.inc'
Expand All @@ -969,7 +969,7 @@ SUBROUTINE DSIGPROC_VEC(ALL_P, ALL_XBK, ALL_Q2FACT, ALL_CM_RAP,
ENDDO

C Set momenta according to this permutation
DO IVEC=1, NB_PAGE
DO IVEC=1, NB_PAGE_LOOP
CALL SWITCHMOM(ALL_P(1,IVEC),ALL_P1(0,1,IVEC),PERMS(1
$ ,MAPCONFIG(ICONFIG)),JC,NEXTERNAL)

Expand All @@ -985,7 +985,7 @@ SUBROUTINE DSIGPROC_VEC(ALL_P, ALL_XBK, ALL_Q2FACT, ALL_CM_RAP,


IF(IMIRROR.EQ.2)THEN
DO IVEC=1,NB_PAGE
DO IVEC=1,NB_PAGE_LOOP
C Flip momenta (rotate around x axis)
DO I=1,NEXTERNAL
ALL_P1(2,I, IVEC)=-ALL_P1(2,I,IVEC)
Expand All @@ -1004,7 +1004,7 @@ SUBROUTINE DSIGPROC_VEC(ALL_P, ALL_XBK, ALL_Q2FACT, ALL_CM_RAP,
ALL_OUT(:)=0D0

C IF (PASSCUTS(P1)) THEN
DO IVEC=1,NB_PAGE
DO IVEC=1,NB_PAGE_LOOP
IF (IMODE.EQ.0D0.AND.NB_PASS_CUTS.LT.2**12.AND.ALL_WGT(IVEC)
$ .NE.0D0)THEN
NB_PASS_CUTS = NB_PASS_CUTS + 1
Expand All @@ -1017,7 +1017,7 @@ SUBROUTINE DSIGPROC_VEC(ALL_P, ALL_XBK, ALL_Q2FACT, ALL_CM_RAP,

IF (LAST_ICONF.NE.-1.AND.IMIRROR.EQ.2) THEN
C Flip back local momenta P1 if cached
DO IVEC=1,NB_PAGE
DO IVEC=1,NB_PAGE_LOOP
DO I=1,NEXTERNAL
ALL_P1(2,I,IVEC)=-ALL_P1(2,I,IVEC)
ALL_P1(3,I,IVEC)=-ALL_P1(3,I,IVEC)
Expand Down
137 changes: 120 additions & 17 deletions epochX/cudacpp/gg_tt.mad/SubProcesses/P1_gg_ttx/auto_dsig1.f
Original file line number Diff line number Diff line change
Expand Up @@ -76,13 +76,13 @@ DOUBLE PRECISION FUNCTION DSIG1(PP,WGT,IMODE)

INTEGER SUBDIAG(MAXSPROC),IB(2)
COMMON/TO_SUB_DIAG/SUBDIAG,IB
INCLUDE 'vector.inc'
INCLUDE 'coupl.inc'
INCLUDE 'run.inc'
C Common blocks
CHARACTER*7 PDLABEL,EPA_LABEL
INTEGER LHAID
COMMON/TO_PDF/LHAID,PDLABEL,EPA_LABEL
INCLUDE 'vector.inc'
DOUBLE PRECISION RHEL, RCOL
INTEGER SELECTED_HEL(NB_PAGE_MAX)
INTEGER SELECTED_COL(NB_PAGE_MAX)
Expand Down Expand Up @@ -222,7 +222,8 @@ DOUBLE PRECISION FUNCTION DSIG1_VEC(ALL_PP, ALL_XBK, ALL_Q2FACT,
C
C CONSTANTS
C
INCLUDE '../../Source/vector.inc'
INCLUDE 'vector.inc'
INCLUDE 'coupl.inc'
INCLUDE 'genps.inc'
INCLUDE 'nexternal.inc'
INCLUDE 'maxconfigs.inc'
Expand Down Expand Up @@ -288,7 +289,6 @@ DOUBLE PRECISION FUNCTION DSIG1_VEC(ALL_PP, ALL_XBK, ALL_Q2FACT,

INTEGER SUBDIAG(MAXSPROC),IB(2)
COMMON/TO_SUB_DIAG/SUBDIAG,IB
INCLUDE 'coupl.inc'
INCLUDE 'run.inc'

DOUBLE PRECISION P_MULTI(0:3, NEXTERNAL, NB_PAGE_MAX)
Expand Down Expand Up @@ -450,7 +450,7 @@ SUBROUTINE SMATRIX1_MULTI(P_MULTI, HEL_RAND, COL_RAND, CHANNEL,
IMPLICIT NONE

INCLUDE 'nexternal.inc'
INCLUDE '../../Source/vector.inc'
INCLUDE 'vector.inc'
INCLUDE 'maxamps.inc'
DOUBLE PRECISION P_MULTI(0:3, NEXTERNAL, NB_PAGE_MAX)
DOUBLE PRECISION HEL_RAND(NB_PAGE_MAX)
Expand All @@ -461,23 +461,126 @@ SUBROUTINE SMATRIX1_MULTI(P_MULTI, HEL_RAND, COL_RAND, CHANNEL,
INTEGER SELECTED_COL(NB_PAGE_MAX)

INTEGER IVEC


INTEGER IEXT

INTEGER ISUM_HEL
LOGICAL MULTI_CHANNEL
COMMON/TO_MATRIX/ISUM_HEL, MULTI_CHANNEL

LOGICAL FIRST_CHID
SAVE FIRST_CHID
DATA FIRST_CHID/.TRUE./

#ifdef MG5AMC_MEEXPORTER_CUDACPP
INCLUDE 'fbridge.inc'
INCLUDE 'fbridge_common.inc'
INCLUDE 'genps.inc'
INCLUDE 'run.inc'
DOUBLE PRECISION OUT2(NB_PAGE_MAX)
DOUBLE PRECISION CBYF1

INTEGER*4 NWARNINGS
SAVE NWARNINGS
DATA NWARNINGS/0/

LOGICAL FIRST
SAVE FIRST
DATA FIRST/.TRUE./

IF( FBRIDGE_MODE .LE. 0 ) THEN ! (FortranOnly=0 or BothQuiet=-1 or BothDebug=-2)
#endif
call counters_smatrix1multi_start( -1, nb_page_loop ) ! fortran=-1
!$OMP PARALLEL
!$OMP DO
DO IVEC=1, NB_PAGE_LOOP
CALL SMATRIX1(P_MULTI(0,1,IVEC),
& hel_rand(IVEC),
& col_rand(IVEC),
& channel,
& IVEC,
& out(IVEC),
& selected_hel(IVEC),
& selected_col(IVEC)
& )
ENDDO
DO IVEC=1, NB_PAGE_LOOP
CALL SMATRIX1(P_MULTI(0,1,IVEC),
& hel_rand(IVEC),
& col_rand(IVEC),
& channel,
& IVEC,
& out(IVEC),
& selected_hel(IVEC),
& selected_col(IVEC)
& )
ENDDO
!$OMP END DO
!$OMP END PARALLEL
call counters_smatrix1multi_stop( -1 ) ! fortran=-1
#ifdef MG5AMC_MEEXPORTER_CUDACPP
ENDIF

IF( FBRIDGE_MODE .EQ. 1 .OR. FBRIDGE_MODE .LT. 0 ) THEN ! (CppOnly=1 or BothQuiet=-1 or BothDebug=-2)
IF( LIMHEL.NE.0 ) THEN
WRITE(6,*) 'ERROR! The cudacpp bridge only supports LIMHEL=0'
STOP
ENDIF
IF ( FIRST ) THEN ! exclude first pass (helicity filtering) from timers (#461)
CALL FBRIDGESEQUENCE(FBRIDGE_PBRIDGE, P_MULTI, ALL_G, OUT2, 0) ! 0: multi channel disabled for helicity filtering
FIRST = .FALSE.
c ! This is a workaround for https://github.com/oliviermattelaer/mg5amc_test/issues/22 (see PR #486)
IF( FBRIDGE_MODE .EQ. 1 ) THEN ! (CppOnly=1 : SMATRIX1 is not called at all)
CALL RESET_CUMULATIVE_VARIABLE() ! mimic 'avoid bias of the initialization' within SMATRIX1
ENDIF
ENDIF
call counters_smatrix1multi_start( 0, nb_page_loop ) ! cudacpp=0
IF ( .NOT. MULTI_CHANNEL ) THEN
CALL FBRIDGESEQUENCE(FBRIDGE_PBRIDGE,
& P_MULTI, ALL_G, OUT2, 0) ! 0: multi channel disabled
ELSE
IF( SDE_STRAT.NE.1 ) THEN
WRITE(6,*) 'ERROR! The cudacpp bridge requires SDE=1' ! multi channel single-diagram enhancement strategy
STOP
ENDIF
CALL FBRIDGESEQUENCE(FBRIDGE_PBRIDGE,
& P_MULTI, ALL_G, OUT2, CHANNEL) ! 1-N: multi channel enabled
ENDIF
call counters_smatrix1multi_stop( 0 ) ! cudacpp=0
ENDIF

IF( FBRIDGE_MODE .LT. 0 ) THEN ! (BothQuiet=-1 or BothDebug=-2)
DO IVEC=1, NB_PAGE_LOOP
CBYF1 = OUT2(IVEC)/OUT(IVEC) - 1
FBRIDGE_NCBYF1 = FBRIDGE_NCBYF1 + 1
FBRIDGE_CBYF1SUM = FBRIDGE_CBYF1SUM + CBYF1
FBRIDGE_CBYF1SUM2 = FBRIDGE_CBYF1SUM2 + CBYF1 * CBYF1
IF( CBYF1 .GT. FBRIDGE_CBYF1MAX ) FBRIDGE_CBYF1MAX = CBYF1
IF( CBYF1 .LT. FBRIDGE_CBYF1MIN ) FBRIDGE_CBYF1MIN = CBYF1
IF( FBRIDGE_MODE .EQ. -2 ) THEN ! (BothDebug=-2)
WRITE (*,'(I2,2E16.8,F23.11)')
& IVEC, OUT(IVEC), OUT2(IVEC), 1+CBYF1
ENDIF
IF( ABS(CBYF1).GT.5E-5 .AND. NWARNINGS.LT.20 ) THEN
NWARNINGS = NWARNINGS + 1
WRITE (*,'(A,I2,A,I4,2E16.8,F23.11)')
& 'WARNING! (', NWARNINGS, '/20) Deviation more than 5E-5',
& IVEC, OUT(IVEC), OUT2(IVEC), 1+CBYF1
ENDIF
END DO
ENDIF

IF( FBRIDGE_MODE .EQ. 1 .OR. FBRIDGE_MODE .LT. 0 ) THEN ! (CppOnly=1 or BothQuiet=-1 or BothDebug=-2)
DO IVEC=1, NB_PAGE_LOOP
OUT(IVEC) = OUT2(IVEC) ! use the cudacpp ME instead of the fortran ME!
END DO
ENDIF

IF( FBRIDGE_MODE .EQ. 1 ) THEN ! (CppOnly=1 : SMATRIX1 is not called at all, JAMP2_MULTI is not filled)
DO IVEC=1, NB_PAGE_LOOP
JAMP2_MULTI(0,IVEC) = 2 ! workaround for https://github.com/oliviermattelaer/mg5amc_test/issues/14
END DO
ENDIF
#endif

IF ( FIRST_CHID ) THEN
IF ( MULTI_CHANNEL ) THEN
WRITE (*,*) 'MULTI_CHANNEL = TRUE'
ELSE
WRITE (*,*) 'MULTI_CHANNEL = FALSE'
ENDIF
WRITE (*,*) 'CHANNEL_ID =', CHANNEL
FIRST_CHID = .FALSE.
ENDIF

RETURN
END

Expand Down
Loading

0 comments on commit 3ad6a11

Please sign in to comment.