2
3
4
5
6
7
8
9 INTEGER IDIST, N
10
11
12 INTEGER ISEED( 4 )
13 COMPLEX X( * )
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 REAL ZERO, ONE, TWO
57 parameter( zero = 0.0e+0, one = 1.0e+0, two = 2.0e+0 )
58 INTEGER LV
59 parameter( lv = 128 )
60 REAL TWOPI
61 parameter( twopi = 6.2831853071795864769252867663e+0 )
62
63
64 INTEGER I, IL, IV
65
66
67 REAL U( LV )
68
69
71
72
73 EXTERNAL slaruv
74
75
76
77 DO 60 iv = 1, n, lv / 2
78 il =
min( lv / 2, n-iv+1 )
79
80
81
82
83 CALL slaruv( iseed, 2*il, u )
84
85 IF( idist.EQ.1 ) THEN
86
87
88
89 DO 10 i = 1, il
90 x( iv+i-1 ) =
cmplx( u( 2*i-1 ), u( 2*i ) )
91 10 CONTINUE
92 ELSE IF( idist.EQ.2 ) THEN
93
94
95
96 DO 20 i = 1, il
97 x( iv+i-1 ) =
cmplx( two*u( 2*i-1 )-one,
98 $ two*u( 2*i )-one )
99 20 CONTINUE
100 ELSE IF( idist.EQ.3 ) THEN
101
102
103
104 DO 30 i = 1, il
105 x( iv+i-1 ) = sqrt( -two*log( u( 2*i-1 ) ) )*
106 $ exp(
cmplx( zero, twopi*u( 2*i ) ) )
107 30 CONTINUE
108 ELSE IF( idist.EQ.4 ) THEN
109
110
111
112
113 DO 40 i = 1, il
114 x( iv+i-1 ) = sqrt( u( 2*i-1 ) )*
115 $ exp(
cmplx( zero, twopi*u( 2*i ) ) )
116 40 CONTINUE
117 ELSE IF( idist.EQ.5 ) THEN
118
119
120
121
122 DO 50 i = 1, il
123 x( iv+i-1 ) = exp(
cmplx( zero, twopi*u( 2*i ) ) )
124 50 CONTINUE
125 END IF
126 60 CONTINUE
127 RETURN
128
129
130