1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
PROGRAM tstbot
C**********************************************************************
C
C A test program for the bottom level routines
C
C**********************************************************************
C Set up the random number generator
C .. Local Scalars ..
INTEGER ians,iblock,igen,iseed1,iseed2,itmp,ix,ixgen,nbad
C ..
C .. Local Arrays ..
INTEGER answer(10000),genlst(5)
C ..
C .. External Functions ..
INTEGER ignlgi
EXTERNAL ignlgi
C ..
C .. External Subroutines ..
EXTERNAL getsd,initgn,setall,setcgn
C ..
C .. Data statements ..
DATA genlst/1,5,10,20,32/
C ..
C .. Executable Statements ..
nbad = 0
WRITE (*,9000)
9000 FORMAT (' For five virual generators of the 32'/
+ ' This test generates 10000 numbers then resets the block'/
+ ' and does it again'/
+ ' Any disagreements are reported -- there should be none'/)
C
C Set up Generators
C
CALL setall(12345,54321)
C
C For a selected set of generators
C
DO 60,ixgen = 1,5
igen = genlst(ixgen)
CALL setcgn(igen)
WRITE (*,*) ' Testing generator ',igen
C
C Use 10 blocks
C
CALL initgn(-1)
CALL getsd(iseed1,iseed2)
DO 20,iblock = 1,10
C
C Generate 1000 numbers
C
DO 10,ians = 1,1000
ix = ians + (iblock-1)*1000
answer(ix) = ignlgi()
10 CONTINUE
CALL initgn(+1)
20 CONTINUE
CALL initgn(-1)
C
C Do it again and compare answers
C
CALL getsd(iseed1,iseed2)
C
C Use 10 blocks
C
DO 50,iblock = 1,10
C
C Generate 1000 numbers
C
DO 40,ians = 1,1000
ix = ians + (iblock-1)*1000
C ANSWER( IX ) = IGNLGI()
itmp = ignlgi()
IF (.NOT. (itmp.NE.answer(ix))) GO TO 30
WRITE (*,9010) iblock,ians,ix,answer(ix),itmp
9010 FORMAT (' Disagreement on regeneration of numbers'/
+ ' Block ',I2,' N within Block ',I2,
+ ' Index in answer ',I5/
+ ' Originally Generated ',I10,' Regenerated ',
+ I10)
nbad = nbad + 1
IF (nbad.GT.10) STOP ' More than 10 mismatches'
30 CONTINUE
40 CONTINUE
CALL initgn(+1)
50 CONTINUE
WRITE (*,*) ' Finished testing generator ',igen
WRITE (*,*) ' Test completed successfully'
60 CONTINUE
STOP
END
|