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, MJ
170 COMPLEX*16 PIV, ALPHA
174 INTEGER IZAMAX, ILAENV
175 EXTERNAL lsame, ilaenv, izamax
182 INTRINSIC dble, dconjg, max
193 IF( lsame( uplo,
'U' ) )
THEN
200 IF ( j.GT.min(m, nb) )
229 CALL zlacgv( j-k1, a( 1, j ), 1 )
230 CALL zgemv(
'No transpose', mj, j-k1,
231 $ -one, h( j, k1 ), ldh,
233 $ one, h( j, j ), 1 )
234 CALL zlacgv( j-k1, a( 1, j ), 1 )
239 CALL zcopy( mj, h( j, j ), 1, work( 1 ), 1 )
246 alpha = -dconjg( a( k-1, j ) )
247 CALL zaxpy( mj, alpha, a( k-2, j ), lda, work( 1 ), 1 )
252 a( k, j ) = dble( work( 1 ) )
261 CALL zaxpy( m-j, alpha, a( k-1, j+1 ), lda,
267 i2 = izamax( m-j, work( 2 ), 1 ) + 1
272 IF( (i2.NE.2) .AND. (piv.NE.0) )
THEN
277 work( i2 ) = work( i1 )
284 CALL zswap( i2-i1-1, a( j1+i1-1, i1+1 ), lda,
285 $ a( j1+i1, i2 ), 1 )
286 CALL zlacgv( i2-i1, a( j1+i1-1, i1+1 ), lda )
287 CALL zlacgv( i2-i1-1, a( j1+i1, i2 ), 1 )
292 $
CALL zswap( m-i2, a( j1+i1-1, i2+1 ), lda,
293 $ a( j1+i2-1, i2+1 ), lda )
297 piv = a( i1+j1-1, i1 )
298 a( j1+i1-1, i1 ) = a( j1+i2-1, i2 )
299 a( j1+i2-1, i2 ) = piv
303 CALL zswap( i1-1, h( i1, 1 ), ldh, h( i2, 1 ), ldh )
306 IF( i1.GT.(k1-1) )
THEN
311 CALL zswap( i1-k1+1, a( 1, i1 ), 1,
320 a( k, j+1 ) = work( 2 )
326 CALL zcopy( m-j, a( k+1, j+1 ), lda,
333 IF( j.LT.(m-1) )
THEN
334 IF( a( k, j+1 ).NE.zero )
THEN
335 alpha = one / a( k, j+1 )
336 CALL zcopy( m-j-1, work( 3 ), 1, a( k, j+2 ), lda )
337 CALL zscal( m-j-1, alpha, a( k, j+2 ), lda )
339 CALL zlaset(
'Full', 1, m-j-1, zero, zero,
355 IF( j.GT.min( m, nb ) )
384 CALL zlacgv( j-k1, a( j, 1 ), lda )
385 CALL zgemv(
'No transpose', mj, j-k1,
386 $ -one, h( j, k1 ), ldh,
388 $ one, h( j, j ), 1 )
389 CALL zlacgv( j-k1, a( j, 1 ), lda )
394 CALL zcopy( mj, h( j, j ), 1, work( 1 ), 1 )
401 alpha = -dconjg( a( j, k-1 ) )
402 CALL zaxpy( mj, alpha, a( j, k-2 ), 1, work( 1 ), 1 )
407 a( j, k ) = dble( work( 1 ) )
416 CALL zaxpy( m-j, alpha, a( j+1, k-1 ), 1,
422 i2 = izamax( m-j, work( 2 ), 1 ) + 1
427 IF( (i2.NE.2) .AND. (piv.NE.0) )
THEN
432 work( i2 ) = work( i1 )
439 CALL zswap( i2-i1-1, a( i1+1, j1+i1-1 ), 1,
440 $ a( i2, j1+i1 ), lda )
441 CALL zlacgv( i2-i1, a( i1+1, j1+i1-1 ), 1 )
442 CALL zlacgv( i2-i1-1, a( i2, j1+i1 ), lda )
447 $
CALL zswap( m-i2, a( i2+1, j1+i1-1 ), 1,
448 $ a( i2+1, j1+i2-1 ), 1 )
452 piv = a( i1, j1+i1-1 )
453 a( i1, j1+i1-1 ) = a( i2, j1+i2-1 )
454 a( i2, j1+i2-1 ) = piv
458 CALL zswap( i1-1, h( i1, 1 ), ldh, h( i2, 1 ), ldh )
461 IF( i1.GT.(k1-1) )
THEN
466 CALL zswap( i1-k1+1, a( i1, 1 ), lda,
475 a( j+1, k ) = work( 2 )
481 CALL zcopy( m-j, a( j+1, k+1 ), 1,
488 IF( j.LT.(m-1) )
THEN
489 IF( a( j+1, k ).NE.zero )
THEN
490 alpha = one / a( j+1, k )
491 CALL zcopy( m-j-1, work( 3 ), 1, a( j+2, k ), 1 )
492 CALL zscal( m-j-1, alpha, a( j+2, k ), 1 )
494 CALL zlaset(
'Full', m-j-1, 1, zero, zero,