141 SUBROUTINE cpbtrf( UPLO, N, KD, AB, LDAB, INFO )
149 INTEGER INFO, KD, LDAB, N
152 COMPLEX AB( LDAB, * )
159 parameter( one = 1.0e+0, zero = 0.0e+0 )
161 parameter( cone = ( 1.0e+0, 0.0e+0 ) )
162 INTEGER NBMAX, LDWORK
163 parameter( nbmax = 32, ldwork = nbmax+1 )
166 INTEGER I, I2, I3, IB, II, J, JJ, NB
169 COMPLEX 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(
'CPBTRF', -info )
209 nb = ilaenv( 1,
'CPBTRF', uplo, n, kd, -1, -1 )
214 nb = min( nb, nbmax )
216 IF( nb.LE.1 .OR. nb.GT.kd )
THEN
220 CALL cpbtf2( uplo, n, kd, ab, ldab, info )
225 IF( lsame( uplo,
'U' ) )
THEN
242 ib = min( nb, n-i+1 )
246 CALL cpotf2( 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 ctrsm(
'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 cherk(
'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 ctrsm(
'Left',
'Upper',
'Conjugate transpose',
299 $
'Non-unit', ib, i3, cone,
300 $ ab( kd+1, i ), ldab-1, work, ldwork )
305 $
CALL cgemm(
'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 cherk(
'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 cpotf2( 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 ctrsm(
'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 cherk(
'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 ctrsm(
'Right',
'Lower',
401 $
'Conjugate transpose',
'Non-unit', i3,
402 $ ib, cone, ab( 1, i ), ldab-1, work,
408 $
CALL cgemm(
'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 cherk(
'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 cgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
CGEMM
subroutine cherk(uplo, trans, n, k, alpha, a, lda, beta, c, ldc)
CHERK
subroutine cpbtf2(uplo, n, kd, ab, ldab, info)
CPBTF2 computes the Cholesky factorization of a symmetric/Hermitian positive definite band matrix (un...
subroutine cpbtrf(uplo, n, kd, ab, ldab, info)
CPBTRF
subroutine cpotf2(uplo, n, a, lda, info)
CPOTF2 computes the Cholesky factorization of a symmetric/Hermitian positive definite matrix (unblock...
subroutine ctrsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
CTRSM