* * $Id$ * * $Log$ * Revision 1.1.1.1 1996/04/01 15:03:24 mclareni * Mathlib gen * * #include "gen/pilot.h" SUBROUTINE GENPNT (NDIM,X,WT) REAL X(10),WWT,WT,FUN COMMON /ISTRGE/ MXRGNS,ISTOR(12000) COMMON /RSTRGE/ RSTSZE,RSTOR(18001) INTEGER RSTSZE COMMON /BUKSZE/ MAXWRD INTEGER MAXWRD COMMON /TRESZE/ ENTREE,ENTBUC INTEGER ENTREE,ENTBUC COMMON /LIMITS/ GMINUS(10),GPLUS(10) COMMON /FUNN/ NFUN, NFOPT, NFCUT /GENINL/ JNLGEN COMMON /QUADRE/ IDEG INTEGER IDEG INTEGER NFUN,JNLGEN,INLGEN INTEGER PARENT,PNTR,NTIMES,MODE REAL UPLUS(10),UMINUS(10),XSAVE(10),WWTSVE MODE=1 #if defined(CERNLIB_DOUBLE)||!defined(CERNLIB_F4) ENTRY RANGEN(NDIM,X) #endif #if (defined(CERNLIB_SINGLE))&&(defined(CERNLIB_F4)) ENTRY RANGEN #endif C*UL 10 INLGEN=JNLGEN INLGEN=JNLGEN IF(INLGEN.EQ.0) GOTO 90 INLGEN=0 NTIMES=0 IF(ENTBUC.GT.1) GOTO 30 WRITE(6,20) 20 FORMAT(' GENPNT/RANGEN CALLED BEFORE PARTN') STOP 30 IF(IDEG.EQ.1) GOTO 50 WRITE(6,40) 40 FORMAT(' GENPNT/RANGEN CALLED WITH IDEG NE 1') STOP 50 IF(MAXWRD.EQ.7) GOTO 70 WRITE(6,60) 60 FORMAT(' GENPNT/RANGEN CALLED WITH IMPROPER BUCKET STORAGE') STOP 70 ISCR=MXRGNS*(MAXWRD+1) RSTOR(ISCR+1)=0.0E+0 PNTR=MXRGNS+1 DO 80 J=1,ENTBUC RSTOR(ISCR+J+1)=RSTOR(ISCR+J)+RSTOR(PNTR+4)*RSTOR(PNTR+6) PNTR=PNTR+MAXWRD 80 CONTINUE 90 IF(MODE.EQ.1) GOTO 100 IF(NTIMES.GT.0) GOTO 180 100 CALL RANUMS(R,1) R=R*RSTOR(ISCR+ENTBUC+1) NL=1 NH=ENTBUC+1 110 IF(NH.LE.NL+1) GOTO 130 NX=(NH+NL)/2 IF(R.GT.RSTOR(ISCR+NX)) GOTO 120 NH=NX GOTO 110 120 NL=NX GOTO 110 130 PARENT=1 DO 140 J=1,NDIM UMINUS(J)=GMINUS(J) UPLUS(J)=GPLUS(J) 140 CONTINUE CALL BOUNDS(NL,PARENT,ISTOR,RSTOR,UMINUS,UPLUS) PNTR=MXRGNS+1+MAXWRD*(NL-1) CALL RANUMS (X(1), NDIM) DO 150 J=1,NDIM X(J)=(UPLUS(J)-UMINUS(J))*X(J)+UMINUS(J) 150 CONTINUE IF(MODE.NE.1) GOTO 160 WT=FUN(NDIM,X)/RSTOR(PNTR+4) NFUN=NFUN+1 RETURN 160 CALL RANUMS(R,1) IF(R.LE.RSTOR(PNTR+5)/RSTOR(PNTR+4)) RETURN WWT=FUN(NDIM,X)/RSTOR(PNTR+4) NFUN=NFUN+1 IF(R.GT.WWT) GOTO 100 IF(WWT.LE.1.0E+0) RETURN NTIMES=INT(WWT) WWTSVE=WWT DO 170 I=1,NDIM XSAVE(I)=X(I) 170 CONTINUE RETURN 180 IF(NTIMES.LE.1) GOTO 200 NTIMES=NTIMES-1 DO 190 I=1,NDIM X(I)=XSAVE(I) 190 CONTINUE RETURN 200 NTIMES=0 WWT=WWTSVE-INT(WWTSVE) IF(R.LT.WWT) RETURN GOTO 100 END