161 SUBROUTINE sdrvpb( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX,
162 $ A, AFAC, ASAV, B, BSAV, X, XACT, S, WORK,
163 $ RWORK, IWORK, NOUT )
171 INTEGER NMAX, NN, NOUT, NRHS
176 INTEGER IWORK( * ), NVAL( * )
177 REAL A( * ), AFAC( * ), ASAV( * ), B( * ),
178 $ bsav( * ), rwork( * ), s( * ), work( * ),
186 PARAMETER ( ONE = 1.0e+0, zero = 0.0e+0 )
188 parameter( ntypes = 8, ntests = 6 )
193 LOGICAL EQUIL, NOFACT, PREFAC, ZEROT
194 CHARACTER DIST, EQUED, FACT, PACKIT,
TYPE, UPLO, XTYPE
196 INTEGER I, I1, I2, , IFACT, IKD, IMAT, IN, INFO,
197 $ ioff, iuplo, iw, izero, k, k1, kd, kl, koff,
198 $ ku, lda, ldab, mode, n, nb, nbmin, nerrs,
199 $ nfact, nfail, nimat, nkd, nrun, nt
200 REAL AINVNM, AMAX, ANORM, CNDNUM, RCOND, RCONDC,
204 CHARACTER EQUEDS( 2 ), FACTS( 3 )
205 INTEGER ISEED( 4 ), ISEEDY( 4 ), KDVAL( NBW )
206 REAL RESULT( NTESTS )
210 REAL SGET06, SLANGE, SLANSB
211 EXTERNAL lsame, sget06, slange, slansb
228 COMMON / infoc / infot, nunit, ok, lerr
229 COMMON / srnamc / srnamt
232 DATA iseedy / 1988, 1989, 1990, 1991 /
233 DATA facts /
'F',
'N',
'E' /
234 DATA equeds /
'N',
'Y' /
240 path( 1: 1 ) =
'Single precision'
246 iseed( i ) = iseedy( i )
252 $
CALL serrvx( path, nout )
272 nkd =
max( 1,
min( n, 4 ) )
277 kdval( 2 ) = n + ( n+1 ) / 4
278 kdval( 3 ) = ( 3*n-1 ) / 4
279 kdval( 4 ) = ( n+1 ) / 4
294 IF( iuplo.EQ.1 )
THEN
297 koff =
max( 1, kd+2-n )
303 DO 80 imat = 1, nimat
307 IF( .NOT.dotype( imat ) )
312 zerot = imat.GE.2 .AND. imat.LE.4
313 IF( zerot .AND. n.LT.imat-1 )
316 IF( .NOT.zerot .OR. .NOT.dotype( 1 ) )
THEN
321 CALL slatb4( path, imat, n, n,
TYPE, kl, ku, anorm,
322 $ mode, cndnum, dist )
325 CALL slatms( n, n, dist, iseed,
TYPE, rwork, mode,
326 $ cndnum, anorm, kd, kd, packit,
327 $ a( koff ), ldab, work, info )
332 CALL alaerh( path,
'SLATMS', info, 0, uplo, n,
333 $ n, -1, -1, -1, imat, nfail, nerrs,
337 ELSE IF( izero.GT.0 )
THEN
343 IF( iuplo.EQ.1 )
THEN
344 ioff = ( izero-1 )*ldab + kd + 1
345 CALL scopy( izero-i1, work( iw ), 1,
346 $ a( ioff-izero+i1 ), 1 )
348 CALL scopy( i2-izero+1, work( iw ), 1,
349 $ a( ioff ),
max( ldab-1, 1 ) )
351 ioff = ( i1-1 )*ldab + 1
352 CALL scopy( izero-i1, work( iw ), 1,
353 $ a( ioff+izero-i1 ),
355 ioff = ( izero-1 )*ldab + 1
357 CALL scopy( i2-izero+1, work( iw ), 1,
369 ELSE IF( imat.EQ.3 )
THEN
378 DO 20 i = 1,
min( 2*kd+1, n )
382 i1 =
max( izero-kd, 1 )
383 i2 =
min( izero+kd, n )
385 IF( iuplo.EQ.1 )
THEN
386 ioff = ( izero-1 )*ldab + kd + 1
387 CALL sswap( izero-i1, a( ioff-izero+i1 ), 1,
390 CALL sswap( i2-izero+1, a( ioff ),
391 $
max( ldab-1, 1 ), work( iw ), 1 )
393 ioff = ( i1-1 )*ldab + 1
394 CALL sswap( izero-i1, a( ioff+izero-i1 ),
395 $
max( ldab-1, 1 ), work( iw ), 1 )
396 ioff = ( izero-1 )*ldab + 1
398 CALL sswap( i2-izero+1, a( ioff ), 1,
405 CALL slacpy(
'Full', kd+1, n, a, ldab, asav, ldab )
408 equed = equeds( iequed )
409 IF( iequed.EQ.1 )
THEN
415 DO 60 ifact = 1, nfact
416 fact = facts( ifact )
417 prefac = lsame( fact, 'f
' )
418 NOFACT = LSAME( FACT, 'n
' )
419 EQUIL = LSAME( FACT, 'e
' )
426.NOT.
ELSE IF( LSAME( FACT, 'n
' ) ) THEN
433 CALL SLACPY( 'full
', KD+1, N, ASAV, LDAB,
435.OR..GT.
IF( EQUIL IEQUED1 ) THEN
440 CALL SPBEQU( UPLO, N, KD, AFAC, LDAB, S,
441 $ SCOND, AMAX, INFO )
442.EQ..AND..GT.
IF( INFO0 N0 ) THEN
448 CALL SLAQSB( UPLO, N, KD, AFAC, LDAB,
449 $ S, SCOND, AMAX, EQUED )
461 ANORM = SLANSB( '1
', UPLO, N, KD, AFAC, LDAB,
466 CALL SPBTRF( UPLO, N, KD, AFAC, LDAB, INFO )
470 CALL SLASET( 'full
', N, N, ZERO, ONE, A,
473 CALL SPBTRS( UPLO, N, KD, N, AFAC, LDAB, A,
478 AINVNM = SLANGE( '1
', N, N, A, LDA, RWORK )
479.LE..OR..LE.
IF( ANORMZERO AINVNMZERO ) THEN
482 RCONDC = ( ONE / ANORM ) / AINVNM
488 CALL SLACPY( 'full
', KD+1, N, ASAV, LDAB, A,
495 CALL SLARHS( PATH, XTYPE, UPLO, ' ', N, N, KD,
496 $ KD, NRHS, A, LDAB, XACT, LDA, B,
499 CALL SLACPY( 'full
', N, NRHS, B, LDA, BSAV,
509 CALL SLACPY( 'full
', KD+1, N, A, LDAB, AFAC,
511 CALL SLACPY( 'full
', N, NRHS, B, LDA, X,
515 CALL SPBSV( UPLO, N, KD, NRHS, AFAC, LDAB, X,
520.NE.
IF( INFOIZERO ) THEN
521 CALL ALAERH( PATH, 'spbsv ', INFO, IZERO,
522 $ UPLO, N, N, KD, KD, NRHS,
523 $ IMAT, NFAIL, NERRS, NOUT )
525.NE.
ELSE IF( INFO0 ) THEN
532 CALL SPBT01( UPLO, N, KD, A, LDAB, AFAC,
533 $ LDAB, RWORK, RESULT( 1 ) )
537 CALL SLACPY( 'full
', N, NRHS, B, LDA, WORK,
539 CALL SPBT02( UPLO, N, KD, NRHS, A, LDAB, X,
540 $ LDA, WORK, LDA, RWORK,
545 CALL SGET04( N, NRHS, X, LDA, XACT, LDA,
546 $ RCONDC, RESULT( 3 ) )
553.GE.
IF( RESULT( K )THRESH ) THEN
554.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
555 $ CALL ALADHD( NOUT, PATH )
556 WRITE( NOUT, FMT = 9999 )'spbsv ',
557 $ UPLO, N, KD, IMAT, K, RESULT( K )
568 $ CALL SLASET( 'full
', KD+1, N, ZERO, ZERO,
570 CALL SLASET( 'full
', N, NRHS, ZERO, ZERO, X,
572.GT..AND..GT.
IF( IEQUED1 N0 ) THEN
577 CALL SLAQSB( UPLO, N, KD, A, LDAB, S, SCOND,
585 CALL SPBSVX( FACT, UPLO, N, KD, NRHS, A, LDAB,
586 $ AFAC, LDAB, EQUED, S, B, LDA, X,
587 $ LDA, RCOND, RWORK, RWORK( NRHS+1 ),
588 $ WORK, IWORK, INFO )
592.NE.
IF( INFOIZERO ) THEN
593 CALL ALAERH( PATH, 'spbsvx', INFO, IZERO,
594 $ FACT // UPLO, N, N, KD, KD,
595 $ NRHS, IMAT, NFAIL, NERRS, NOUT )
600.NOT.
IF( PREFAC ) THEN
605 CALL SPBT01( UPLO, N, KD, A, LDAB, AFAC,
606 $ LDAB, RWORK( 2*NRHS+1 ),
615 CALL SLACPY( 'full
', N, NRHS, BSAV, LDA,
617 CALL SPBT02( UPLO, N, KD, NRHS, ASAV, LDAB,
619 $ RWORK( 2*NRHS+1 ), RESULT( 2 ) )
623.OR..AND.
IF( NOFACT ( PREFAC LSAME( EQUED,
625 CALL SGET04( N, NRHS, X, LDA, XACT, LDA,
626 $ RCONDC, RESULT( 3 ) )
628 CALL SGET04( N, NRHS, X, LDA, XACT, LDA,
629 $ ROLDC, RESULT( 3 ) )
635 CALL SPBT05( UPLO, N, KD, NRHS, ASAV, LDAB,
636 $ B, LDA, X, LDA, XACT, LDA,
637 $ RWORK, RWORK( NRHS+1 ),
646 RESULT( 6 ) = SGET06( RCOND, RCONDC )
652.GE.
IF( RESULT( K )THRESH ) THEN
653.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
654 $ CALL ALADHD( NOUT, PATH )
656 WRITE( NOUT, FMT = 9997 )'spbsvx',
657 $ FACT, UPLO, N, KD, EQUED, IMAT, K,
660 WRITE( NOUT, FMT = 9998 )'spbsvx',
661 $ FACT, UPLO, N, KD, IMAT, K,
677 CALL ALASVM( PATH, NOUT, NFAIL, NRUN, NERRS )
679 9999 FORMAT( 1X, A, ', uplo=
''', A1, ''', n =
', I5, ', kd =
', I5,
680 $ ',
type ', I1, ', test(
', I1, ')=
', G12.5 )
681 9998 FORMAT( 1X, A, '(
''', A1, ''',
''', A1, ''
', ', i5,
', ', i5,
682 $
', ... ), type ', i1,
', test(', i1,
')=', g12.5 )
683 9997
FORMAT( 1x, a,
'( ''', a1,
''', ''', a1,
''', ', i5,
', ', i5,
684 $
', ... ), EQUED=''', a1,
''',
type ', I1, ', test(
', I1,
subroutine slaset(uplo, m, n, alpha, beta, a, lda)
SLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine slacpy(uplo, m, n, a, lda, b, ldb)
SLACPY copies all or part of one two-dimensional array to another.
subroutine xlaenv(ispec, nvalue)
XLAENV
subroutine alasvm(type, nout, nfail, nrun, nerrs)
ALASVM
subroutine aladhd(iounit, path)
ALADHD
subroutine alaerh(path, subnam, info, infoe, opts, m, n, kl, ku, n5, imat, nfail, nerrs, nout)
ALAERH
subroutine slaqsb(uplo, n, kd, ab, ldab, s, scond, amax, equed)
SLAQSB scales a symmetric/Hermitian band matrix, using scaling factors computed by spbequ.
subroutine spbtrs(uplo, n, kd, nrhs, ab, ldab, b, ldb, info)
SPBTRS
subroutine spbequ(uplo, n, kd, ab, ldab, s, scond, amax, info)
SPBEQU
subroutine spbtrf(uplo, n, kd, ab, ldab, info)
SPBTRF
subroutine spbsv(uplo, n, kd, nrhs, ab, ldab, b, ldb, info)
SPBSV computes the solution to system of linear equations A * X = B for OTHER matrices
subroutine spbsvx(fact, uplo, n, kd, nrhs, ab, ldab, afb, ldafb, equed, s, b, ldb, x, ldx, rcond, ferr, berr, work, iwork, info)
SPBSVX computes the solution to system of linear equations A * X = B for OTHER matrices
subroutine slatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
SLATMS
subroutine scopy(n, sx, incx, sy, incy)
SCOPY
subroutine sswap(n, sx, incx, sy, incy)
SSWAP
subroutine slarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
SLARHS
subroutine serrvx(path, nunit)
SERRVX
subroutine spbt02(uplo, n, kd, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
SPBT02
subroutine sdrvpb(dotype, nn, nval, nrhs, thresh, tsterr, nmax, a, afac, asav, b, bsav, x, xact, s, work, rwork, iwork, nout)
SDRVPB
subroutine spbt01(uplo, n, kd, a, lda, afac, ldafac, rwork, resid)
SPBT01
subroutine sget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
SGET04
subroutine slatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
SLATB4
subroutine spbt05(uplo, n, kd, nrhs, ab, ldab, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
SPBT05