1 SUBROUTINE zlaror( SIDE, INIT, M, N, A, LDA, ISEED, X, INFO )
9 INTEGER info, lda, m, n
13 COMPLEX*16 a( lda, * ), x( * )
114 DOUBLE PRECISION zero, one, toosml
115 parameter( zero = 0.0d+0, one = 1.0d+0,
117 COMPLEX*16 czero, cone
118 parameter( czero = ( 0.0d+0, 0.0d+0 ),
119 $ cone = ( 1.0d+0, 0.0d+0 ) )
122 INTEGER irow,
itype, ixfrm, j, jcol, kbeg, nxfrm
123 DOUBLE PRECISION factor, xabs, xnorm
124 COMPLEX*16 csign, xnorms
128 DOUBLE PRECISION dznrm2
130 EXTERNAL lsame, dznrm2,
zlarnd
136 INTRINSIC abs, dcmplx, dconjg
140 IF( n.EQ.0 .OR. m.EQ.0 )
144 IF( lsame(
side,
'L' ) )
THEN
146 ELSE IF( lsame(
side,
'R' ) )
THEN
148 ELSE IF( lsame(
side,
'C' ) )
THEN
150 ELSE IF( lsame(
side,
'T' ) )
THEN
157 IF(
itype.EQ.0 )
THEN
159 ELSE IF( m.LT.0 )
THEN
161 ELSE IF( n.LT.0 .OR. (
itype.EQ.3 .AND. n.NE.m ) )
THEN
163 ELSE IF( lda.LT.m )
THEN
167 CALL
xerbla(
'ZLAROR', -info )
171 IF(
itype.EQ.1 )
THEN
179 IF( lsame( init,
'I' ) )
180 $ CALL
zlaset(
'Full', m, n, czero, cone, a, lda )
193 DO 30 ixfrm = 2, nxfrm
194 kbeg = nxfrm - ixfrm + 1
198 DO 20 j = kbeg, nxfrm
199 x( j ) =
zlarnd( 3, iseed )
204 xnorm = dznrm2( ixfrm, x( kbeg ), 1 )
205 xabs = abs( x( kbeg ) )
206 IF( xabs.NE.czero )
THEN
207 csign = x( kbeg ) / xabs
212 x( nxfrm+kbeg ) = -csign
213 factor = xnorm*( xnorm+xabs )
214 IF( abs(
factor ).LT.toosml )
THEN
216 CALL
xerbla(
'ZLAROR', -info )
221 x( kbeg ) = x( kbeg ) + xnorms
229 CALL zgemv(
'C', ixfrm, n, cone, a( kbeg, 1 ), lda,
230 $ x( kbeg ), 1, czero, x( 2*nxfrm+1 ), 1 )
231 CALL zgerc( ixfrm, n, -dcmplx(
factor ), x( kbeg ), 1,
232 $ x( 2*nxfrm+1 ), 1, a( kbeg, 1 ), lda )
240 IF(
itype.EQ.4 )
THEN
241 CALL zlacgv( ixfrm, x( kbeg ), 1 )
244 CALL zgemv(
'N', m, ixfrm, cone, a( 1, kbeg ), lda,
245 $ x( kbeg ), 1, czero, x( 2*nxfrm+1 ), 1 )
246 CALL zgerc( m, ixfrm, -dcmplx(
factor ), x( 2*nxfrm+1 ), 1,
247 $ x( kbeg ), 1, a( 1, kbeg ), lda )
252 x( 1 ) =
zlarnd( 3, iseed )
254 IF( xabs.NE.zero )
THEN
255 csign = x( 1 ) / xabs
265 CALL zscal( n, dconjg( x( nxfrm+irow ) ), a( irow, 1 ),
272 CALL zscal( m, x( nxfrm+jcol ), a( 1, jcol ), 1 )
276 IF(
itype.EQ.4 )
THEN
278 CALL zscal( m, dconjg( x( nxfrm+jcol ) ), a( 1, jcol ), 1 )