144 SUBROUTINE clahef_aa( UPLO, J1, M, NB, A, LDA, IPIV,
156 INTEGER M, NB, J1, LDA, LDH
160 COMPLEX A( lda, * ), H( ldh, * ), WORK( * )
166 parameter( zero = (0.0e+0, 0.0e+0), one = (1.0e+0, 0.0e+0) )
169 INTEGER J, K, K1, I1, I2
174 INTEGER ICAMAX, ILAENV
175 EXTERNAL lsame, ilaenv, icamax
181 INTRINSIC REAL, CONJG, MAX
192 IF( lsame( uplo,
'U' ) )
THEN 199 IF ( j.GT.min(m, nb) )
220 CALL clacgv( j-k1, a( 1, j ), 1 )
221 CALL cgemv(
'No transpose', m-j+1, j-k1,
222 $ -one, h( j, k1 ), ldh,
224 $ one, h( j, j ), 1 )
225 CALL clacgv( j-k1, a( 1, j ), 1 )
230 CALL ccopy( m-j+1, h( j, j ), 1, work( 1 ), 1 )
237 alpha = -conjg( a( k-1, j ) )
238 CALL caxpy( m-j+1, alpha, a( k-2, j ), lda, work( 1 ), 1 )
243 a( k, j ) =
REAL( WORK( 1 ) )
252 CALL caxpy( m-j, alpha, a( k-1, j+1 ), lda,
258 i2 = icamax( m-j, work( 2 ), 1 ) + 1
263 IF( (i2.NE.2) .AND. (piv.NE.0) )
THEN 268 work( i2 ) = work( i1 )
275 CALL cswap( i2-i1-1, a( j1+i1-1, i1+1 ), lda,
276 $ a( j1+i1, i2 ), 1 )
277 CALL clacgv( i2-i1, a( j1+i1-1, i1+1 ), lda )
278 CALL clacgv( i2-i1-1, a( j1+i1, i2 ), 1 )
282 CALL cswap( 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 cswap( i1-1, h( i1, 1 ), ldh, h( i2, 1 ), ldh )
296 IF( i1.GT.(k1-1) )
THEN 301 CALL cswap( i1-k1+1, a( 1, i1 ), 1,
310 a( k, j+1 ) = work( 2 )
316 CALL ccopy( 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 ccopy( m-j-1, work( 3 ), 1, a( k, j+2 ), lda )
326 CALL cscal( m-j-1, alpha, a( k, j+2 ), lda )
328 CALL claset(
'Full', 1, m-j-1, zero, zero,
343 IF( j.GT.min( m, nb ) )
364 CALL clacgv( j-k1, a( j, 1 ), lda )
365 CALL cgemv(
'No transpose', m-j+1, j-k1,
366 $ -one, h( j, k1 ), ldh,
368 $ one, h( j, j ), 1 )
369 CALL clacgv( j-k1, a( j, 1 ), lda )
374 CALL ccopy( m-j+1, h( j, j ), 1, work( 1 ), 1 )
381 alpha = -conjg( a( j, k-1 ) )
382 CALL caxpy( m-j+1, alpha, a( j, k-2 ), 1, work( 1 ), 1 )
387 a( j, k ) =
REAL( WORK( 1 ) )
396 CALL caxpy( m-j, alpha, a( j+1, k-1 ), 1,
402 i2 = icamax( m-j, work( 2 ), 1 ) + 1
407 IF( (i2.NE.2) .AND. (piv.NE.0) )
THEN 412 work( i2 ) = work( i1 )
419 CALL cswap( i2-i1-1, a( i1+1, j1+i1-1 ), 1,
420 $ a( i2, j1+i1 ), lda )
421 CALL clacgv( i2-i1, a( i1+1, j1+i1-1 ), 1 )
422 CALL clacgv( i2-i1-1, a( i2, j1+i1 ), lda )
426 CALL cswap( 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 cswap( i1-1, h( i1, 1 ), ldh, h( i2, 1 ), ldh )
440 IF( i1.GT.(k1-1) )
THEN 445 CALL cswap( i1-k1+1, a( i1, 1 ), lda,
454 a( j+1, k ) = work( 2 )
460 CALL ccopy( 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 ccopy( m-j-1, work( 3 ), 1, a( j+2, k ), 1 )
470 CALL cscal( m-j-1, alpha, a( j+2, k ), 1 )
472 CALL claset(
'Full', m-j-1, 1, zero, zero,
subroutine claset(UPLO, M, N, ALPHA, BETA, A, LDA)
CLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values...
subroutine cscal(N, CA, CX, INCX)
CSCAL
subroutine cgemv(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
CGEMV
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine clacgv(N, X, INCX)
CLACGV conjugates a complex vector.
subroutine ccopy(N, CX, INCX, CY, INCY)
CCOPY
subroutine cswap(N, CX, INCX, CY, INCY)
CSWAP
subroutine caxpy(N, CA, CX, INCX, CY, INCY)
CAXPY
subroutine clahef_aa(UPLO, J1, M, NB, A, LDA, IPIV, H, LDH, WORK)
CLAHEF_AA