1 SUBROUTINE sdbtrf( M, N, KL, KU, AB, LDAB, INFO )
15 INTEGER INFO, KL, KU, LDAB, M, N
87 parameter( one = 1.0e+0 )
88 parameter( zero = 0.0e+0 )
90 parameter( nbmax = 64, ldwork = nbmax+1 )
93 INTEGER I, I2, I3, II, J, , J3, JB, JJ, JM, JP,
97 REAL WORK13( LDWORK, NBMAX ),
101 INTEGER ILAENV, ISAMAX
102 EXTERNAL ilaenv, isamax
122 ELSE IF( n.LT.0 )
THEN
124 ELSE IF( kl.LT.0 )
THEN
126 ELSE IF( ku.LT.0 )
THEN
128 ELSE IF( ldab.LT.
min(
min( kl+kv+1,m ),n ) )
THEN
132 CALL xerbla(
'SDBTRF', -info )
138 IF( m.EQ.0 .OR. n.EQ.0 )
143 nb = ilaenv( 1,
'SDBTRF',
' ', m, n, kl, ku )
148 nb =
min( nb, nbmax )
150 IF( nb.LE.1 .OR. nb.GT.kl )
THEN
154 CALL sdbtf2( m, n, kl, ku, ab, ldab, info )
163 work13( i, j ) = zero
171 work31( i, j ) = zero
180 DO 180 j = 1,
min( m, n ), nb
181 jb =
min( nb,
min( m, n )-j+1 )
195 i2 =
min( kl-jb, m-j-jb+1 )
196 i3 =
min( jb, m-j-kl+1 )
202 DO 80 jj = j, j + jb - 1
209 IF( ab( kv+jp, jj ).NE.zero )
THEN
210 ju =
max( ju,
min( jj+ku+jp-1, n ) )
214 CALL sscal( km, one / ab( kv+1, jj ), ab( kv+2, jj ),
221 jm =
min( ju, j+jb-1 )
223 CALL sger( km, jm-jj, -one, ab( kv+2, jj ), 1,
224 $ ab( kv, jj+1 ), ldab-1,
225 $ ab( kv+1, jj+1 ), ldab-1 )
231 nw =
min( jj-j+1, i3 )
233 $
CALL scopy( nw, ab( kv+kl+1-jj+j, jj ), 1,
234 $ work31( 1, jj-j+1 ), 1 )
240 j2 =
min( ju-j+1, kv ) - jb
241 j3 =
max( 0, ju-j-kv+1 )
249 CALL strsm(
'Left',
'Lower',
'No transpose',
'Unit',
250 $ jb, j2, one, ab( kv+1, j ), ldab-1,
251 $ ab( kv+1-jb, j+jb ), ldab-1 )
257 CALL sgemm(
'No transpose',
'No transpose', i2, j2,
258 $ jb, -one, ab( kv+1+jb, j ), ldab-1,
259 $ ab( kv+1-jb, j+jb ), ldab-1, one,
260 $ ab( kv+1, j+jb ), ldab-1 )
267 CALL sgemm(
'No transpose',
'No transpose', i3, j2,
268 $ jb, -one, work31, ldwork,
269 $ ab( kv+1-jb, j+jb ), ldab-1, one,
270 $ ab( kv+kl+1-jb, j+jb ), ldab-1 )
281 work13( ii, jj ) = ab( ii-jj+1, jj+j+kv-1 )
287 CALL strsm( 'left
', 'lower
', 'no transpose
', 'unit
',
288 $ JB, J3, ONE, AB( KV+1, J ), LDAB-1,
295 CALL SGEMM( 'no transpose
', 'no transpose
', I2, J3,
296 $ JB, -ONE, AB( KV+1+JB, J ), LDAB-1,
297 $ WORK13, LDWORK, ONE, AB( 1+JB, J+KV ),
305 CALL SGEMM( 'no transpose
', 'no transpose
', I3, J3,
306 $ JB, -ONE, WORK31, LDWORK, WORK13,
307 $ LDWORK, ONE, AB( 1+KL, J+KV ), LDAB-1 )
314 AB( II-JJ+1, JJ+J+KV-1 ) = WORK13( II, JJ )
323 DO 170 JJ = J + JB - 1, J, -1
327 NW = MIN( I3, JJ-J+1 )
329 $ CALL SCOPY( NW, WORK31( 1, JJ-J+1 ), 1,
330 $ AB( KV+KL+1-JJ+J, JJ ), 1 )
subroutine strsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
STRSM
subroutine sgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
SGEMM