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 )