Go to the documentation of this file.00001 COMPLEX FUNCTION CLARND( IDIST, ISEED )
00002 *
00003 * -- LAPACK auxiliary routine (version 3.1) --
00004 * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
00005 * November 2006
00006 *
00007 * .. Scalar Arguments ..
00008 INTEGER IDIST
00009 * ..
00010 * .. Array Arguments ..
00011 INTEGER ISEED( 4 )
00012 * ..
00013 *
00014 * Purpose
00015 * =======
00016 *
00017 * CLARND returns a random complex number from a uniform or normal
00018 * distribution.
00019 *
00020 * Arguments
00021 * =========
00022 *
00023 * IDIST (input) INTEGER
00024 * Specifies the distribution of the random numbers:
00025 * = 1: real and imaginary parts each uniform (0,1)
00026 * = 2: real and imaginary parts each uniform (-1,1)
00027 * = 3: real and imaginary parts each normal (0,1)
00028 * = 4: uniformly distributed on the disc abs(z) <= 1
00029 * = 5: uniformly distributed on the circle abs(z) = 1
00030 *
00031 * ISEED (input/output) INTEGER array, dimension (4)
00032 * On entry, the seed of the random number generator; the array
00033 * elements must be between 0 and 4095, and ISEED(4) must be
00034 * odd.
00035 * On exit, the seed is updated.
00036 *
00037 * Further Details
00038 * ===============
00039 *
00040 * This routine calls the auxiliary routine SLARAN to generate a random
00041 * real number from a uniform (0,1) distribution. The Box-Muller method
00042 * is used to transform numbers from a uniform to a normal distribution.
00043 *
00044 * =====================================================================
00045 *
00046 * .. Parameters ..
00047 REAL ZERO, ONE, TWO
00048 PARAMETER ( ZERO = 0.0E+0, ONE = 1.0E+0, TWO = 2.0E+0 )
00049 REAL TWOPI
00050 PARAMETER ( TWOPI = 6.2831853071795864769252867663E+0 )
00051 * ..
00052 * .. Local Scalars ..
00053 REAL T1, T2
00054 * ..
00055 * .. External Functions ..
00056 REAL SLARAN
00057 EXTERNAL SLARAN
00058 * ..
00059 * .. Intrinsic Functions ..
00060 INTRINSIC CMPLX, EXP, LOG, SQRT
00061 * ..
00062 * .. Executable Statements ..
00063 *
00064 * Generate a pair of real random numbers from a uniform (0,1)
00065 * distribution
00066 *
00067 T1 = SLARAN( ISEED )
00068 T2 = SLARAN( ISEED )
00069 *
00070 IF( IDIST.EQ.1 ) THEN
00071 *
00072 * real and imaginary parts each uniform (0,1)
00073 *
00074 CLARND = CMPLX( T1, T2 )
00075 ELSE IF( IDIST.EQ.2 ) THEN
00076 *
00077 * real and imaginary parts each uniform (-1,1)
00078 *
00079 CLARND = CMPLX( TWO*T1-ONE, TWO*T2-ONE )
00080 ELSE IF( IDIST.EQ.3 ) THEN
00081 *
00082 * real and imaginary parts each normal (0,1)
00083 *
00084 CLARND = SQRT( -TWO*LOG( T1 ) )*EXP( CMPLX( ZERO, TWOPI*T2 ) )
00085 ELSE IF( IDIST.EQ.4 ) THEN
00086 *
00087 * uniform distribution on the unit disc abs(z) <= 1
00088 *
00089 CLARND = SQRT( T1 )*EXP( CMPLX( ZERO, TWOPI*T2 ) )
00090 ELSE IF( IDIST.EQ.5 ) THEN
00091 *
00092 * uniform distribution on the unit circle abs(z) = 1
00093 *
00094 CLARND = EXP( CMPLX( ZERO, TWOPI*T2 ) )
00095 END IF
00096 RETURN
00097 *
00098 * End of CLARND
00099 *
00100 END