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