SUBROUTINE BGNRND(X0, X, A, MRND) C + + + PURPOSE + + + C C BGNRND IS USED TO INITIALIZE THE SEED FOR THE RANDOM NUMBER C GENERATOR RND C C THIS ROUTINE, WITH DEBUG LINES ACTIVATED, CHECKS TO SEE IF THE C UNIFORM RANDOM NUMBER GENERATOR, RND, WILL WORK IN DOUBLE OR C SINGLE PRECISION C C TO CHANGE TO SINGLE PRECISION, COMMENT OUT THE DOUBLE PRECISION C STATEMENTS IN BGNRND AND RND AND CHANGE THE DATA STATEMENTS IN C RND TO HAVE SINGLE PRECISION NUMBERS C C X0 R*4 THE ROUTINE INITIALIZES X TO MIN(MAX(INT(X0),1),M-1) C THIS INSURES X IS INITIALLY POSITIVE AND LESS THAN M C C CALLED FROM HDRIVE C AUTHOR(S): D. FLANAGAN, J. ASCOUGH C VERSION: THIS MODULE TAKEN FROM ASCOUGH STANDALONE IRS CODE C DATE CODED: 3-28-2005 C CODED BY: D. FLANAGAN C C + + + ARGUMENT DECLARATIONS + + + C REAL X0, X, A, MRND C C + + + ARGUMENT DEFINITIONS + + + C C X0 - C X - C A - C MRND - C C + + + LOCAL VARIABLES + + + DOUBLE PRECISION U C C + + + END SPECIFICATIONS + + + C C TEST FOR DOUBLE PRECISION OPERATION C X = 1.D0 A = 16807.D0 MRND = 2147483647.D0 X = A * MRND U = A C IF (.NOT.((X.NE.X+1.D0).AND.(U.NE.U+1.))) THEN WRITE(*,*) 'RANDOM NUMBER INITIALIZATION FAILED' STOP END IF C C TEST FOR SINGLE PRECISION OPERATION C U = X C IF (U.NE.U+1.) THEN C END IF C C INITIALIZE X C X = AINT(X0) IF (X.LE.0.D0) X = 1. IF (X.GE.MRND) X = MRND - 1.D0 C RETURN END