SUBROUTINE FSTACK C----------------------------------------------------------------------- C F(ROM) STACK C C GETS PARTICLE FROM STACK AND READS FROM DISK IF NECESSARY C THIS SUBROUTINE IS CALLED FORM MAIN C----------------------------------------------------------------------- IMPLICIT NONE *KEEP,BUFFS. COMMON /BUFFS/ RUNH,RUNE,EVTH,EVTE,DATAB,LH INTEGER MAXBUF,MAXLEN PARAMETER (MAXBUF=39*7) PARAMETER (MAXLEN=12) REAL RUNH(MAXBUF),EVTH(MAXBUF),EVTE(MAXBUF), * RUNE(MAXBUF),DATAB(MAXBUF) INTEGER LH CHARACTER*4 CRUNH,CRUNE,CEVTH,CEVTE EQUIVALENCE (RUNH(1),CRUNH), (RUNE(1),CRUNE) EQUIVALENCE (EVTH(1),CEVTH), (EVTE(1),CEVTE) *KEEP,ETHMAP. COMMON /ETHMAP/ ECTMAP,ELEFT DOUBLE PRECISION ECTMAP,ELEFT *KEEP,GENER. COMMON /GENER/ GEN,ALEVEL DOUBLE PRECISION GEN,ALEVEL *KEEP,IRET. COMMON /IRET/ IRET1,IRET2 INTEGER IRET1,IRET2 *KEEP,PAM. COMMON /PAM/ PAMA,SIGNUM DOUBLE PRECISION PAMA(6000),SIGNUM(6000) *KEEP,PARPAR. COMMON /PARPAR/ CURPAR,SECPAR,PRMPAR,OUTPAR,C, * E00,E00PN,PTOT0,PTOT0N,THICKH,ITYPE,LEVL DOUBLE PRECISION CURPAR(14),SECPAR(14),PRMPAR(14),OUTPAR(14), * C(50),E00,E00PN,PTOT0,PTOT0N,THICKH INTEGER ITYPE,LEVL *KEEP,PARPAE. DOUBLE PRECISION GAMMA,COSTHE,PHI,H,T,X,Y,CHI,BETA,GCM,ECM EQUIVALENCE (CURPAR(2),GAMMA), (CURPAR(3),COSTHE), * (CURPAR(4), PHI ), (CURPAR(5), H ), * (CURPAR(6), T ), (CURPAR(7), X ), * (CURPAR(8), Y ), (CURPAR(9), CHI ), * (CURPAR(10),BETA), (CURPAR(11),GCM ), * (CURPAR(12),ECM ) *KEEP,POLAR. COMMON /POLAR/ POLART,POLARF DOUBLE PRECISION POLART,POLARF *KEEP,RUNPAR. COMMON /RUNPAR/ FIXHEI,THICK0,HILOECM,HILOELB, * STEPFC,NRRUN,NSHOW,PATAPE,MONIIN, * MONIOU,MDEBUG,NUCNUC, * CETAPE, * SHOWNO,ISHW,NOPART,NRECS,NBLKS,MAXPRT,NDEBDL, * N1STTR,MDBASE, * DEBDEL,DEBUG,FDECAY,FEGS,FIRSTI,FIXINC,FIXTAR, * FIX1I,FMUADD,FNKG,FPRINT,FDBASE * ,GHEISH,GHESIG COMMON /RUNPAC/ DSN,HOST,USER DOUBLE PRECISION FIXHEI,THICK0,HILOECM,HILOELB REAL STEPFC INTEGER NRRUN,NSHOW,PATAPE,MONIIN,MONIOU,MDEBUG,NUCNUC, * SHOWNO,ISHW,NOPART,NRECS,NBLKS,MAXPRT,NDEBDL, * N1STTR,MDBASE INTEGER CETAPE CHARACTER*79 DSN CHARACTER*20 HOST,USER LOGICAL DEBDEL,DEBUG,FDECAY,FEGS,FIRSTI,FIXINC,FIXTAR, * FIX1I,FMUADD,FNKG,FPRINT,FDBASE * ,GHEISH,GHESIG *KEEP,STACKF. COMMON /STACKF/ STACK,STACKP,EXST,NSHIFT,NOUREC,ICOUNT,NTO,NFROM INTEGER MAXSTK PARAMETER (MAXSTK = 12*340*2) DOUBLE PRECISION STACK(MAXSTK) INTEGER STACKP,EXST,NSHIFT,NOUREC,ICOUNT,NTO,NFROM *KEND. INTEGER I,ISTK,J DATA ISTK / MAXSTK / C----------------------------------------------------------------------- IF ( DEBUG ) WRITE(MDEBUG,*) 'FSTACK:' C STACK EMPTY, SOMETHING TO BE READ FROM DISK ? IF ( STACKP .EQ. 0 ) THEN IF ( NOUREC .EQ. 0 ) THEN IF ( FPRINT .OR. DEBUG ) WRITE(MONIOU,224) NTO,NFROM 224 FORMAT(/' NO MORE SECONDARIES FOUND ON STACK'/ * ' ',I10,' PARTICLES WRITTEN TO STACK'/ * ' ',I10,' PARTICLES READ FROM STACK' ) CURPAR(1) = 0.D0 IRET1 = 1 RETURN ENDIF C READ LAST BLOCK OF 340 PARTICLES FROM DISK READ(EXST,REC=NOUREC) (STACK(I),I=1,ISTK/2) NOUREC = NOUREC - 1 STACKP = ISTK/2 ENDIF NFROM = NFROM + 1 ICOUNT = ICOUNT - 1 C PUT PARTICLE FROM STACK INTO CURPAR STACKP = STACKP - MAXLEN DO 5 J = 1,8 CURPAR(J) = STACK(STACKP+J) 5 CONTINUE GEN = STACK(STACKP+ 9) ALEVEL = STACK(STACKP+10) POLART = STACK(STACKP+11) POLARF = STACK(STACKP+12) IF ( PAMA(NINT(CURPAR(1))) .NE. 0.D0 ) THEN ELEFT = ELEFT - CURPAR(2)*PAMA(NINT(CURPAR(1))) ELSE ELEFT = ELEFT - CURPAR(2) ENDIF IF ( DEBUG ) WRITE(MDEBUG,667) ICOUNT,(CURPAR(J),J=1,8) 667 FORMAT('+ ',I7,1X,1P,9E10.3) RETURN END