141 SUBROUTINE zpbtrf( UPLO, N, KD, AB, LDAB, INFO )
149 INTEGER INFO, KD, LDAB, N
152 COMPLEX*16 AB( LDAB, * )
158 DOUBLE PRECISION ONE, ZERO
159 parameter( one = 1.0d+0, zero = 0.0d+0 )
161 parameter( cone = ( 1.0d+0, 0.0d+0 ) )
162 INTEGER NBMAX, LDWORK
163 parameter( nbmax = 32, ldwork = nbmax+1 )
166 INTEGER I, I2, I3, IB, II, J, JJ, NB
169 COMPLEX*16 WORK( LDWORK, NBMAX )
174 EXTERNAL lsame, ilaenv
187 IF( ( .NOT.lsame( uplo,
'U' ) ) .AND.
188 $ ( .NOT.lsame( uplo,
'L' ) ) )
THEN
190 ELSE IF( n.LT.0 )
THEN
192 ELSE IF( kd.LT.0 )
THEN
194 ELSE IF( ldab.LT.kd+1 )
THEN
198 CALL xerbla(
'ZPBTRF', -info )
209 nb = ilaenv( 1,
'ZPBTRF', uplo, n, kd, -1, -1 )
214 nb = min( nb, nbmax )
216 IF( nb.LE.1 .OR. nb.GT.kd )
THEN
220 CALL zpbtf2( uplo, n, kd, ab, ldab, info )
225 IF( lsame( uplo,
'U' ) )
THEN
242 ib = min( nb, n-i+1 )
246 CALL zpotf2( uplo, ib, ab( kd+1, i ), ldab-1, ii )
267 i2 = min( kd-ib, n-i-ib+1 )
268 i3 = min( ib, n-i-kd+1 )
274 CALL ztrsm(
'Left',
'Upper',
'Conjugate transpose',
275 $
'Non-unit', ib, i2, cone,
276 $ ab( kd+1, i ), ldab-1,
277 $ ab( kd+1-ib, i+ib ), ldab-1 )
281 CALL zherk(
'Upper',
'Conjugate transpose', i2, ib,
282 $ -one, ab( kd+1-ib, i+ib ), ldab-1, one,
283 $ ab( kd+1, i+ib ), ldab-1 )
292 work( ii, jj ) = ab( ii-jj+1, jj+i+kd-1 )
298 CALL ztrsm(
'Left',
'Upper',
'Conjugate transpose',
299 $
'Non-unit', ib, i3, cone,
300 $ ab( kd+1, i ), ldab-1, work, ldwork )
305 $
CALL zgemm(
'Conjugate transpose',
306 $
'No transpose', i2, i3, ib, -cone,
307 $ ab( kd+1-ib, i+ib ), ldab-1, work,
308 $ ldwork, cone, ab( 1+ib, i+kd ),
313 CALL zherk(
'Upper',
'Conjugate transpose', i3, ib,
314 $ -one, work, ldwork, one,
315 $ ab( kd+1, i+kd ), ldab-1 )
321 ab( ii-jj+1, jj+i+kd-1 ) = work( ii, jj )
344 ib = min( nb, n-i+1 )
348 CALL zpotf2( uplo, ib, ab( 1, i ), ldab-1, ii )
369 i2 = min( kd-ib, n-i-ib+1 )
370 i3 = min( ib, n-i-kd+1 )
376 CALL ztrsm(
'Right',
'Lower',
377 $
'Conjugate transpose',
'Non-unit', i2,
378 $ ib, cone, ab( 1, i ), ldab-1,
379 $ ab( 1+ib, i ), ldab-1 )
383 CALL zherk(
'Lower',
'No transpose', i2, ib, -one,
384 $ ab( 1+ib, i ), ldab-1, one,
385 $ ab( 1, i+ib ), ldab-1 )
393 DO 100 ii = 1, min( jj, i3 )
394 work( ii, jj ) = ab( kd+1-jj+ii, jj+i-1 )
400 CALL ztrsm(
'Right',
'Lower',
401 $
'Conjugate transpose',
'Non-unit', i3,
402 $ ib, cone, ab( 1, i ), ldab-1, work,
408 $
CALL zgemm(
'No transpose',
409 $
'Conjugate transpose', i3, i2, ib,
410 $ -cone, work, ldwork, ab( 1+ib, i ),
411 $ ldab-1, cone, ab( 1+kd-ib, i+ib ),
416 CALL zherk(
'Lower',
'No transpose', i3, ib, -one,
417 $ work, ldwork, one, ab( 1, i+kd ),
423 DO 120 ii = 1, min( jj, i3 )
424 ab( kd+1-jj+ii, jj+i-1 ) = work( ii, jj )
subroutine xerbla(srname, info)
subroutine zgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
ZGEMM
subroutine zherk(uplo, trans, n, k, alpha, a, lda, beta, c, ldc)
ZHERK
subroutine zpbtf2(uplo, n, kd, ab, ldab, info)
ZPBTF2 computes the Cholesky factorization of a symmetric/Hermitian positive definite band matrix (un...
subroutine zpbtrf(uplo, n, kd, ab, ldab, info)
ZPBTRF
subroutine zpotf2(uplo, n, a, lda, info)
ZPOTF2 computes the Cholesky factorization of a symmetric/Hermitian positive definite matrix (unblock...
subroutine ztrsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
ZTRSM