144 SUBROUTINE zlahef_aa( UPLO, J1, M, NB, A, LDA, IPIV,
156 INTEGER M, NB, J1, LDA, LDH
160 COMPLEX*16 A( lda, * ), H( ldh, * ), WORK( * )
166 parameter( zero = (0.0d+0, 0.0d+0), one = (1.0d+0, 0.0d+0) )
169 INTEGER J, K, K1, I1, I2
170 COMPLEX*16 PIV, ALPHA
174 INTEGER IZAMAX, ILAENV
175 EXTERNAL lsame, ilaenv, izamax
181 INTRINSIC dble, dconjg, max
192 IF( lsame( uplo,
'U' ) )
THEN 199 IF ( j.GT.min(m, nb) )
220 CALL zlacgv( j-k1, a( 1, j ), 1 )
221 CALL zgemv(
'No transpose', m-j+1, j-k1,
222 $ -one, h( j, k1 ), ldh,
224 $ one, h( j, j ), 1 )
225 CALL zlacgv( j-k1, a( 1, j ), 1 )
230 CALL zcopy( m-j+1, h( j, j ), 1, work( 1 ), 1 )
237 alpha = -dconjg( a( k-1, j ) )
238 CALL zaxpy( m-j+1, alpha, a( k-2, j ), lda, work( 1 ), 1 )
243 a( k, j ) = dble( work( 1 ) )
252 CALL zaxpy( m-j, alpha, a( k-1, j+1 ), lda,
258 i2 = izamax( m-j, work( 2 ), 1 ) + 1
263 IF( (i2.NE.2) .AND. (piv.NE.0) )
THEN 268 work( i2 ) = work( i1 )
275 CALL zswap( i2-i1-1, a( j1+i1-1, i1+1 ), lda,
276 $ a( j1+i1, i2 ), 1 )
277 CALL zlacgv( i2-i1, a( j1+i1-1, i1+1 ), lda )
278 CALL zlacgv( i2-i1-1, a( j1+i1, i2 ), 1 )
282 CALL zswap( m-i2, a( j1+i1-1, i2+1 ), lda,
283 $ a( j1+i2-1, i2+1 ), lda )
287 piv = a( i1+j1-1, i1 )
288 a( j1+i1-1, i1 ) = a( j1+i2-1, i2 )
289 a( j1+i2-1, i2 ) = piv
293 CALL zswap( i1-1, h( i1, 1 ), ldh, h( i2, 1 ), ldh )
296 IF( i1.GT.(k1-1) )
THEN 301 CALL zswap( i1-k1+1, a( 1, i1 ), 1,
310 a( k, j+1 ) = work( 2 )
316 CALL zcopy( m-j, a( k+1, j+1 ), lda,
323 IF( a( k, j+1 ).NE.zero )
THEN 324 alpha = one / a( k, j+1 )
325 CALL zcopy( m-j-1, work( 3 ), 1, a( k, j+2 ), lda )
326 CALL zscal( m-j-1, alpha, a( k, j+2 ), lda )
328 CALL zlaset(
'Full', 1, m-j-1, zero, zero,
343 IF( j.GT.min( m, nb ) )
364 CALL zlacgv( j-k1, a( j, 1 ), lda )
365 CALL zgemv(
'No transpose', m-j+1, j-k1,
366 $ -one, h( j, k1 ), ldh,
368 $ one, h( j, j ), 1 )
369 CALL zlacgv( j-k1, a( j, 1 ), lda )
374 CALL zcopy( m-j+1, h( j, j ), 1, work( 1 ), 1 )
381 alpha = -dconjg( a( j, k-1 ) )
382 CALL zaxpy( m-j+1, alpha, a( j, k-2 ), 1, work( 1 ), 1 )
387 a( j, k ) = dble( work( 1 ) )
396 CALL zaxpy( m-j, alpha, a( j+1, k-1 ), 1,
402 i2 = izamax( m-j, work( 2 ), 1 ) + 1
407 IF( (i2.NE.2) .AND. (piv.NE.0) )
THEN 412 work( i2 ) = work( i1 )
419 CALL zswap( i2-i1-1, a( i1+1, j1+i1-1 ), 1,
420 $ a( i2, j1+i1 ), lda )
421 CALL zlacgv( i2-i1, a( i1+1, j1+i1-1 ), 1 )
422 CALL zlacgv( i2-i1-1, a( i2, j1+i1 ), lda )
426 CALL zswap( m-i2, a( i2+1, j1+i1-1 ), 1,
427 $ a( i2+1, j1+i2-1 ), 1 )
431 piv = a( i1, j1+i1-1 )
432 a( i1, j1+i1-1 ) = a( i2, j1+i2-1 )
433 a( i2, j1+i2-1 ) = piv
437 CALL zswap( i1-1, h( i1, 1 ), ldh, h( i2, 1 ), ldh )
440 IF( i1.GT.(k1-1) )
THEN 445 CALL zswap( i1-k1+1, a( i1, 1 ), lda,
454 a( j+1, k ) = work( 2 )
460 CALL zcopy( m-j, a( j+1, k+1 ), 1,
467 IF( a( j+1, k ).NE.zero )
THEN 468 alpha = one / a( j+1, k )
469 CALL zcopy( m-j-1, work( 3 ), 1, a( j+2, k ), 1 )
470 CALL zscal( m-j-1, alpha, a( j+2, k ), 1 )
472 CALL zlaset(
'Full', m-j-1, 1, zero, zero,
subroutine zlahef_aa(UPLO, J1, M, NB, A, LDA, IPIV, H, LDH, WORK)
ZLAHEF_AA
subroutine zcopy(N, ZX, INCX, ZY, INCY)
ZCOPY
subroutine zgemv(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
ZGEMV
subroutine zswap(N, ZX, INCX, ZY, INCY)
ZSWAP
subroutine xerbla(SRNAME, INFO)
XERBLA
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 zlacgv(N, X, INCX)
ZLACGV conjugates a complex vector.
subroutine zaxpy(N, ZA, ZX, INCX, ZY, INCY)
ZAXPY
subroutine zscal(N, ZA, ZX, INCX)
ZSCAL