root / synthbench / euroben-dm / mod2h / .svn / text-base / rinit.f.svn-base @ 0:839f52ef7657
History | View | Annotate | Download (1.2 kB)
1 |
Subroutine rinit( n, a, nodes, me ) |
---|---|
2 |
! ---------------------------------------------------------------------- |
3 |
Use numerics |
4 |
Use ran_module |
5 |
Implicit None |
6 |
|
7 |
Integer :: n |
8 |
Real(l_) :: a(n) |
9 |
Integer :: nodes, me |
10 |
|
11 |
Integer(8) :: af1, af2, ci1, ci2 |
12 |
Integer(8) :: i, j |
13 |
! ---------------------------------------------------------------------- |
14 |
ak1 = 1 |
15 |
ak2 = 1 |
16 |
ck1 = 0 |
17 |
ck2 = 0 |
18 |
Do i = 1, nodes |
19 |
af1 = ak1 |
20 |
af2 = ak2 |
21 |
ak1 = Mod( a1*ak1, m1 ) |
22 |
ak2 = Mod( a2*ak2, m2 ) |
23 |
ci1 = 0 |
24 |
Do j = 1, c1 |
25 |
ci1 = Mod( ci1 + af1, m1 ) |
26 |
End Do |
27 |
ci2 = 0 |
28 |
Do j = 1, c2 |
29 |
ci2 = Mod( ci2 + af2, m2 ) |
30 |
End Do |
31 |
ck1 = Mod( Mod( ck1, m1 ) + ci1, m1 ) |
32 |
ck2 = Mod( Mod( ck2, m2 ) + ci2, m2 ) |
33 |
End Do |
34 |
Do i = 1, me + 97 ! --- Warming up phase. |
35 |
x1 = Mod( a1*x1 + c1, m1 ) |
36 |
x2 = Mod( a2*x2 + c2, m2 ) |
37 |
End Do |
38 |
a(1) = ( Real( x1, l_ ) + Real( x2, l_ )*rm2 )*rm1 |
39 |
! ---------------------------------------------------------------------- |
40 |
End Subroutine rinit |