42 integer,
intent(in) :: degree
43 integer,
intent(in),
optional :: date_array(8)
47 character :: tmpstr*(10)
50 call date_and_time(tmpstr,tmpstr,tmpstr,dt)
51 if(
present(date_array)) dt = date_array
55 seed = dt(1)*1000 + dt(2)*10000 + dt(3)*10101 + dt(5)
57 seed = dt(1)*1000 + dt(2)*10000 + dt(3)*10101
59 seed = dt(6)*1010 + dt(7)*10101 + dt(8)*1001
84 integer,
intent(inout) :: seed
87 integer,
parameter :: im1=2147483563, ia1=40014, iq1=53668, ir1=12211
88 integer,
parameter :: im2=2147483399, ia2=40692, iq2=52774, ir2= 3791
89 integer,
parameter :: ntab=32, im1m1=im1-1, ndtab=67108862
92 real(
double),
parameter :: am1 = 1.0_dbl/im1
93 real(
double),
parameter :: eps = epsilon(0.0_dbl)
94 real(
double),
parameter :: rnmx = 1.0_dbl - eps
96 integer,
save :: seed2=123456789, tab(ntab+8)=0, iy=0
104 seed = ia1*(seed-k*iq1) - k*ir1
105 if(seed.lt.0) seed = seed + im1
106 if(j.le.ntab) tab(j) = seed
113 seed = ia1*(seed-k*iq1) - k*ir1
114 if(seed.lt.0) seed = seed + im1
118 seed2 = ia2*(seed2-k*iq2) - k*ir2
119 if(seed2.lt.0) seed2 = seed2 + im2
124 if(iy.lt.1) iy = iy + im1m1
152 integer,
intent(inout) :: seed
154 logical :: saved = .false.
159 do while(rusq.le.0.d0 .or. rusq.ge.1.d0)
163 rusq = ru1**2 + ru2**2
166 fac = sqrt(-2*log(rusq)/rusq)