157 SUBROUTINE zlaror( SIDE, INIT, M, N, A, LDA, ISEED, X, INFO )
165 INTEGER INFO, LDA, M, N
169 COMPLEX*16 A( LDA, * ), X( * )
175 DOUBLE PRECISION ZERO, ONE, TOOSML
176 parameter( zero = 0.0d+0, one = 1.0d+0,
178 COMPLEX*16 CZERO, CONE
179 parameter( czero = ( 0.0d+0, 0.0d+0 ),
180 $ cone = ( 1.0d+0, 0.0d+0 ) )
183 INTEGER IROW, ITYPE, IXFRM, J, JCOL, KBEG, NXFRM
184 DOUBLE PRECISION FACTOR, XABS, XNORM
185 COMPLEX*16 CSIGN, XNORMS
189 DOUBLE PRECISION DZNRM2
191 EXTERNAL lsame, dznrm2, zlarnd
197 INTRINSIC abs, dcmplx, dconjg
202 IF( n.EQ.0 .OR. m.EQ.0 )
206 IF( lsame( side,
'L' ) )
THEN
208 ELSE IF( lsame( side, 'r
' ) ) THEN
210 ELSE IF( LSAME( SIDE, 'c
' ) ) THEN
212 ELSE IF( LSAME( SIDE, 't
' ) ) THEN
218.EQ.
IF( ITYPE0 ) THEN
220.LT.
ELSE IF( M0 ) THEN
222.LT..OR..EQ..AND..NE.
ELSE IF( N0 ( ITYPE3 NM ) ) THEN
224.LT.
ELSE IF( LDAM ) THEN
228 CALL XERBLA( 'zlaror', -INFO )
232.EQ.
IF( ITYPE1 ) THEN
240 IF( LSAME( INIT, 'i
' ) )
241 $ CALL ZLASET( 'full
', M, N, CZERO, CONE, A, LDA )
254 DO 30 IXFRM = 2, NXFRM
255 KBEG = NXFRM - IXFRM + 1
259 DO 20 J = KBEG, NXFRM
260 X( J ) = ZLARND( 3, ISEED )
265 XNORM = DZNRM2( IXFRM, X( KBEG ), 1 )
266 XABS = ABS( X( KBEG ) )
267.NE.
IF( XABSCZERO ) THEN
268 CSIGN = X( KBEG ) / XABS
273 X( NXFRM+KBEG ) = -CSIGN
274 FACTOR = XNORM*( XNORM+XABS )
275.LT.
IF( ABS( FACTOR )TOOSML ) THEN
277 CALL XERBLA( 'zlaror', -INFO )
280 FACTOR = ONE / FACTOR
282 X( KBEG ) = X( KBEG ) + XNORMS
286.EQ..OR..EQ..OR..EQ.
IF( ITYPE1 ITYPE3 ITYPE4 ) THEN
290 CALL ZGEMV( 'c
', IXFRM, N, CONE, A( KBEG, 1 ), LDA,
291 $ X( KBEG ), 1, CZERO, X( 2*NXFRM+1 ), 1 )
292 CALL ZGERC( IXFRM, N, -DCMPLX( FACTOR ), X( KBEG ), 1,
293 $ X( 2*NXFRM+1 ), 1, A( KBEG, 1 ), LDA )
297.GE..AND..LE.
IF( ITYPE2 ITYPE4 ) THEN
301.EQ.
IF( ITYPE4 ) THEN
302 CALL ZLACGV( IXFRM, X( KBEG ), 1 )
305 CALL ZGEMV( 'n
', M, IXFRM, CONE, A( 1, KBEG ), LDA,
306 $ X( KBEG ), 1, CZERO, X( 2*NXFRM+1 ), 1 )
307 CALL ZGERC( M, IXFRM, -DCMPLX( FACTOR ), X( 2*NXFRM+1 ), 1,
308 $ X( KBEG ), 1, A( 1, KBEG ), LDA )
313 X( 1 ) = ZLARND( 3, ISEED )
315.NE.
IF( XABSZERO ) THEN
316 CSIGN = X( 1 ) / XABS
324.EQ..OR..EQ..OR..EQ.
IF( ITYPE1 ITYPE3 ITYPE4 ) THEN
326 CALL ZSCAL( N, DCONJG( X( NXFRM+IROW ) ), A( IROW, 1 ),
331.EQ..OR..EQ.
IF( ITYPE2 ITYPE3 ) THEN
333 CALL ZSCAL( M, X( NXFRM+JCOL ), A( 1, JCOL ), 1 )
337.EQ.
IF( ITYPE4 ) THEN
339 CALL ZSCAL( M, DCONJG( X( NXFRM+JCOL ) ), A( 1, JCOL ), 1 )
subroutine xerbla(srname, info)
XERBLA
subroutine zlacgv(n, x, incx)
ZLACGV conjugates a complex vector.
subroutine zlaset(uplo, m, n, alpha, beta, a, lda)
ZLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine zscal(n, za, zx, incx)
ZSCAL
subroutine zgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
ZGEMV
subroutine zgerc(m, n, alpha, x, incx, y, incy, a, lda)
ZGERC
subroutine zlaror(side, init, m, n, a, lda, iseed, x, info)
ZLAROR