11 module procedure uniform_1, uniform_n
36 SUBROUTINE init (self, seed)
38 integer,
optional:: seed
41 call trace_begin (
'random_t%init')
46 if (
present(seed))
then 66 integer:: idum,ia,im,iq,ir,ntab,ndiv
67 real:: ran1,am,eps,rnmx
68 parameter(ia=16807,im=2147483647,am=1./im,iq=127773,ir=2836, &
69 ntab=32,ndiv=1+(im-1)/ntab,eps=1.2e-7,rnmx=1.-eps)
73 print *,
'WARNING: ran1 has not been initialized' 76 idum = ia*(idum-k*iq)-ir*k
77 if (idum<0) idum = idum+im
79 ran1 = min(am*iy,rnmx)
87 FUNCTION ran3(self)
result (u)
89 real(kind=4):: u(3), u2
93 u(i) = 2.*self%ran1()-1.
96 do while (u2 > 1.0 .or. u2 < 1e-8)
98 u(i) = 2.*self%ran1()-1.
106 FUNCTION uniform_1 (self, a, b)
RESULT (out)
108 real,
intent(in),
optional:: a, b
113 out = a + (b-a)*self%ran1()
124 FUNCTION uniform_n (self, n, a, b)
RESULT (out)
126 integer,
intent(in):: n
127 real,
intent(in),
optional:: a, b
128 real,
dimension(n):: out
134 out(i) = a*self%ran1()
138 out(i) = a + (b-a)*self%ran1()