LAPACK  3.6.1
LAPACK: Linear Algebra PACKage
subroutine clarnv ( integer  IDIST,
integer, dimension( 4 )  ISEED,
integer  N,
complex, dimension( * )  X 
)

CLARNV returns a vector of random numbers from a uniform or normal distribution.

Download CLARNV + dependencies [TGZ] [ZIP] [TXT]

Purpose:
 CLARNV returns a vector of n random complex numbers from a uniform or
 normal distribution.
Parameters
[in]IDIST
          IDIST is INTEGER
          Specifies the distribution of the random numbers:
          = 1:  real and imaginary parts each uniform (0,1)
          = 2:  real and imaginary parts each uniform (-1,1)
          = 3:  real and imaginary parts each normal (0,1)
          = 4:  uniformly distributed on the disc abs(z) < 1
          = 5:  uniformly distributed on the circle abs(z) = 1
[in,out]ISEED
          ISEED is INTEGER array, dimension (4)
          On entry, the seed of the random number generator; the array
          elements must be between 0 and 4095, and ISEED(4) must be
          odd.
          On exit, the seed is updated.
[in]N
          N is INTEGER
          The number of random numbers to be generated.
[out]X
          X is COMPLEX array, dimension (N)
          The generated random numbers.
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Date
September 2012
Further Details:
  This routine calls the auxiliary routine SLARUV to generate random
  real numbers from a uniform (0,1) distribution, in batches of up to
  128 using vectorisable code. The Box-Muller method is used to
  transform numbers from a uniform to a normal distribution.

Definition at line 101 of file clarnv.f.

101 *
102 * -- LAPACK auxiliary routine (version 3.4.2) --
103 * -- LAPACK is a software package provided by Univ. of Tennessee, --
104 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
105 * September 2012
106 *
107 * .. Scalar Arguments ..
108  INTEGER idist, n
109 * ..
110 * .. Array Arguments ..
111  INTEGER iseed( 4 )
112  COMPLEX x( * )
113 * ..
114 *
115 * =====================================================================
116 *
117 * .. Parameters ..
118  REAL zero, one, two
119  parameter ( zero = 0.0e+0, one = 1.0e+0, two = 2.0e+0 )
120  INTEGER lv
121  parameter ( lv = 128 )
122  REAL twopi
123  parameter ( twopi = 6.2831853071795864769252867663e+0 )
124 * ..
125 * .. Local Scalars ..
126  INTEGER i, il, iv
127 * ..
128 * .. Local Arrays ..
129  REAL u( lv )
130 * ..
131 * .. Intrinsic Functions ..
132  INTRINSIC cmplx, exp, log, min, sqrt
133 * ..
134 * .. External Subroutines ..
135  EXTERNAL slaruv
136 * ..
137 * .. Executable Statements ..
138 *
139  DO 60 iv = 1, n, lv / 2
140  il = min( lv / 2, n-iv+1 )
141 *
142 * Call SLARUV to generate 2*IL real numbers from a uniform (0,1)
143 * distribution (2*IL <= LV)
144 *
145  CALL slaruv( iseed, 2*il, u )
146 *
147  IF( idist.EQ.1 ) THEN
148 *
149 * Copy generated numbers
150 *
151  DO 10 i = 1, il
152  x( iv+i-1 ) = cmplx( u( 2*i-1 ), u( 2*i ) )
153  10 CONTINUE
154  ELSE IF( idist.EQ.2 ) THEN
155 *
156 * Convert generated numbers to uniform (-1,1) distribution
157 *
158  DO 20 i = 1, il
159  x( iv+i-1 ) = cmplx( two*u( 2*i-1 )-one,
160  $ two*u( 2*i )-one )
161  20 CONTINUE
162  ELSE IF( idist.EQ.3 ) THEN
163 *
164 * Convert generated numbers to normal (0,1) distribution
165 *
166  DO 30 i = 1, il
167  x( iv+i-1 ) = sqrt( -two*log( u( 2*i-1 ) ) )*
168  $ exp( cmplx( zero, twopi*u( 2*i ) ) )
169  30 CONTINUE
170  ELSE IF( idist.EQ.4 ) THEN
171 *
172 * Convert generated numbers to complex numbers uniformly
173 * distributed on the unit disk
174 *
175  DO 40 i = 1, il
176  x( iv+i-1 ) = sqrt( u( 2*i-1 ) )*
177  $ exp( cmplx( zero, twopi*u( 2*i ) ) )
178  40 CONTINUE
179  ELSE IF( idist.EQ.5 ) THEN
180 *
181 * Convert generated numbers to complex numbers uniformly
182 * distributed on the unit circle
183 *
184  DO 50 i = 1, il
185  x( iv+i-1 ) = exp( cmplx( zero, twopi*u( 2*i ) ) )
186  50 CONTINUE
187  END IF
188  60 CONTINUE
189  RETURN
190 *
191 * End of CLARNV
192 *
subroutine slaruv(ISEED, N, X)
SLARUV returns a vector of n random real numbers from a uniform distribution.
Definition: slaruv.f:97

Here is the call graph for this function:

Here is the caller graph for this function: