REAL FUNCTION RAND() C C THIS FUNCTION RETURNS A PSEUDO-RANDOM NUMBER FOR EACH INVOCATION. C IT IS A FORTRAN 77 ADAPTATION OF THE "INTEGER VERSION 2" MINIMAL C STANDARD NUMBER GENERATOR WHOSE PASCAL CODE APPEARS IN THE C ARTICLE: C C PARK, STEVEN K. AND MILLER, KEITH W., "RANDOM NUMBER C GENERATORS: GOOD ONES ARE HARD TO FIND", COMMUNICATIONS OF C THE ACM, OCTOBER, 1988. C C FORTRAN 77 IMPLEMENTATION BY DICK VALENT AND FRED CLARE. C INTEGER MPLIER, MODLUS, MOBYMP, MOMDMP PARAMETER (MPLIER=16807, MODLUS=2147483647, MOBYMP=127773, & MOMDMP=2836) COMMON /SEED/ JSEED, IFRST INTEGER HVLUE, LVLUE, TESTV, NEXTN SAVE NEXTN IF (IFRST .EQ. 0) THEN NEXTN = JSEED IFRST = 1 END IF HVLUE = NEXTN / MOBYMP LVLUE = MOD(NEXTN, MOBYMP) TESTV = MPLIER * LVLUE - MOMDMP * HVLUE IF (TESTV .GT. 0) THEN NEXTN = TESTV ELSE NEXTN = TESTV + MODLUS END IF RAND = REAL(NEXTN) / REAL(MODLUS) END C ****************************************************************** SUBROUTINE SRAND(ISEED) C C THIS SUBROUTINE SETS THE INTEGER SEED TO BE USED WITH THE C COMPANION RAND FUNCTION TO THE VALUE OF ISEED. A FLAG IS SET TO C INDICATE THAT THE SEQUENCE OF PSEUDO-RANDOM NUMBERS FOR THE C SPECIFIED SEED SHOULD START FROM THE BEGINNING. C INTEGER ISEED COMMON /SEED/ JSEED, IFRST JSEED = ISEED IFRST = 0 END