* * $Id: funran.F,v 1.1.1.1 1996/04/01 15:02:57 mclareni Exp $ * * $Log: funran.F,v $ * Revision 1.1.1.1 1996/04/01 15:02:57 mclareni * Mathlib gen * * #include "gen/pilot.h" SUBROUTINE FUNRAN(ARRAY,XRAN) C GENERATION OF RANDOM NUMBERS IN ANY GIVEN DISTRIBUTION, BY C 4-POINT INTERPOLATION IN THE INVERSE CUMULATIVE DISTR. C WHICH WAS PREVIOUSLY GENERATED BY FUNPRE SAVE RBUF, IBUF, GAP, GAPINV COMMON/FUNINT/X DIMENSION ARRAY(100) DIMENSION RBUF(20) DATA IBUF/20/ DATA GAP,GAPINV/.0101010101,99./ C IF (IBUF .LT. 20) GO TO 10 CALL NRAN(RBUF,020) IBUF = 0 10 IBUF = IBUF + 1 X = RBUF(IBUF) J = INT( X *GAPINV) + 1 J = MAX(J,2) J = MIN(J,98) P = ( X -GAP*(J-1)) * GAPINV A = (P+1.0) * ARRAY(J+2) - (P-2.0)*ARRAY(J-1) B = (P-1.0) * ARRAY(J) - P * ARRAY(J+1) XRAN = A*P *(P-1.0) *0.16666667 + B * (P+1.0) * (P-2.0) * 0.5 RETURN END