141 SUBROUTINE dpbtrf( UPLO, N, KD, AB, LDAB, INFO )
149 INTEGER INFO, KD, LDAB, N
152 DOUBLE PRECISION AB( LDAB, * )
158 DOUBLE PRECISION ONE, ZERO
159 parameter( one = 1.0d+0, zero = 0.0d+0 )
160 INTEGER NBMAX, LDWORK
161 parameter( nbmax = 32, ldwork = nbmax+1 )
164 INTEGER I, I2, I3, IB, II, J, JJ, NB
167 DOUBLE PRECISION WORK( LDWORK, NBMAX )
172 EXTERNAL lsame, ilaenv
185 IF( ( .NOT.lsame( uplo,
'U' ) ) .AND.
186 $ ( .NOT.lsame( uplo,
'L' ) ) )
THEN
188 ELSE IF( n.LT.0 )
THEN
190 ELSE IF( kd.LT.0 )
THEN
192 ELSE IF( ldab.LT.kd+1 )
THEN
196 CALL xerbla(
'DPBTRF', -info )
207 nb = ilaenv( 1,
'DPBTRF', uplo, n, kd, -1, -1 )
212 nb =
min( nb, nbmax )
214 IF( nb.LE.1 .OR. nb.GT.kd )
THEN
218 CALL dpbtf2( uplo, n, kd, ab, ldab, info )
223 IF( lsame( uplo,
'U' ) )
THEN
240 ib =
min( nb, n-i+1 )
244 CALL dpotf2( uplo, ib, ab( kd+1, i ), ldab-1, ii )
265 i2 =
min( kd-ib, n-i-ib+1 )
266 i3 =
min( ib, n-i-kd+1 )
272 CALL dtrsm(
'Left',
'Upper',
'Transpose',
273 $
'Non-unit', ib, i2, one, ab( kd+1, i ),
274 $ ldab-1, ab( kd+1-ib, i+ib ), ldab-1 )
278 CALL dsyrk(
'Upper',
'Transpose', i2, ib, -one,
279 $ ab( kd+1-ib, i+ib ), ldab-1, one,
280 $ ab( kd+1, i+ib ), ldab-1 )
289 work( ii, jj ) = ab( ii-jj+1, jj+i+kd-1 )
295 CALL dtrsm(
'Left',
'Upper',
'Transpose',
296 $
'Non-unit', ib, i3, one, ab( kd+1, i ),
297 $ ldab-1, work, ldwork )
302 $
CALL dgemm(
'Transpose',
'No Transpose', i2, i3,
303 $ ib, -one, ab( kd+1-ib, i+ib ),
304 $ ldab-1, work, ldwork, one,
305 $ ab( 1+ib, i+kd ), ldab-1 )
309 CALL dsyrk(
'Upper',
'Transpose', i3, ib, -one,
310 $ work, ldwork, one, ab( kd+1, i+kd ),
317 ab( ii-jj+1, jj+i+kd-1 ) = work( ii, jj )
340 ib =
min( nb, n-i+1 )
344 CALL dpotf2( uplo, ib, ab( 1, i ), ldab-1, ii )
365 i2 =
min( kd-ib, n-i-ib+1 )
366 i3 =
min( ib, n-i-kd+1 )
372 CALL dtrsm(
'Right',
'Lower',
'Transpose',
373 $
'Non-unit', i2, ib, one, ab( 1, i ),
374 $ ldab-1, ab( 1+ib, i ), ldab-1 )
378 CALL dsyrk(
'Lower',
'No Transpose', i2, ib, -one,
379 $ ab( 1+ib, i ), ldab-1, one,
380 $ ab( 1, i+ib ), ldab-1 )
388 DO 100 ii = 1,
min( jj, i3 )
389 work( ii, jj ) = ab( kd+1-jj+ii, jj+i-1 )
395 CALL dtrsm(
'Right', 'lower
', 'transpose
',
396 $ 'non-unit
', I3, IB, ONE, AB( 1, I ),
397 $ LDAB-1, WORK, LDWORK )
402 $ CALL DGEMM( 'no transpose
', 'transpose
', I3, I2,
403 $ IB, -ONE, WORK, LDWORK,
404 $ AB( 1+IB, I ), LDAB-1, ONE,
405 $ AB( 1+KD-IB, I+IB ), LDAB-1 )
409 CALL DSYRK( 'lower
', 'no transpose
', I3, IB, -ONE,
410 $ WORK, LDWORK, ONE, AB( 1, I+KD ),
416 DO 120 II = 1, MIN( JJ, I3 )
417 AB( KD+1-JJ+II, JJ+I-1 ) = WORK( II, JJ )
subroutine dgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
DGEMM
subroutine dtrsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
DTRSM