C SUBROUTINE GASP C C SUBROUTINE GASP(NSET) DIMENSION NSET(6,1) COMMON ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST, 1NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,TNOW, 2TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4) COMMON ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),MFE(4) 1,MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),QTIME(4),SSUMA(10,5), 2SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,JCLR NOT = 0 1 CALL DATIN(NSET) C*****PRINT OUT FILING ARRAY JEVNT = 101 CALL MONTR (NSET) WRITE (NPRNT,403) 403 FORMAT(1H1, 24H**INTERMEDIATE RESULTS**//) C*****OBTAIN NEXT EVENT WHICH IS FIRST ENTRY IN FILE 1. ATRIB(1) IS EVE C*****TIME, ATRIB(2) IS EVENT CODE 10 CALL RMOVE(MFE(1),1,NSET) TNOW = ATRIB(1) JEVNT = ATRIB(2) C*****TEST TO SEE IF THIS EVENT IS A MONITOR EVENT IF(JEVNT - 100)13,12,6 13 I = JEVNT C*****CALL PROGRAMMERS EVENT ROUTINES CALL EVNTS (I,NSET) C*****TEST METHOD FOR STOPPING IF (MSTOP) 40,8,20 40 MSTOP = 0 C*****TEST FOR NO SUMMARY REPORT IF (NORPT) 14,22,42 20 IF(TNOW-TFIN)8,22,22 22 CALL SUMRY(NSET) CALL OTPUT(NPRNT,NSET) C*****TEST NUMBER OF RUNS REMAINING 42 IF(NRUNS-1)14,9,23 23 NRUNS = NRUNS - 1 NRUN = NRUN + 1 GO TO 1 14 CALL ERROR(93,NSET) 6 CALL MONTR(NSET) GO TO 10 C*****RESET JMNIT 12 IF(JMNIT)14,30,31 30 JMNIT = 1 GO TO 10 31 JMNIT = 0 GO TO 10 C*****TEST TO SEE IF EVENT INFORMATION IS TO BE PRINTED 8 IF(JMNIT)14,10,32 32 ATRIB(2) = JEVNT JEVNT = 100 CALL MONTR(NSET) GO TO 10 C*****IF ALL RUNS ARE COMPLETED RETURN TO MAIN PROGRAM FOR INSTRUCTIONS 9 RETURN END C SUBROUTINE DATIN C C SUBROUTINE DATIN(NSET) DIMENSION NSET(6,1) COMMON ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST, 1NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,TNOW, 2TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4) COMMON ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),MFE(4) 1,MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),QTIME(4),SSUMA(10,5), 2SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,JCLR IF (NOT)23,1,2 C C*****NEP IS A CONTROL VARIABLE FOR DETERMINING THE STARTING CARD C*****TYPE FOR MULTIPLE RUN PROBLEMS. THE VALUE OF NEP SPECIFIES THE C*****STARTING CARD TYPE. C 2 NT=NEP GO TO (1,5,6,41,42,8,43,299,15,20),NT 23 CALL ERROR(95,NSET) 1 NOT = 1 NRUN = 1 C C*****DATA CARD TYPE ONE C READ (NCRDR,101) NAME,NPROJ,MON,NDAY,NYR,NRUNS 101 FORMAT (6A2,I4,I2,I2,I4,I4) IF(NRUNS) 30,30,5 30 CALL EXIT C C*****DATA CARD TYPE TWO C 5 READ (NCRDR,803) NPRMS,NHIST,NCLCT,NSTAT,ID,IM,NOQ,MXC,SCALE 803 FORMAT (8I5,F10.2) IF (NHIST) 41,41,6 C C*****DATA CARD TYPE THREE IS USED ONLY IF NHIST IS GREATER THAN ZERO C*****SPECIFY NUMBER OF CELLS IN HISTOGRAMS NOT INCLUDING END CELLS C 6 READ (NCRDR,103) (NCELS(I),I=1,NHIST) 103 FORMAT (10I5) C C*****DATA CARD TYPE FOUR C*****SPECIFY KRANK=RANKING ROW C 41 READ (NCRDR,103) (KRANK(I),I=1,NOQ) C C*****DATA CARD TYPE FIVE C*****SPECIFY INN=1 FOR LVF, INN=2 FOR HVF C 42 READ (NCRDR,103) (INN(I),I=1,NOQ) IF (NPRMS) 23,43,8 8 DO 9 I = 1,NPRMS C C*****DATA CARD TYPE SIX IS USED ONLY IF NPRMS IS GREATER THAN ZERO C READ (NCRDR,106) (PARAM(I,J),J=1,4) 106 FORMAT(4F10.4) 9 CONTINUE C C*****DATA CARD TYPE SEVEN. THE NEP VALUE IS FOR THE NEXT RUN. SET C*****JSEED GREATER THAN ZERO TO SET TNOW EQUAL TO TBEG. C 43 READ (NCRDR, 104) MSTOP,JCLR,NORPT,NEP,TBEG,TFIN,JSEED 104 FORMAT (4I5,2F10.3,I4) IF (JSEED) 27,26,27 27 ISEED=JSEED CALL DRAND(ISEED,RNUM) TNOW = TBEG DO 142 J=1,NOQ 142 QTIME(J)=TNOW 26 JMNIT = 0 C C*****INITIALIZE NSET C*****SPECIFY INPUTS FOR NEXT RUN C*****READ IN INITIAL EVENTS C 299 DO 300 JS = 1,ID C C*****DATA CARD TYPE 8 C*****INITIALIZE NSET BY JQ EQUAL TO A NEGATIVE VALUE ON FIRST EVENT C*****CARD C*****READ IN INITIAL EVENTS. END INITIAL EVENTS AND ENTITIES WITH JQ C*****EQUAL TO ZERO C READ (NCRDR,1110)JQ,(ATRIB(JK),JK=1,IM) 1110 FORMAT(I10,(7F10.4)) IF(JQ) 44,15,320 44 INIT=1 CALL SET(1,NSET) GO TO 300 320 CALL FILEM(JQ,NSET) 300 CONTINUE C C*****JCLR BE POSITIVE FOR INITIALIZATION OF STORAGE ARRAYS. C 15 IF( JCLR )20,20,10 10 IF(NCLCT)23,110,116 116 DO 18 I = 1,NCLCT DO 17 J =1,3 17 SUMA(I,J) = 0. SUMA(I,4) = 1.0E20 18 SUMA(I,5)= -1.0E20 110 IF (NSTAT)23,111,117 117 DO 360 I = 1,NSTAT SSUMA(I,1) = TNOW DO 370 J = 2,3 370 SSUMA(I,J) = 0. SSUMA(I,4) = 1.0E20 360 SSUMA(I,5) = -1.0E20 111 IF(NHIST)23,20,118 118 DO 380 K = 1,NHIST DO 380 L = 1,MXC 380 JCELS(K,L) = 0 C C C C C*****PRINT OUT PROGRAM IDENTIFICATION INFORMATION 20 WRITE (NPRNT,102) NPROJ,NAME,MON,NDAY,NYR,NRUN 102 FORMAT (1H1,1X,22HSIMULATION PROJECT NO.,I4,2X,2HBY,2X, 1 6A2//,1X,4HDATE,I3,1H/,I3,1H/,I5,12X,10HRUN NUMBER,I5//) C*****PRINT PARAMETER VALUES AND SCALE IF(NPRMS ) 60,60,62 62 DO 64 I=1,NPRMS 64 WRITE (NPRNT,107) I,(PARAM(I,J),J=1,4) 107 FORMAT(1X,14H PARAMETER NO.,I5,4F12.4) 60 WRITE (NPRNT,1107) SCALE 1107 FORMAT (//1X,8H SCALE =F10.4) RETURN END C SUBROUTINE FILEM C C SUBROUTINE FILEM (JQ,NSET) DIMENSION NSET(6,1) COMMON ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST, 1NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,TNOW, 2TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4) COMMON ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),MFE(4) 1,MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),QTIME(4),SSUMA(10,5), 2SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,JCLR C C*****TEST TO SEE IF THERE IS AN AVAILABLE COLUMN FOR STORAGE C IF (MFA - ID ) 2,2,3 3 WRITE (NPRNT,4) 4 FORMAT (//24H OVERLAP SET GIVEN BELOW/) CALL ERROR (87,NSET) C C*****PUT ATTRIBUTE VALUES IN FILE C 2 DO 1 I = 1,IM DEL =.000001 IF (ATRIB(I)) 5,1,1 5 DEL = -.000001 1 NSET(I,MFA)=SCALE*(ATRIB(I)+DEL) C C*****CALL SET TO PUT NEW ENTRY IN PROPER PLACE IN NSET C CALL SET (JQ,NSET) RETURN END C SUBROUTINE RMOVE C C SUBROUTINE RMOVE (KCOLL,JQ,NSET) DIMENSION NSET(6,1),KCOLL(1) COMMON ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST, 1NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,TNOW, 2TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4) COMMON ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),MFE(4) 1,MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),QTIME(4),SSUMA(10,5), 2SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,JCLR KCOL=KCOLL(1) IF (KCOL) 16,16,2 16 CALL ERROR(97,NSET) 2 MLC(JQ) = KCOL C C*****PUT VALUES OF KCOL IN ATTRIB C DO 3 I = 1,IM ATRIB (I) = NSET(I,KCOL) 3 ATRIB (I) = ATRIB(I)/SCALE C C*****SET OUT=1 AND CALL SET TO REMOVE ENTRY FROM NSET C OUT = 1. CALL SET (JQ,NSET) RETURN END C SUBROUTINE SET C C SUBROUTINE SET(JQ,NSET) DIMENSION NSET(6,1) COMMON ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST, 1NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,TNOW, 2TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4) COMMON ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),MFE(4) 1,MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),QTIME(4),SSUMA(10,5), 2SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,JCLR C C*****INIT SHOULD BE ONE FOR INITIALIZATION OF FILE C IF (INIT-1) 27,28,27 C C*****INITIALIZE FILE TO ZERO. SET UP POINTERS C*****MUST INITIALIZE KRANK(JQ) C*****MUST INITIALIZE INN(JQ)****INN(JQ)=1 IS FIFO**INN(JQ)=2 IS LIFO C 28 KOL = 7777 KOF = 8888 KLE = 9999 MX = IM+1 MXX = IM+2 C C*****INITIALIZE POINTING CELLS OF NSET AND ZERO OTHER CELLS OF NSET C DO 1 I = 1,ID DO 2 J = 1,IM 2 NSET(J,I) = 0 NSET(MXX,I) = I-1 1 NSET(MX,I) = I + 1 NSET(MX,ID) = KOF DO 3 K = 1,NOQ NQ(K)=0 MLC(K)=0 MFE(K)=0 MAXNQ(K) = 0 MLE(K)=0 ENQ(K)=0.0 VNQ(K)=0. 3 QTIME(K)=TNOW C C*****FIRST AVAILABLE COLUMN = 1 C MFA = 1 INIT = 0 OUT = 0.0 RETURN C C*****MFEX IS FIRST ENTRY IN FILE WHICH HAS NOT BEEN COMPARED WITH ITEM C*****TO BE INSERTED C 27 MFEX = MFE(JQ) C C*****KNT IS A CHECK CODE TO INDICATE THAT NO COMPARISONS HAVE BEEN MADE C KNT = 2 C C*****KS IS THE ROW ON WHICH ITEMS OF FILE JQ ARE RANKED KS = KRANK(JQ) C*****TEST FOR PUTTING VALUE IN OR OUT C*****IF OUT EQUALS ONE AN ITEM IS TO BE REMOVED FROM FILE JQ. IF OUT C*****IS LESS THAN ONE AN ITEM IS TO BE INSERTED IN FILE JQ C IF (OUT-1.0) 8,5,100 C C*****PUTTING AN ENTRY IN FILE JQ C*****NXFA IS THE SUCCESSOR COLUMN OF THE FIRST AVAILABLE COLUMN FOR C*****STORING INFORMATION C*****THE ITEM TO BE INSERTED WILL BE PUT IN COLUMN MFA C 8 NXFA = NSET(MX,MFA) C C*****IF INN(JQ) EQUALS TWO THE FILE IS A HVF FILE. IF INN(JQ) IS C*****ONE THE FILE IS A LVF FILE. FOR LVF FILES TRY TO INSERT C*****STARTING AT END OF FILE. MLEX IS LAST ENTRY IN FILE WHICH HAS C*****NOT BEEN COMPARED WITH ITEMS TO BE INSERTED. C IF (INN(JQ)-1) 100,7,6 7 MLEX=MLE(JQ) C C*****IF MLEX IS ZERO FILE IS EMPTY. ITEM TO BE INSERTED WILL BE ONLY C*****ITEM IN FILE. C IF (MLEX) 100,10,11 10 NSET(MXX,MFA)=KLE MFE(JQ) = MFA C C*****THERE IS NO SUCCESSOR OF ITEM INSERTED. SINCE ITEM WAS INSERTED C*****IN COLUMN MFA THE LAST ENTRY OF FILE JQ IS IN COLUMN MFA. C 17 NSET(MX,MFA) = KOL MLE(JQ) = MFA C C*****SET NEW MFA EQUAL TO SUCCESSOR OF OLD MFA. THAT IS NXFA. THE C*****NEW MFA HAS NO PREDECESSOR SINCE IT IS THE FIRST AVAILABLE COLUMN C*****FOR STORAGE. C 14 MFA = NXFA IF (MFA-KOF) 237,238,238 237 NSET(MXX,MFA) = KLE C C*****UPDATE STATISTICS OF FILE JQ C 238 XNQ = NQ(JQ) ENQ(JQ) = ENQ(JQ)+XNQ*(TNOW-QTIME(JQ)) VNQ(JQ) = VNQ(JQ) + XNQ*XNQ*( TNOW-QTIME(JQ)) QTIME(JQ) = TNOW NQ(JQ) = NQ(JQ) + 1 MAXNQ(JQ) = MAX0 (MAXNQ(JQ),NQ(JQ)) MLC(JQ) = MFE(JQ) RETURN C C*****TEST RANKING VALUE OF NEW ITEM AGAINST VALUE OF ITEM IN COLUMN C*****MLEX C 11 IF(NSET(KS,MFA)-NSET(KS,MLEX))12,13,13 C C*****INSERT ITEM AFTER COLUMN MLEX. LET SUCCESSOR OF MLEX BE MSU. C 13 MSU = NSET(MX,MLEX) NSET(MX,MLEX) = MFA NSET(MXX,MFA) = MLEX GO TO (18,17),KNT C C*****SINCE KNT EQUALS ONE A COMPARISON WAS MADE AND THERE IS A C*****SUCCESSOR TO MLEX, I.E., MSU IS NOT EQUAL TO KOL. POINT COLUMN C*****MFA TO MSU AND VICE VERSA. C 18 NSET(MX,MFA) = MSU NSET(MXX,MSU) = MFA GO TO 14 C C*****SET KNT TO ONE SINCE A COMPARISON WAS MADE. C 12 KNT = 1 C C*****TEST MFA AGAINST PREDECESSOR OF MLEX BY LETTING MLEX EQUAL C*****PREDECESSOR OF MLEX. C MLEX = NSET(MXX,MLEX) IF(MLEX-KLE) 11,16,11 C C*****IF MLEX HAD NO PREDECESSOR MFA IS FIRST IN FILE. C 16 NSET(MXX,MFA) = KLE MFE(JQ) = MFA C C*****SUCCESSOR OF MFA IS MFEX AND PREDECESSOR OF MFEX IS MFA. (NOTE AT C*****THIS POINT MLEX = MFEX IF LVF WAS USED). C 26 NSET(MX,MFA) = MFEX NSET(MXX,MFEX) = MFA GO TO 14 C C***** FOR HVF OPERATION TRY TO INSERT ITEM STARTING AT BEGINNING OF C*****FILE JQ. C*****IF MFEX IS 0, NO ENTRIES ARE IN FILE JQ. THIS CASE WAS CONSIDERED C*****PREVIOUSLY AT STATEMENT 10. C 6 IF (MFEX) 100,10,19 C C*****TEST RANKING VALUE OF NEW ITEM AGAINST VALUE OF ITEM IN COLUMN C*****MFEX. C 19 IF(NSET(KS,MFA)-NSET(KS,MFEX))20,21,21 C C*****IF NEW VALUE IF LOWER, MFA MUST BE COMPARED AGAINST SUCCESSOR OF C*****MFEX. C 20 KNT = 1 C C*****LET MPRE = MFEX AND LET MFEX BE THE SUCCESSOR OF MFEX. C MPRE = MFEX MFEX = NSET(MX,MFEX) IF (MFEX-KOL) 19,24,19 C C*****IF NEW VALUE IS HIGHER, IT SHOULD BE INSERTED BETWEEN MFEX AND ITS C*****PREDECESSOR. C*****IF KNT = 2, MFEX HAS NO PREDECESSOR, GO TO STATEMENT 16. IF KNT C*****= 1, A COMPARISON WAS MADE AND A VALUE OF MPRE HAS ALREADY BEEN C*****OBTAINED ON THE PREVIOUS ITERATION. SET KNT = 2 TO INDICATE THIS. C 21 GO TO (22,16),KNT 22 KNT = 2 C C*****MFA IS TO BE INSERTED AFTER MPRE. MAKE MPRE THE PREDECESSOR OF C*****MFA AND MFA THE SUCCESSOR OF MPRE. C 24 NSET(MXX,MFA) = MPRE NSET(MX,MPRE) = MFA C C*****IF KNT WAS NOT RESET TO 2, THERE IS NO SUCCESSOR OF MFA. POINTERS C*****ARE UPDATED AT STATEMENT 17. IF KNT = 2, IT WAS RESET AND THE C*****SUCCESSOR OF MFA IS MFEX. C GO TO (17,26), KNT C C*****REMOVAL OF AN ITEM FROM FILE JQ. C 5 OUT = 0.0 C C*****UPDATE POINTING SYSTEM TO ACCOUNT FOR REMOVAL OF MLC (JQ). COLUMN C*****REMOVED IS ALWAYS SET TO MLC(JQ) BY SUBROUTINE RMOVE. C MMLC = MLC(JQ) C C*****RESET OUT TO 0 AND CLEAR COLUMN REMOVED. LET JL EQUAL SUCCESSOR C*****OF COLUMN REMOVED AND JK EQUAL PREDECESSOR OF COLUMN REMOVED. C*****IF JL = KOL, MLC WAS LAST ENTRY. IF JK = KLE, MLC WAS FIRST ENTRY C*****MLC WAS NOT FIRST OR LAST ENTRY. UPDATE POINTERS SO THAT JL IS C*****SUCCESSOR OF JK AND JK IS PREDECESSOR OF JL. C DO 32 I=1,IM 32 NSET(I,MMLC) = 0 JL = NSET(MX,MMLC) JK= NSET(MXX,MMLC) IF (JL-KOL) 33,34,33 33 IF (JK-KLE) 35,36,35 35 NSET(MX,JK) = JL NSET(MXX,JL) = JK C C*****UPDATE POINTERS. C 37 NSET(MX,MMLC) =MFA NSET(MXX,MMLC) = KLE IF (MFA-KOF) 234,235,235 234 NSET(MXX,MFA) = MMLC 235 MFA= MLC(JQ) MLC(JQ) = MFE(JQ) C C*****UPDATING FILE STATISTICS C XNQ = NQ(JQ) ENQ(JQ)=ENQ(JQ)+XNQ*(TNOW-QTIME(JQ)) VNQ(JQ) = VNQ(JQ) + XNQ*XNQ*( TNOW-QTIME(JQ)) QTIME(JQ) = TNOW NQ(JQ) = NQ(JQ)-1 RETURN C C*****MLC WAS FIRST ENTRY BUT NOT LAST ENTRY. UPDATE POINTERS. C 36 NSET(MXX,JL) = KLE MFE(JQ) = JL GO TO 37 34 IF (JK-KLE) 38,39,38 C C*****MLC WAS LAST ENTRY BUT NOT FIRST ENTRY. UPDATE POINTERS. C 38 NSET(MX,JK) = KOL MLE(JQ) = JK GO TO 37 C C*****MLC WAS BOTH THE LAST AND FIRST ENTRY, THEREFORE, IT IS THE ONLY C*****ENTRY. C 39 MFE(JQ) = 0 MLE(JQ) = 0 GO TO 37 100 CALL ERROR(88,NSET) STOP END C SUBROUTINE COLCT C C SUBROUTINE COLCT (X,N,NSET) DIMENSION NSET(6,1) COMMON ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST, 1NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,TNOW, 2TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4) COMMON ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),MFE(4) 1,MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),QTIME(4),SSUMA(10,5), 2SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,JCLR IF (N) 2,2,1 2 CALL ERROR(90,NSET) 1 IF (N- NCLCT) 3,3,2 3 SUMA(N,1) = SUMA(N,1)+X SUMA(N,2) = SUMA(N,2)+X*X SUMA(N,3) = SUMA(N,3)+1.0 SUMA(N,4) = AMIN1 (SUMA(N,4),X) SUMA(N,5) = AMAX1 (SUMA(N,5),X) RETURN END C SUBROUTINE TMST C C SUBROUTINE TMST (X,T,N,NSET) DIMENSION NSET(6,1) COMMON ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST, 1NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,TNOW, 2TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4) COMMON ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),MFE(4) 1,MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),QTIME(4),SSUMA(10,5), 2SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,JCLR IF (N) 2,2,1 2 CALL ERROR(91,NSET) 1 IF(N-NSTAT)3,3,2 3 TT= T-SSUMA(N,1) SSUMA(N,1) = SSUMA(N,1) + TT SSUMA(N,2) = SSUMA(N,2)+X*TT SSUMA(N,3) = SSUMA(N,3)+X*X*TT SSUMA(N,4) = AMIN1 (SSUMA(N,4),X) SSUMA(N,5) = AMAX1 (SSUMA(N,5),X) RETURN END C SUBROUTINE FIND C C SUBROUTINE FIND (XVAL,MCODE,JQ,JATT,KCOL,NSET) DIMENSION NSET(6,1) COMMON ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST, 1NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,TNOW, 2TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4) COMMON ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),M 1FE(4),MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),QTIME(4),SSUMA 2(10,5),SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,JCLR C C*****CHANGE VALUE TO FIXED POINT WHEN SEARCHING NSET C NVAL=XVAL*SCALE C C*****THE COLUMN WHICH IS THE BEST CANDIDATE IS KBEST C KBEST=0 C C*****THE NEXT COLUMN TO BE CONSIDERED AS A CANDIDATE IS NEXTK C NEXTK=MFE(JQ) IF(NEXTK) 16,1,2 16 CALL ERROR(89,NSET) 1 KCOL=KBEST RETURN C C*****MGRNV IS +1 FOR GREATER THAN SEARCH AND -1 FOR LESS THAN SEARCH C*****NMAMN IS +1 FOR MAXIMUM AND -1 FOR MINIMUM C*****FOR SEARCH FOR EQUALITY THE SIGN OF MGRNV AND NMAMN ARE NOT USED C 2 GO TO (11,12,13,14,11),MCODE 11 MGRNV=1 NMAMN=1 GO TO 20 12 MGRNV=1 NMAMN=-1 GO TO 20 13 MGRNV=-1 NMAMN=1 GO TO 20 14 MGRNV=-1 NMAMN=-1 20 IF(MGRNV*(NSET(JATT,NEXTK)-NVAL)) 4,21,66 C C*****WHEN EQUALITY IS OBTAINED TEST FOR MCODE=5, THE SEARCH FOR A C*****SPECIFIED VALUE C 21 IF(MCODE-5) 4,15,4 66 IF (MCODE-5) 6,4,6 6 IF(KBEST) 16,8,7 7 IF(NMAMN*(NSET(JATT,NEXTK)-NSET(JATT,KBEST))) 4,4,8 8 KBEST=NEXTK 4 NEXTK=NSET(MX,NEXTK) IF(NEXTK-7777)20,1,1 15 KCOL=NEXTK RETURN END C FUNCTION SUMQ C C FUNCTION SUMQ (JATT,JQ,NSET) DIMENSION NSET(6,1) COMMON ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST, 1NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,TNOW, 2TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4) COMMON ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),MFE(4) 1,MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),QTIME(4),SSUMA(10,5), 2SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,JCLR SUMQ = 0 IF (JQ-NOQ) 17,17,18 18 CALL ERROR(85,NSET) 17 IF (NQ( JQ )) 19,19,20 19 RETURN 20 MTEM = MFE(JQ) 23 VSET = NSET(JATT,MTEM) SUMQ = SUMQ + VSET/SCALE IF (NSET(MX,MTEM)-7777) 21,22,21 21 MTEM = NSET(MX,MTEM) GO TO 23 22 RETURN END C FUNCTION PRODQ C C FUNCTION PRODQ (JATT,JQ,NSET) DIMENSION NSET(6,1) COMMON ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST, 1NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,TNOW, 2TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4) COMMON ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),MFE(4) 1,MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),QTIME(4),SSUMA(10,5), 2SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,JCLR PRODQ = 1. IF (JQ-NOQ) 17,17,18 18 CALL ERROR(84,NSET) 17 IF (NQ( JQ )) 19,19,20 19 PRODQ=0. RETURN 20 MTEM=MFE(JQ) 23 VSET=NSET(JATT,MTEM) PRODQ = PRODQ*VSET/SCALE IF (NSET(MX,MTEM) -7777) 21,22,21 21 MTEM= NSET(MX,MTEM) GO TO 23 22 RETURN END C SUBROUTINE ERROR C C SUBROUTINE ERROR(J,NSET) DIMENSION NSET(6,1) COMMON ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST, 1NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,TNOW, 2TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4) COMMON ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),MFE(4) 1,MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),QTIME(4),SSUMA(10,5), 2SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,JCLR WRITE(NPRNT,100) J JEVNT=101 C C*****PRINT FILING ARRAY NSET C CALL MONTR(NSET) WRITE(NPRNT,101) C C*****PRINT NEXT EVENT FILE C CALL PRNTQ(1,NSET) C C*****PRINT SUMMARY REPORT UP TO PRESENT C CALL SUMRY(NSET) 100 FORMAT(///1X16HERROR EXIT, TYPE,I3,7H ERROR.) 101 FORMAT(1H1,1X16HSCHEDULED EVENTS//) NFOOL=0 IF(NFOOL)3,4,3 3 RETURN 4 STOP END C SUBROUTINE SUMRY C C SUBROUTINE SUMRY (NSET) DIMENSION NSET(6,1) COMMON ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST, 1NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,TNOW, 2TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4) COMMON ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),MFE(4) 1,MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),QTIME(4),SSUMA(10,5), 2SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,JCLR WRITE (NPRNT,21) 21 FORMAT (1H1, 23H**GASP SUMMARY REPORT**/) WRITE (NPRNT,102) NPROJ,NAME,MON,NDAY,NYR,NRUN 102 FORMAT (1X,22HSIMULATION PROJECT NO.,I4,2X,2HBY,2X, 1 6A2//,1X,4HDATE,I3,1H/,I3,1H/,I5,12X,10HRUN NUMBER,I5/) IF (NPRMS) 147,147,146 146 DO 64 I=1,NPRMS 64 WRITE (NPRNT,107) I,(PARAM(I,J),J=1,4) 107 FORMAT( 14H PARAMETER NO.,I5,4F12.4) 147 IF(NCLCT)5,60,66 5 WRITE (NPRNT,199) 199 FORMAT(///1X26HERROR EXIT, TYPE 98 ERROR.) CALL EXIT 66 WRITE (NPRNT,23) 23 FORMAT (// 18H**GENERATED DATA** /1X,4HCODE,4X,4HMEAN,6X,8HSTD 1.DEV.,5X,4HMIN.,7X,4HMAX.,5X,4HOBS./) C C*****COMPUTE AND PRINT STATISTICS GATHERED BY CLCT C DO 2 I=1,NCLCT IF(SUMA(I,3))5,62,61 62 WRITE (NPRNT,63) I 63 FORMAT(1X,I3,10X18HNO VALUES RECORDED) GO TO 2 61 XS = SUMA(I,1) XSS = SUMA(I,2) XN = SUMA(I,3) AVG = XS/XN STD=(((XN*XSS)-(XS*XS))/(XN*(XN-1.0)))**.5 N = XN WRITE (NPRNT,24) I,AVG,STD,SUMA(I,4),SUMA(I,5),N 24 FORMAT (1X,I3,4F11.4,I7) 2 CONTINUE 60 IF(NSTAT)5,67,4 4 WRITE (NPRNT,29) 29 FORMAT ( /1X23H**TIME GENERATED DATA** /1X,4HCODE,4X,4HMEAN,6X, 18HSTD.DEV.,5X,4HMIN.,7X,4HMAX.,3X,10HTOTAL TIME/) C C*****COMPUTE AND PRINT STATISTICS GATHERED BY TMST C DO 6 I = 1,NSTAT IF(SSUMA(I,1))5,71,72 71 WRITE (NPRNT,63) I GO TO 6 72 XT = SSUMA(I,1) XS = SSUMA(I,2) XSS = SSUMA(I,3) AVG = XS/XT STD = (XSS/XT-AVG*AVG)**.5 WRITE (NPRNT,30) I,AVG,STD,SSUMA(I,4),SSUMA(I,5),XT 30 FORMAT (1X,I3,5F11.4) 6 CONTINUE 67 IF(NHIST)5,75,9 9 WRITE (NPRNT,25) 25 FORMAT (/ 37H**GENERATED FREQUENCY DISTRIBUTIONS** /1X,4HCOD 1E,20X,10HHISTOGRAMS) C C*****PRINT HISTOGRAMS C DO 12 I=1,NHIST NCL = NCELS (I)+2 12 WRITE (NPRNT,26) I,(JCELS(I,J),J=1,NCL) 26 FORMAT(/1X,I3,5X,11I4/(9X,11I4)) C C*****PRINT FILES AND FILE STATISTICS C 75 DO 15 I = 1,NOQ 15 CALL PRNTQ (I,NSET) RETURN END C SUBROUTINE HISTO C C SUBROUTINE HISTO (X1,A,W,N) COMMON ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST, 1NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,TNOW, 2TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4) COMMON ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),MFE(4) 1,MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),QTIME(4),SSUMA(10,5), 2SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,JCLR IF (N-NHIST) 11,11,2 2 WRITE (NPRNT,250) N 250 FORMAT(19H ERROR IN HISTOGRAM,I4//) CALL EXIT 11 IF(N)2,2,3 C C*****TRANSLATE X1 BY SUBTRACTING A IF X.LE.A THEN ADD 1 TO FIRST CELL C 3 X = X1 - A IF (X)6,7,7 6 IC = 1 GO TO 8 C C*****DETERMINE CELL NUMBER IC. ADD 1 FOR LOWER LIMIT CELL AND 1 FOR C*****TRUNCATION C 7 IC = X/W + 2. IF (IC - NCELS(N) - 1) 8,8,9 9 IC = NCELS(N)+2 8 JCELS(N,IC) = JCELS(N,IC) + 1 RETURN END C SUBROUTINE MONTR C C SUBROUTINE MONTR(NSET) DIMENSION NSET(6,1) COMMON ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST, 1NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,TNOW, 2TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4) COMMON ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),MFE(4) 1,MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),QTIME(4),SSUMA(10,5), 2SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,JCLR C C*****IF JEVNT .GE. 101, PRINT NSET C IF (JEVNT - 101) 9,7,9 7 WRITE (NPRNT,100) TNOW DO 1000 I=1,ID 100 FORMAT(1H1,10X31H**GASP JOB STORAGE AREA DUMP AT,F10.4, 1 2X,12HTIME UNITS**//) 1000 WRITE (NPRNT,101) I,(NSET(J,I),J=1,MXX) 101 FORMAT(I5,12I9) RETURN 9 IF(MFE(1))3,6,1 C C*****IF JMNIT = 1,PRINT TNOQ,CURRENT EVENT CODE, AND ALL ATTRIBUTES OF C*****THE NEXT EVENT C 1 IF (JMNIT - 1) 5,4,3 3 WRITE (NPRNT,199) 199 FORMAT(/// 26H ERROR EXIT,TYPE 99 ERROR.) CALL EXIT 4 MMFE =MFE(1) WRITE (NPRNT,103) TNOW,ATRIB(2),(NSET(I,MMFE),I=1,MXX) 103 FORMAT (/10X23HCURRENT EVENT....TIME =,F8.2,5X7HEVENT =,F7.2, 1/10X,17HNEXT EVENT......./(10X,12I9)//) 5 RETURN 6 WRITE (NPRNT,104) TNOW 104 FORMAT (10X,19H FILE 1 IS EMPTY AT,F10.2) GO TO 5 END C SUBROUTINE NPOSN C C SUBROUTINE NPOSN(J,NPSSN) COMMON ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST, 1NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,TNOW, 2TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4) COMMON ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),MFE(4) 1,MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),QTIME(4),SSUMA(10,5), 2SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,JCLR NPSSN = 0 P = PARAM (J,1) 1 IF (P-6.0) 2,2,4 2 Y = EXP (-P) X = 1.0 3 CALL DRAND(ISEED,RNUM) X=X*RNUM IF (X-Y) 6,8,8 8 NPSSN = NPSSN+1 GO TO 3 4 TEMP=PARAM (J,4) PARAM(J,4) = (PARAM(J,1))**.5 NPSSN=RNORM(J)+.5 PARAM (J,4)=TEMP IF(NPSSN)4,6,6 6 KK=PARAM (J,2) KKK=PARAM (J,3) NPSSN=KK+NPSSN IF(NPSSN-KKK)7,7,9 9 NPSSN = PARAM (J,3) 7 RETURN END C SUBROUTINE PRNTQ C C SUBROUTINE PRNTQ (JQ,NSET) DIMENSION NSET(6,1) COMMON ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST, 1NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,TNOW, 2TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4) COMMON ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),MFE(4) 1,MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),QTIME(4),SSUMA(10,5), 2SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,JCLR WRITE (NPRNT,100) JQ IF (TNOW - TBEG) 12,12,13 12 WRITE (NPRNT,105) 105 FORMAT(/1X25H NO PRINTOUT TNOW = TBEG //) GO TO 2 C C*****COMPUTE EXPECT NO. IN FILE JQ UP TO PRESENT THIS MAY BE USEFUL C*****IN SETTING THE VALUE OF ID C 13 XNQ=NQ(JQ) X=(ENQ(JQ)+XNQ*(TNOW-QTIME(JQ)))/(TNOW-TBEG) STD=((VNQ(JQ)+XNQ*XNQ*(TNOW-QTIME(JQ)))/(TNOW-TBEG)-X*X)**0.5 WRITE (NPRNT,104) X,STD,MAXNQ(JQ) C C*****PRINT FILE IN PROPER ORDER REQUIRES TRACING THROUGH THE POINTERS C*****OF THE FILE C LINE = MFE(JQ) IF (LINE-1) 4,1,1 4 WRITE (NPRNT,102) 2 RETURN 1 WRITE (NPRNT,101) 6 DO 77 I=1,IM ATRIB (I) = NSET(I,LINE) 77 ATRIB (I)=ATRIB (I)/SCALE WRITE (NPRNT,103) (ATRIB(I),I=1,IM) LINE = NSET(MX,LINE) IF (LINE-7777) 6,2,5 5 WRITE (NPRNT,199) 199 FORMAT(///1X26HERROR EXIT, TYPE 94 ERROR.) 100 FORMAT(//1X25H FILE PRINTOUT, FILE NO.,I3) 101 FORMAT (/1X14H FILE CONTENTS/) 102 FORMAT(/1X18HTHE FILE IS EMPTY) 103 FORMAT(1X,10F10.4) 104 FORMAT(/1X27HAVERAGE NUMBER IN FILE WAS,F10.4,/1X,9HSTD. DEV., 1 18X,F10.4,/1X,7HMAXIMUM,24X,I4) STOP END C FUNCTION RLOGN C C FUNCTION RLOGN (J) C C*****THE PARAMETERS USED WITH RLOGN ARE THE MEAN AND STANDARD DEVIATION C*****OF A NORMAL DISTRIBUTION C VA= RNORM (J) RLOGN=EXP(VA) RETURN END C FUNCTION ERLNG C C FUNCTION ERLNG (J) COMMON ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST, 1NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,TNOW, 2TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4) COMMON ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),MFE(4) 1,MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),QTIME(4),SSUMA(10,5), 2SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,JCLR K = PARAM(J,4) IF(K-1) 8,10,10 8 WRITE (NPRNT,20) J 20 FORMAT(/16HK = 0 FOR ERLNG,I7) CALL EXIT 10 R=1 DO 2 I=1,K CALL DRAND (ISEED,RNUM) 2 R=R*RNUM ERLNG = -PARAM(J,1)*ALOG(R) IF(ERLNG-PARAM(J,2))7,5,6 7 ERLNG = PARAM (J,2) 5 RETURN 6 IF(ERLNG - PARAM (J,3))5,5,4 4 ERLNG = PARAM (J,3) RETURN END C FUNCTION RNORM C C FUNCTION RNORM (J) COMMON ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST, 1NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,TNOW, 2TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4) COMMON ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),MFE(4) 1,MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),QTIME(4),SSUMA(10,5), 2SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,JCLR CALL DRAND(ISEED,RA) CALL DRAND(ISEED,RB) V=(-2.0*ALOG(RA))**0.5*COS (6.283*RB) RNORM = V*PARAM (J,4) + PARAM (J,1) IF (RNORM -PARAM (J,2)) 6,7,8 6 RNORM = PARAM (J,2) 7 RETURN 8 IF (RNORM -PARAM (J,3)) 7,7,9 9 RNORM = PARAM (J,3) RETURN END C FUNCTION UNFRM C C FUNCTION UNFRM (A,B) C*****THIS CARD IS TO MAINTAIN THE PROPER SEQUENCING COMMON ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST, 1NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,TNOW, 2TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4) COMMON ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),MFE(4) 1,MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),QTIME(4),SSUMA(10,5), 2SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,JCLR CALL DRAND (ISEED,RNUM) UNFRM = A+(B-A)*RNUM RETURN END C SUBROUTINE DRAND C C C MODIFIED FOR SANDERS PDP-10 C SUBROUTINE DRAND(ISEED,RNUM) DATA K/0/ IF (K .NE. 0 ) GO TO 10 K=1 CALL IRAN(ISEED) 10 CALL RANDOM(RNUM) RETURN END C SUBROUTINE OTPUT C C SUBROUTINE OTPUT(NPRNT,NSET) DIMENSION NSET(6,1) WRITE(NPRNT,10) 10 FORMAT(///10X,'NO ADDITIONAL OUTPUT REQUESTED') RETURN END