3 * =========== DOCUMENTATION ===========
5 * Online html documentation available at
6 * http://www.netlib.org/lapack/explore-html/
11 * SUBROUTINE CLARGE( N, A, LDA, ISEED, WORK, INFO )
13 * .. Scalar Arguments ..
14 * INTEGER INFO, LDA, N
16 * .. Array Arguments ..
18 * COMPLEX A( LDA, * ), WORK( * )
27 *> CLARGE pre- and post-multiplies a complex general n by n matrix A
28 *> with a random unitary matrix: A = U*D*U'.
37 *> The order of the matrix A. N >= 0.
42 *> A is COMPLEX array, dimension (LDA,N)
43 *> On entry, the original n by n matrix A.
44 *> On exit, A is overwritten by U*A*U' for some random
51 *> The leading dimension of the array A. LDA >= N.
54 *> \param[in,out] ISEED
56 *> ISEED is INTEGER array, dimension (4)
57 *> On entry, the seed of the random number generator; the array
58 *> elements must be between 0 and 4095, and ISEED(4) must be
60 *> On exit, the seed is updated.
65 *> WORK is COMPLEX array, dimension (2*N)
71 *> = 0: successful exit
72 *> < 0: if INFO = -i, the i-th argument had an illegal value
78 *> \author Univ. of Tennessee
79 *> \author Univ. of California Berkeley
80 *> \author Univ. of Colorado Denver
83 *> \date November 2011
85 *> \ingroup complex_matgen
87 * =====================================================================
88 SUBROUTINE CLARGE( N, A, LDA, ISEED, WORK, INFO )
90 * -- LAPACK auxiliary routine (version 3.4.0) --
91 * -- LAPACK is a software package provided by Univ. of Tennessee, --
92 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
95 * .. Scalar Arguments ..
98 * .. Array Arguments ..
100 COMPLEX A( LDA, * ), WORK( * )
103 * =====================================================================
107 PARAMETER ( ZERO = ( 0.0E+0, 0.0E+0 ),
108 $ ONE = ( 1.0E+0, 0.0E+0 ) )
110 * .. Local Scalars ..
115 * .. External Subroutines ..
116 EXTERNAL CGEMV, CGERC, CLARNV, CSCAL, XERBLA
118 * .. Intrinsic Functions ..
119 INTRINSIC ABS, MAX, REAL
121 * .. External Functions ..
125 * .. Executable Statements ..
127 * Test the input arguments
132 ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
136 CALL XERBLA( 'CLARGE', -INFO )
140 * pre- and post-multiply A by random unitary matrix
144 * generate random reflection
146 CALL CLARNV( 3, ISEED, N-I+1, WORK )
147 WN = SCNRM2( N-I+1, WORK, 1 )
148 WA = ( WN / ABS( WORK( 1 ) ) )*WORK( 1 )
149 IF( WN.EQ.ZERO ) THEN
153 CALL CSCAL( N-I, ONE / WB, WORK( 2 ), 1 )
155 TAU = REAL( WB / WA )
158 * multiply A(i:n,1:n) by random reflection from the left
160 CALL CGEMV( 'Conjugate transpose', N-I+1, N, ONE, A( I, 1 ),
161 $ LDA, WORK, 1, ZERO, WORK( N+1 ), 1 )
162 CALL CGERC( N-I+1, N, -TAU, WORK, 1, WORK( N+1 ), 1, A( I, 1 ),
165 * multiply A(1:n,i:n) by random reflection from the right
167 CALL CGEMV( 'No transpose', N, N-I+1, ONE, A( 1, I ), LDA,
168 $ WORK, 1, ZERO, WORK( N+1 ), 1 )
169 CALL CGERC( N, N-I+1, -TAU, WORK( N+1 ), 1, WORK, 1, A( 1, I ),