photos-random.h

00001       SUBROUTINE PHORIN
00002 C.----------------------------------------------------------------------
00003 C.
00004 C.    PHOTOS:   PHOton radiation  in decays RANdom number generator init
00005 C.
00006 C.    Purpose:  Initialse PHORAN  with  the user  specified seeds in the
00007 C.              array ISEED.  For details  see also:  F. James  CERN DD-
00008 C.              Report November 1988.
00009 C.
00010 C.    Input Parameters:   ISEED(*)
00011 C.
00012 C.    Output Parameters:  URAN, CRAN, CDRAN, CMRAN, I97, J97
00013 C.
00014 C.    Author(s):  B. van Eijk and F. James        Created at:  27/09/89
00015 C.                                                Last Update: 22/02/90
00016 C.
00017 C.----------------------------------------------------------------------
00018       IMPLICIT NONE
00019       DOUBLE PRECISION DATA
00020       REAL*8 S,T
00021       INTEGER I,IS1,IS2,IS3,IS4,IS5,J
00022       INTEGER ISEED,I97,J97
00023       REAL*8 URAN,CRAN,CDRAN,CMRAN
00024       COMMON/PHSEED/ISEED(2),I97,J97,URAN(97),CRAN,CDRAN,CMRAN
00025 C--
00026 C--   Check value range of seeds
00027       IF ((ISEED(1).LT.0).OR.(ISEED(1).GE.31328)) THEN
00028         DATA=ISEED(1)
00029         CALL PHOERR(8,'PHORIN',DATA)
00030       ENDIF
00031       IF ((ISEED(2).LT.0).OR.(ISEED(2).GE.30081)) THEN
00032         DATA=ISEED(2)
00033         CALL PHOERR(9,'PHORIN',DATA)
00034       ENDIF
00035 C--
00036 C--   Calculate Marsaglia and Zaman seeds (by F. James)
00037       IS1=MOD(ISEED(1)/177,177)+2
00038       IS2=MOD(ISEED(1),177)+2
00039       IS3=MOD(ISEED(2)/169,178)+1
00040       IS4=MOD(ISEED(2),169)
00041       DO 20 I=1,97
00042         S=0.D0
00043         T=0.5D0
00044         DO 10 J=1,24
00045           IS5=MOD (MOD(IS1*IS2,179)*IS3,179)
00046           IS1=IS2
00047           IS2=IS3
00048           IS3=IS5
00049           IS4=MOD(53*IS4+1,169)
00050           IF (MOD(IS4*IS5,64).GE.32) S=S+T
00051    10   T=0.5D0*T
00052    20 URAN(I)=S
00053       CRAN=362436.D0/16777216.D0
00054       CDRAN=7654321.D0/16777216.D0
00055       CMRAN=16777213.D0/16777216.D0
00056       I97=97
00057       J97=33
00058       RETURN
00059       END
00060       FUNCTION PHORAN(IDUM)
00061 C.----------------------------------------------------------------------
00062 C.
00063 C.    PHOTOS:   PHOton radiation in decays RANdom number generator based
00064 C.              on Marsaglia Algorithm
00065 C.
00066 C.    Purpose:  Generate  uniformly  distributed  random numbers between
00067 C.              0 and 1.  Super long period:  2**144.  See also:
00068 C.              G. Marsaglia and A. Zaman,  FSU-SCR-87-50,  for seed mo-
00069 C.              difications  to  this version  see:  F. James DD-Report,
00070 C.              November 1988.  The generator  has  to be initialized by
00071 C.              a call to PHORIN.
00072 C.
00073 C.    Input Parameters:   IDUM (integer dummy)
00074 C.
00075 C.    Output Parameters:  Function value
00076 C.
00077 C.    Author(s):  B. van Eijk, G. Marsaglia and   Created at:  27/09/89
00078 C.                A. Zaman                        Last Update: 27/09/89
00079 C.
00080 C.----------------------------------------------------------------------
00081       IMPLICIT NONE
00082       REAL*8 PHORAN
00083       INTEGER IDUM
00084       INTEGER ISEED,I97,J97
00085       REAL*8 URAN,CRAN,CDRAN,CMRAN
00086       COMMON/PHSEED/ISEED(2),I97,J97,URAN(97),CRAN,CDRAN,CMRAN
00087    10 PHORAN=URAN(I97)-URAN(J97)
00088       IF (PHORAN.LT.0.D0) PHORAN=PHORAN+1.D0
00089       URAN(I97)=PHORAN
00090       I97=I97-1
00091       IF (I97.EQ.0) I97=97
00092       J97=J97-1
00093       IF (J97.EQ.0) J97=97
00094       CRAN=CRAN-CDRAN
00095       IF (CRAN.LT.0.D0) CRAN=CRAN+CMRAN
00096       PHORAN=PHORAN-CRAN
00097       IF (PHORAN.LT.0.D0) PHORAN=PHORAN+1.D0
00098       IF (PHORAN.LE.0.D0) GOTO 10
00099       RETURN
00100       END
Generated on Sun Oct 20 20:24:09 2013 for C++InterfacetoTauola by  doxygen 1.6.3