1 SUBROUTINE advnst(k) 2C********************************************************************** 3C 4C SUBROUTINE ADVNST(K) 5C ADV-a-N-ce ST-ate 6C 7C Advances the state of the current generator by 2^K values and 8C resets the initial seed to that value. 9C 10C This is a transcription from Pascal to Fortran of routine 11C Advance_State from the paper 12C 13C L'Ecuyer, P. and Cote, S. "Implementing a Random Number Package 14C with Splitting Facilities." ACM Transactions on Mathematical 15C Software, 17:98-111 (1991) 16C 17C 18C Arguments 19C 20C 21C K -> The generator is advanced by2^K values 22C INTEGER K 23C 24C********************************************************************** 25C .. Parameters .. 26 INTEGER*4 numg 27 PARAMETER (numg=32) 28C .. 29C .. Scalar Arguments .. 30 INTEGER*4 k 31C .. 32C .. Scalars in Common .. 33 INTEGER*4 a1,a1vw,a1w,a2,a2vw,a2w,m1,m2 34C .. 35C .. Arrays in Common .. 36 INTEGER*4 cg1(numg),cg2(numg),ig1(numg),ig2(numg),lg1(numg), 37 + lg2(numg) 38 LOGICAL qanti(numg) 39C .. 40C .. Local Scalars .. 41 INTEGER*4 g,i,ib1,ib2 42C .. 43C .. External Functions .. 44 INTEGER*4 mltmod 45 LOGICAL qrgnin 46 EXTERNAL mltmod,qrgnin 47C .. 48C .. External Subroutines .. 49 EXTERNAL getcgn,setsd 50C .. 51C .. Common blocks .. 52 COMMON /globe/m1,m2,a1,a2,a1w,a2w,a1vw,a2vw,ig1,ig2,lg1,lg2,cg1, 53 + cg2,qanti 54C .. 55C .. Save statement .. 56 SAVE /globe/ 57C .. 58C .. Executable Statements .. 59C Abort unless random number generator initialized 60 IF (qrgnin()) GO TO 10 61 WRITE (*,*) ' ADVNST called before random number generator ', 62 + ' initialized -- abort!' 63 CALL XSTOPX 64 + (' ADVNST called before random number generator initialized') 65 66 10 CALL getcgn(g) 67C 68 ib1 = a1 69 ib2 = a2 70 DO 20,i = 1,k 71 ib1 = mltmod(ib1,ib1,m1) 72 ib2 = mltmod(ib2,ib2,m2) 73 20 CONTINUE 74 CALL setsd(mltmod(ib1,cg1(g),m1),mltmod(ib2,cg2(g),m2)) 75C 76C NOW, IB1 = A1**K AND IB2 = A2**K 77C 78 RETURN 79 80 END 81