home *** CD-ROM | disk | FTP | other *** search
- C [USER1.FOR]
- C
- PROGRAM EXA1
- C////////////////////////////////////////////////////////////////
- C/ /
- C/ Program-id. Main of Example 1 for F80 /
- C/ Date-written. Jan. 16th 1984 /
- C/ File-name. EXA1.FOR /
- C/ Remarks. A single-channel queueing situation. /
- C/ Simulation with GASP page 118. /
- C/ /
- C////////////////////////////////////////////////////////////////
- C
- C * Default size of INTEGER = 2 bytes
- C
- INTEGER*1 FLNAME(11)
- INTEGER*4 NSET(6,25)
- C
- COMMON /C1/ ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST,
- 1 NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,
- 2 TNOW,TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4)
- C
- COMMON /C2/ ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),
- 1 MFE(4),MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),
- 2 QTIME(4),SSUMA(10,5),SUMA(10,5),NAME(6),NPROJ,MON,
- 3 NDAY,NYR,JCLR
- C
- COMMON /C3/ XISYS,BUS,XL,XMU
- C
- DATA FLNAME(1),FLNAME(2),FLNAME(3),FLNAME(4),FLNAME(5),
- 1 FLNAME(6),FLNAME(7),FLNAME(8),FLNAME(9),FLNAME(10),FLNAME(11)
- 2 /'G','A','S','P',' ',' ',' ',' ','D','A','T'/
- C
- C --- Set NCRDR equal to the Floppy drive number and
- C NPRNT to the printer number.
- C
- NCRDR = 6
- IDRIVE = 0
- C
- WRITE(1,90)
- 90 FORMAT(1H0,'Output GASP data file to CRT(3) or Printer(2)?'
- 1 /1H ,'Output Device number 3 or 2 : ')
- READ(1,95) NPRNT
- 95 FORMAT(I1)
- WRITE(1,100)
- 100 FORMAT(1H0,'Input GASP data file name (max 8 characters): ')
- READ(1,200) (FLNAME(I),I=1,8)
- 200 FORMAT(8A1)
- WRITE(3,210) (FLNAME(I),I=1,11)
- 210 FORMAT(1H ,'Input GASP data file name: ',11A1)
- CALL OPEN(NCRDR,FLNAME,IDRIVE)
- C
- XISYS = 1.
- BUS = 1.
- XL = 10.
- XMU = 6.
- CALL GASP(NSET)
- CALL EXIT
- END
- C
- SUBROUTINE EVNTS(IX,NSET)
- C////////////////////////////////////////////////////////////////
- C/ /
- C/ Program-id. EVNTS /
- C/ Date-written. Jan. 16th 1984 /
- C/ File-name. EVNTS.FOR /
- C/ Remarks. Subroutine EVNTS (P. 121) /
- C/ Event code 1 siginifies an arrival /
- C/ event; event code 2 signifies an end /
- C/ of service event; /
- C/ and event code 3 signifies an end of /
- C/ simulation event. /
- C/ /
- C////////////////////////////////////////////////////////////////
- C
- C * Default size of INTEGER = 2 bytes
- C
- INTEGER*1 FLNAME(11)
- INTEGER*4 NSET(6,1)
- C
- COMMON /C1/ ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST,
- 1 NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,
- 2 TNOW,TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4)
- C
- COMMON /C2/ ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),
- 1 MFE(4),MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),
- 2 QTIME(4),SSUMA(10,5),SUMA(10,5),NAME(6),NPROJ,MON,
- 3 NDAY,NYR,JCLR
- C
- COMMON /C3/ XISYS,BUS,XL,XMU
- C
- GO TO (1,2,3),IX
- 1 CALL ARRVL(NSET)
- RETURN
- 2 CALL ENDSV(NSET)
- RETURN
- 3 CALL ENDSM(NSET)
- RETURN
- END
- C
- SUBROUTINE ARRVL(NSET)
- C////////////////////////////////////////////////////////////////
- C/ /
- C/ Program-id. ARRVL /
- C/ Date-written. Jan. 16th 1984 /
- C/ File-name. ARRVL.FOR /
- C/ Remarks. Subroutine ARRVL page 123 /
- C/ The arrival of items to the system is /
- C/ described in terms of the time between /
- C/ the arrivals, every arrival event must /
- C/ cause the next arrival event to occur. /
- C/ /
- C////////////////////////////////////////////////////////////////
- C
- C * Default size of INTEGER = 2 bytes
- C
- INTEGER*1 FLNAME(11)
- INTEGER*4 NSET(6,1)
- C
- COMMON /C1/ ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST,
- 1 NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,
- 2 TNOW,TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4)
- C
- COMMON /C2/ ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),
- 1 MFE(4),MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),
- 2 QTIME(4),SSUMA(10,5),SUMA(10,5),NAME(6),NPROJ,MON,
- 3 NDAY,NYR,JCLR
- C
- COMMON /C3/ XISYS,BUS,XL,XMU
- C
- C --- Since ARRVL is an endogenous event schedule the next
- C arrival. At TNOW plus number drawn from an exponential
- C distribution. The arrival time is stored in ATRIB(1).
- C The event code for an ARRVL is 1. Set ATRIB(2)
- C equal to 1.
- C
- CALL DRAND(ISEED,RNUM)
- ATRIB(1) = TNOW - XL * ALOG(RNUM)
- ATRIB(2) = 1.0
- CALL FILEM(1,NSET)
- C
- C --- Collect the statistics on the number in the system since
- C an arrival causes number in the system to change.
- C
- CALL TMST(XISYS,TNOW,1,NSET)
- IF (XISYS) 7,8,9
- 7 CALL ERROR(31,NSET)
- RETURN
- C
- C --- Increment the number in the system. Since the number in
- C the system was zero the server was not busy.
- C The server status will change due to the new arrival
- C therefore statistics on the time the server was busy
- C must be collected.
- C
- 8 XISYS = XISYS + 1.0
- CALL TMST(BUS,TNOW,2,NSET)
- C
- C --- Change the status of the server to busy. Collect
- C statistics on the waitting time of current arrival which
- C is zero since the server was not busy at his time of
- C arrival.
- C
- BUS = 1.0
- CALL COLCT(0.0,2,NSET)
- C
- C --- Since the new arrival goes directly into service cause an
- C end of service event. Set ATRIB(2) equal to indicate an end
- C of service event. Set ATRIB(3) equal to TNOW the arrival
- C time of the customer.
- C
- CALL DRAND(ISEED,RNUM)
- ATRIB(1) = TNOW - XMU * ALOG(RNUM)
- ATRIB(2) = 2.0
- ATRIB(3) = TNOW
- CALL FILEM(1,NSET)
- RETURN
- C
- C --- Increment the number in the system.
- C
- 9 XISYS = XISYS + 1.0
- C
- C --- Put new arrival in the queue waiting for the server to
- C become free. Set ATRIB(3) equal to the arrival time of
- C the customer.
- C
- ATRIB(3) = TNOW
- CALL FILEM(2,NSET)
- RETURN
- END
- C
- SUBROUTINE ENDSM(NSET)
- C////////////////////////////////////////////////////////////////
- C/ /
- C/ Program-id. ENDSM /
- C/ Date-written. Jan. 16th 1984 /
- C/ File-name. ENDSM.FOR /
- C/ Remaeks. User defined subroutine, the completion /
- C/ of the simulation at a time specified /
- C/ by the programmer. /
- C/ page 128. /
- C/ /
- C////////////////////////////////////////////////////////////////
- C
- C * Default size of INTEGER = 2 bytes
- C
- INTEGER*1 FLNAME(11)
- INTEGER*4 NSET(6,1)
- C
- COMMON /C1/ ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST,
- 1 NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,
- 2 TNOW,TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4)
- C
- COMMON /C2/ ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),
- 1 MFE(4),MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),
- 2 QTIME(4),SSUMA(10,5),SUMA(10,5),NAME(6),NPROJ,MON,
- 3 NDAY,NYR,JCLR
- C
- COMMON /C3/ XISYS,BUS,XL,XMU
- C
- 20 IF (NQ(1)) 7,8,9
- 7 CALL ERROR(3,NSET)
- C
- C --- Update statistics on number in system and status of server
- C to end of simulation time. Set control variable to stop
- C simulation and to yield final report.
- C
- 8 CALL TMST(XISYS,TNOW,1,NSET)
- CALL TMST(BUS,TNOW,2,NSET)
- MSTOP = -1
- NORPT = 0
- RETURN
- C
- C --- Remove all events from event file so that all customers
- C arriving before end of simulation time are included in
- C simulation statistics. Only end of service event need be
- C processed. If items are in the queue of the server they
- C will be removed in the end of service event where another
- C end of service event will be created.
- C
- 9 CALL RMOVE(MFE(1),1,NSET)
- TNOW = ATRIB(1)
- IF (ATRIB(2) - 2.0) 20,21,20
- 21 CALL ENDSV(NSET)
- GO TO 20
- END
- C
- SUBROUTINE ENDSV(NSET)
- C////////////////////////////////////////////////////////////////
- C/ /
- C/ Program-id. ENDSV /
- C/ Date-written. Jan. 16th 1984 /
- C/ File-name. ENDSV.FOR /
- C/ Remarks. Subroutine ENDSV page 126 /
- C/ In ENDSV(End_of_Service) it is first /
- C/ necessary to collect statiscal infor- /
- C/ mation about the item completing /
- C/ processing. /
- C/ /
- C////////////////////////////////////////////////////////////////
- C
- C * Default size of INTEGER = 2 bytes
- C
- INTEGER*1 FLNAME(11)
- INTEGER*4 NSET(6,1)
- C
- COMMON /C1/ ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST,
- 1 NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,
- 2 TNOW,TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4)
- C
- COMMON /C2/ ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),
- 1 MFE(4),MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),
- 2 QTIME(4),SSUMA(10,5),SUMA(10,5),NAME(6),NPROJ,MON,
- 3 NDAY,NYR,JCLR
- C
- COMMON /C3/ XISYS,BUS,XL,XMU
- C
- C --- Compute time in system equal to current time minus arrival
- C time of customer finishing service. Cmpute statistics on
- C in system.
- C
- TISYS = TNOW - ATRIB(3)
- CALL COLCT(TISYS,1,NSET)
- CALL HISTO(TISYS,2.0,1.0,1)
- C
- C --- Since a customer will depart from the system due to the
- C end of service collect ststistics on number in system
- C and decrement the number in the system by one.
- C
- CALL TMST(XISYS,TNOW,1,NSET)
- XISYS = XISYS - 1.0
- C
- C --- Test to see if customer are waiting for service. If none
- C collect statistics on the busy time of the server and set
- C his status to idle by making bus equal zero.
- C If customer are waiting for service remove first customer
- C from the queue of the server which is file two.
- C
- IF (NQ(2)) 7,8,9
- 7 CALL ERROR(41,NSET)
- RETURN
- 8 CALL TMST(BUS,TNOW,2,NSET)
- BUS = 0.0
- RETURN
- 9 CALL RMOVE(MFE(2),2,NSET)
- C
- C --- Compute waiting time of customer and collect statistics
- C on waiting time. Put customer in service by scheduling
- C and end of service event for the customer.
- C
- WT = TNOW - ATRIB(3)
- CALL COLCT(WT,2,NSET)
- CALL DRAND(ISEED,RNUM)
- ATRIB(1) = TNOW - XMU * ALOG(RNUM)
- ATRIB(2) = 2.0
- CALL FILEM(1,NSET)
- RETURN
- END
- C
- SUBROUTINE OTPUT(NSET)
- C////////////////////////////////////////////////////////////////
- C/ /
- C/ Program-id. OTPUT /
- C/ Date-written. Jan. 16th 1984 /
- C/ File-name. OTPUT.FOR /
- C/ Remarks. Subroutine OTPUT.FOR page 130 /
- C/ Written by a programmer to perform /
- C/ calculations and provide additional /
- C/ output at the end of a simulation run. /
- C/ /
- C////////////////////////////////////////////////////////////////
- C
- C * Default size of INTEGER = 2 bytes
- C
- INTEGER*1 FLNAME(11)
- INTEGER*4 NSET(6,1)
- C
- COMMON /C1/ ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST,
- 1 NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,
- 2 TNOW,TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4)
- C
- COMMON /C2/ ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),
- 1 MFE(4),MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),
- 2 QTIME(4),SSUMA(10,5),SUMA(10,5),NAME(6),NPROJ,MON,
- 3 NDAY,NYR,JCLR
- C
- COMMON /C3/ XISYS,BUS,XL,XMU
- C
- C --- Compute theoretical and simulation values of performance
- C measures for the queuing system.
- C
- ETISS = SUMA(1,1) / SUMA(1,3)
- EIDTS = (SSUMA(2,1) - SSUMA(2,2)) / (SUMA(1,3) - 1.0)
- EWTS = SUMA(2,1) / SUMA(2,3)
- EIDTC = XL - XMU
- EWTC = (1.0 / XL) / ((1.0 / XMU) * (1.0/XMU - 1.0/XL))
- ETISC = 1.0/(1.0/XMU - 1.0/XL)
- YA = ETISS / (SSUMA(1,2) / SSUMA(1,1))
- YS = ETISS - EWTS
- WRITE(NPRNT,85)
- 85 FORMAT(/36X,'Simulated Value',4X,'Theoretical Value'/)
- WRITE(NPRNT,90) EIDTS,EIDTC
- 90 FORMAT(10X,'Expected idle time',11X,F8.3,12X,F8.3)
- WRITE(NPRNT,95) EWTS,EWTC
- 95 FORMAT(10X,'Expected waiting time',8X,F8.3,12X,F8.3)
- WRITE(NPRNT,96) ETISS,ETISC
- 96 FORMAT(10X,'Expected time in system',6X,F8.3,12X,F8.3)
- WRITE(NPRNT,97) YA,XL
- 97 FORMAT(10X,'Expected arrival time',8X,F8.3,12X,F8.3)
- WRITE(NPRNT,98) YS,XMU
- 98 FORMAT(10X,'Expected service time',8X,F8.3,12X,F8.3)
- RETURN
- END
-