LAPACK  3.10.0
LAPACK: Linear Algebra PACKage

◆ zlarnv()

subroutine zlarnv ( integer  IDIST,
integer, dimension( 4 )  ISEED,
integer  N,
complex*16, dimension( * )  X 
)

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

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

Purpose:
 ZLARNV 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*16 array, dimension (N)
          The generated random numbers.
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Further Details:
  This routine calls the auxiliary routine DLARUV 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 98 of file zlarnv.f.

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