CDECK ID>, HWRPOW. *CMZ :- -26/04/91 11.11.56 by Bryan Webber *-- Author : Bryan Webber C----------------------------------------------------------------------- SUBROUTINE HWRPOW(XVAL,XJAC) C----------------------------------------------------------------------- C RETURNS XVAL DISTRIBUTED ON (XMIN,XMAX) LIKE XVAL**XPOW C AND CORRESPONDING JACOBIAN FACTOR XJAC C SET FIRST=.TRUE. IF NEW XMIN,XMAX OR XPOW C----------------------------------------------------------------------- DOUBLE PRECISION HWR,XVAL,XJAC,XMIN,XMAX,XPOW,P,Q,A,B,C,Z,ZERO LOGICAL FIRST PARAMETER(ZERO=0.0D0) EXTERNAL HWR SAVE Q,A,B,C COMMON/HWRPIN/XMIN,XMAX,XPOW,FIRST IF (FIRST) THEN P=XPOW+1. IF (P.EQ.ZERO) CALL HWWARN('HWRPOW',500,*999) Q=1./P A=XMIN**P B=XMAX**P-A C=B*Q FIRST=.FALSE. ENDIF Z=A+B*HWR() XVAL=Z**Q XJAC=XVAL*C/Z 999 END CDECK ID>, HWRUNG. *CMZ :- -26/04/91 14.55.45 by Federico Carminati *-- Author : David Ward, modified by Bryan Webber C----------------------------------------------------------------------- FUNCTION HWRUNG(A,B) C----------------------------------------------------------------------- C Random number from distribution having flat top [-A,A] & gaussian C tail of s.d. B C----------------------------------------------------------------------- DOUBLE PRECISION HWRUNG,HWRGAU,HWRUNI,A,B,PRUN,ZERO LOGICAL HWRLOG EXTERNAL HWRGAU,HWRUNI,HWRLOG PARAMETER (ZERO=0.D0) IF (A.EQ.ZERO) THEN PRUN=0 ELSE PRUN=1./(1.+B*1.2533/A) ENDIF IF(HWRLOG(PRUN)) THEN HWRUNG=HWRUNI(0,-A,A) ELSE HWRUNG=HWRGAU(0,ZERO,B) HWRUNG=HWRUNG+SIGN(A,HWRUNG) ENDIF END