175
176
177
178
179
180
181 LOGICAL TSTERR
182 INTEGER LA, LAFB, NN, NOUT, NRHS
183 REAL THRESH
184
185
186 LOGICAL DOTYPE( * )
187 INTEGER IWORK( * ), NVAL( * )
188 REAL A( * ), AFB( * ), ASAV( * ), B( * ), BSAV( * ),
189 $ RWORK( * ), S( * ), WORK( * ), X( * ),
190 $ XACT( * )
191
192
193
194
195
196 REAL ONE, ZERO
197 parameter( one = 1.0e+0, zero = 0.0e+0 )
198 INTEGER NTYPES
199 parameter( ntypes = 8 )
200 INTEGER NTESTS
201 parameter( ntests = 7 )
202 INTEGER NTRAN
203 parameter( ntran = 3 )
204
205
206 LOGICAL EQUIL, NOFACT, PREFAC, TRFCON, ZEROT
207 CHARACTER DIST, EQUED, FACT, TRANS, TYPE, XTYPE
208 CHARACTER*3 PATH
209 INTEGER I, I1, I2, IEQUED, IFACT, IKL, IKU, IMAT, IN,
210 $ INFO, IOFF, ITRAN, IZERO, J, K, K1, KL, KU,
211 $ LDA, LDAFB, LDB, MODE, N, NB, NBMIN, NERRS,
212 $ NFACT, NFAIL, NIMAT, NKL, NKU, NRUN, NT,
213 $ N_ERR_BNDS
214 REAL AINVNM, AMAX, ANORM, ANORMI, ANORMO, ANRMPV,
215 $ CNDNUM, COLCND, RCOND, RCONDC, RCONDI, RCONDO,
216 $ ROLDC, ROLDI, ROLDO, ROWCND, RPVGRW,
217 $ RPVGRW_SVXX
218
219
220 CHARACTER EQUEDS( 4 ), FACTS( 3 ), TRANSS( NTRAN )
221 INTEGER ISEED( 4 ), ISEEDY( 4 )
222 REAL RESULT( NTESTS ), BERR( NRHS ),
223 $ ERRBNDS_N( NRHS, 3 ), ERRBNDS_C( NRHS, 3 )
224
225
226 LOGICAL LSAME
227 REAL SGET06, SLAMCH, SLANGB, SLANGE, SLANTB,
228 $ SLA_GBRPVGRW
231
232
237
238
239 INTRINSIC abs, max, min
240
241
242 LOGICAL LERR, OK
243 CHARACTER*32 SRNAMT
244 INTEGER INFOT, NUNIT
245
246
247 COMMON / infoc / infot, nunit, ok, lerr
248 COMMON / srnamc / srnamt
249
250
251 DATA iseedy / 1988, 1989, 1990, 1991 /
252 DATA transs / 'N', 'T', 'C' /
253 DATA facts / 'F', 'N', 'E' /
254 DATA equeds / 'N', 'R', 'C', 'B' /
255
256
257
258
259
260 path( 1: 1 ) = 'Single precision'
261 path( 2: 3 ) = 'GB'
262 nrun = 0
263 nfail = 0
264 nerrs = 0
265 DO 10 i = 1, 4
266 iseed( i ) = iseedy( i )
267 10 CONTINUE
268
269
270
271 IF( tsterr )
272 $
CALL serrvx( path, nout )
273 infot = 0
274
275
276
277 nb = 1
278 nbmin = 2
281
282
283
284 DO 150 in = 1, nn
285 n = nval( in )
286 ldb = max( n, 1 )
287 xtype = 'N'
288
289
290
291 nkl = max( 1, min( n, 4 ) )
292 IF( n.EQ.0 )
293 $ nkl = 1
294 nku = nkl
295 nimat = ntypes
296 IF( n.LE.0 )
297 $ nimat = 1
298
299 DO 140 ikl = 1, nkl
300
301
302
303
304 IF( ikl.EQ.1 ) THEN
305 kl = 0
306 ELSE IF( ikl.EQ.2 ) THEN
307 kl = max( n-1, 0 )
308 ELSE IF( ikl.EQ.3 ) THEN
309 kl = ( 3*n-1 ) / 4
310 ELSE IF( ikl.EQ.4 ) THEN
311 kl = ( n+1 ) / 4
312 END IF
313 DO 130 iku = 1, nku
314
315
316
317
318
319 IF( iku.EQ.1 ) THEN
320 ku = 0
321 ELSE IF( iku.EQ.2 ) THEN
322 ku = max( n-1, 0 )
323 ELSE IF( iku.EQ.3 ) THEN
324 ku = ( 3*n-1 ) / 4
325 ELSE IF( iku.EQ.4 ) THEN
326 ku = ( n+1 ) / 4
327 END IF
328
329
330
331
332 lda = kl + ku + 1
333 ldafb = 2*kl + ku + 1
334 IF( lda*n.GT.la .OR. ldafb*n.GT.lafb ) THEN
335 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
336 $
CALL aladhd( nout, path )
337 IF( lda*n.GT.la ) THEN
338 WRITE( nout, fmt = 9999 )la, n, kl, ku,
339 $ n*( kl+ku+1 )
340 nerrs = nerrs + 1
341 END IF
342 IF( ldafb*n.GT.lafb ) THEN
343 WRITE( nout, fmt = 9998 )lafb, n, kl, ku,
344 $ n*( 2*kl+ku+1 )
345 nerrs = nerrs + 1
346 END IF
347 GO TO 130
348 END IF
349
350 DO 120 imat = 1, nimat
351
352
353
354 IF( .NOT.dotype( imat ) )
355 $ GO TO 120
356
357
358
359 zerot = imat.GE.2 .AND. imat.LE.4
360 IF( zerot .AND. n.LT.imat-1 )
361 $ GO TO 120
362
363
364
365
366 CALL slatb4( path, imat, n, n,
TYPE, KL, KU, ANORM,
367 $ MODE, CNDNUM, DIST )
368 rcondc = one / cndnum
369
370 srnamt = 'SLATMS'
371 CALL slatms( n, n, dist, iseed,
TYPE, RWORK, MODE,
372 $ CNDNUM, ANORM, KL, KU, 'Z', A, LDA, WORK,
373 $ INFO )
374
375
376
377 IF( info.NE.0 ) THEN
378 CALL alaerh( path,
'SLATMS', info, 0,
' ', n, n,
379 $ kl, ku, -1, imat, nfail, nerrs, nout )
380 GO TO 120
381 END IF
382
383
384
385
386 izero = 0
387 IF( zerot ) THEN
388 IF( imat.EQ.2 ) THEN
389 izero = 1
390 ELSE IF( imat.EQ.3 ) THEN
391 izero = n
392 ELSE
393 izero = n / 2 + 1
394 END IF
395 ioff = ( izero-1 )*lda
396 IF( imat.LT.4 ) THEN
397 i1 = max( 1, ku+2-izero )
398 i2 = min( kl+ku+1, ku+1+( n-izero ) )
399 DO 20 i = i1, i2
400 a( ioff+i ) = zero
401 20 CONTINUE
402 ELSE
403 DO 40 j = izero, n
404 DO 30 i = max( 1, ku+2-j ),
405 $ min( kl+ku+1, ku+1+( n-j ) )
406 a( ioff+i ) = zero
407 30 CONTINUE
408 ioff = ioff + lda
409 40 CONTINUE
410 END IF
411 END IF
412
413
414
415 CALL slacpy(
'Full', kl+ku+1, n, a, lda, asav, lda )
416
417 DO 110 iequed = 1, 4
418 equed = equeds( iequed )
419 IF( iequed.EQ.1 ) THEN
420 nfact = 3
421 ELSE
422 nfact = 1
423 END IF
424
425 DO 100 ifact = 1, nfact
426 fact = facts( ifact )
427 prefac =
lsame( fact,
'F' )
428 nofact =
lsame( fact,
'N' )
429 equil =
lsame( fact,
'E' )
430
431 IF( zerot ) THEN
432 IF( prefac )
433 $ GO TO 100
434 rcondo = zero
435 rcondi = zero
436
437 ELSE IF( .NOT.nofact ) THEN
438
439
440
441
442
443
444 CALL slacpy(
'Full', kl+ku+1, n, asav, lda,
445 $ afb( kl+1 ), ldafb )
446 IF( equil .OR. iequed.GT.1 ) THEN
447
448
449
450
451 CALL sgbequ( n, n, kl, ku, afb( kl+1 ),
452 $ ldafb, s, s( n+1 ), rowcnd,
453 $ colcnd, amax, info )
454 IF( info.EQ.0 .AND. n.GT.0 ) THEN
455 IF(
lsame( equed,
'R' ) )
THEN
456 rowcnd = zero
457 colcnd = one
458 ELSE IF(
lsame( equed,
'C' ) )
THEN
459 rowcnd = one
460 colcnd = zero
461 ELSE IF(
lsame( equed,
'B' ) )
THEN
462 rowcnd = zero
463 colcnd = zero
464 END IF
465
466
467
468 CALL slaqgb( n, n, kl, ku, afb( kl+1 ),
469 $ ldafb, s, s( n+1 ),
470 $ rowcnd, colcnd, amax,
471 $ equed )
472 END IF
473 END IF
474
475
476
477
478 IF( equil ) THEN
479 roldo = rcondo
480 roldi = rcondi
481 END IF
482
483
484
485 anormo =
slangb(
'1', n, kl, ku, afb( kl+1 ),
486 $ ldafb, rwork )
487 anormi =
slangb(
'I', n, kl, ku, afb( kl+1 ),
488 $ ldafb, rwork )
489
490
491
492 CALL sgbtrf( n, n, kl, ku, afb, ldafb, iwork,
493 $ info )
494
495
496
497 CALL slaset(
'Full', n, n, zero, one, work,
498 $ ldb )
499 srnamt = 'SGBTRS'
500 CALL sgbtrs(
'No transpose', n, kl, ku, n,
501 $ afb, ldafb, iwork, work, ldb,
502 $ info )
503
504
505
506 ainvnm =
slange(
'1', n, n, work, ldb,
507 $ rwork )
508 IF( anormo.LE.zero .OR. ainvnm.LE.zero ) THEN
509 rcondo = one
510 ELSE
511 rcondo = ( one / anormo ) / ainvnm
512 END IF
513
514
515
516
517 ainvnm =
slange(
'I', n, n, work, ldb,
518 $ rwork )
519 IF( anormi.LE.zero .OR. ainvnm.LE.zero ) THEN
520 rcondi = one
521 ELSE
522 rcondi = ( one / anormi ) / ainvnm
523 END IF
524 END IF
525
526 DO 90 itran = 1, ntran
527
528
529
530 trans = transs( itran )
531 IF( itran.EQ.1 ) THEN
532 rcondc = rcondo
533 ELSE
534 rcondc = rcondi
535 END IF
536
537
538
539 CALL slacpy(
'Full', kl+ku+1, n, asav, lda,
540 $ a, lda )
541
542
543
544
545 srnamt = 'SLARHS'
546 CALL slarhs( path, xtype,
'Full', trans, n,
547 $ n, kl, ku, nrhs, a, lda, xact,
548 $ ldb, b, ldb, iseed, info )
549 xtype = 'C'
550 CALL slacpy(
'Full', n, nrhs, b, ldb, bsav,
551 $ ldb )
552
553 IF( nofact .AND. itran.EQ.1 ) THEN
554
555
556
557
558
559
560 CALL slacpy(
'Full', kl+ku+1, n, a, lda,
561 $ afb( kl+1 ), ldafb )
562 CALL slacpy(
'Full', n, nrhs, b, ldb, x,
563 $ ldb )
564
565 srnamt = 'SGBSV '
566 CALL sgbsv( n, kl, ku, nrhs, afb, ldafb,
567 $ iwork, x, ldb, info )
568
569
570
571 IF( info.NE.izero )
572 $
CALL alaerh( path,
'SGBSV ', info,
573 $ izero, ' ', n, n, kl, ku,
574 $ nrhs, imat, nfail, nerrs,
575 $ nout )
576
577
578
579
580 CALL sgbt01( n, n, kl, ku, a, lda, afb,
581 $ ldafb, iwork, work,
582 $ result( 1 ) )
583 nt = 1
584 IF( izero.EQ.0 ) THEN
585
586
587
588
589 CALL slacpy(
'Full', n, nrhs, b, ldb,
590 $ work, ldb )
591 CALL sgbt02(
'No transpose', n, n, kl,
592 $ ku, nrhs, a, lda, x, ldb,
593 $ work, ldb, rwork,
594 $ result( 2 ) )
595
596
597
598
599 CALL sget04( n, nrhs, x, ldb, xact,
600 $ ldb, rcondc, result( 3 ) )
601 nt = 3
602 END IF
603
604
605
606
607 DO 50 k = 1, nt
608 IF( result( k ).GE.thresh ) THEN
609 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
610 $
CALL aladhd( nout, path )
611 WRITE( nout, fmt = 9997 )'SGBSV ',
612 $ n, kl, ku, imat, k, result( k )
613 nfail = nfail + 1
614 END IF
615 50 CONTINUE
616 nrun = nrun + nt
617 END IF
618
619
620
621 IF( .NOT.prefac )
622 $
CALL slaset(
'Full', 2*kl+ku+1, n, zero,
623 $ zero, afb, ldafb )
624 CALL slaset(
'Full', n, nrhs, zero, zero, x,
625 $ ldb )
626 IF( iequed.GT.1 .AND. n.GT.0 ) THEN
627
628
629
630
631 CALL slaqgb( n, n, kl, ku, a, lda, s,
632 $ s( n+1 ), rowcnd, colcnd,
633 $ amax, equed )
634 END IF
635
636
637
638
639 srnamt = 'SGBSVX'
640 CALL sgbsvx( fact, trans, n, kl, ku, nrhs, a,
641 $ lda, afb, ldafb, iwork, equed,
642 $ s, s( n+1 ), b, ldb, x, ldb,
643 $ rcond, rwork, rwork( nrhs+1 ),
644 $ work, iwork( n+1 ), info )
645
646
647
648 IF( info.NE.izero )
649 $
CALL alaerh( path,
'SGBSVX', info, izero,
650 $ fact // trans, n, n, kl, ku,
651 $ nrhs, imat, nfail, nerrs,
652 $ nout )
653
654
655
656
657 IF( info.NE.0 ) THEN
658 anrmpv = zero
659 DO 70 j = 1, info
660 DO 60 i = max( ku+2-j, 1 ),
661 $ min( n+ku+1-j, kl+ku+1 )
662 anrmpv = max( anrmpv,
663 $ abs( a( i+( j-1 )*lda ) ) )
664 60 CONTINUE
665 70 CONTINUE
666 rpvgrw =
slantb(
'M',
'U',
'N', info,
667 $ min( info-1, kl+ku ),
668 $ afb( max( 1, kl+ku+2-info ) ),
669 $ ldafb, work )
670 IF( rpvgrw.EQ.zero ) THEN
671 rpvgrw = one
672 ELSE
673 rpvgrw = anrmpv / rpvgrw
674 END IF
675 ELSE
676 rpvgrw =
slantb(
'M',
'U',
'N', n, kl+ku,
677 $ afb, ldafb, work )
678 IF( rpvgrw.EQ.zero ) THEN
679 rpvgrw = one
680 ELSE
681 rpvgrw =
slangb(
'M', n, kl, ku, a,
682 $ lda, work ) / rpvgrw
683 END IF
684 END IF
685 result( 7 ) = abs( rpvgrw-work( 1 ) ) /
686 $ max( work( 1 ), rpvgrw ) /
688
689 IF( .NOT.prefac ) THEN
690
691
692
693
694 CALL sgbt01( n, n, kl, ku, a, lda, afb,
695 $ ldafb, iwork, work,
696 $ result( 1 ) )
697 k1 = 1
698 ELSE
699 k1 = 2
700 END IF
701
702 IF( info.EQ.0 ) THEN
703 trfcon = .false.
704
705
706
707 CALL slacpy(
'Full', n, nrhs, bsav, ldb,
708 $ work, ldb )
709 CALL sgbt02( trans, n, n, kl, ku, nrhs,
710 $ asav, lda, x, ldb, work, ldb,
711 $ rwork( 2*nrhs+1 ),
712 $ result( 2 ) )
713
714
715
716
717 IF( nofact .OR. ( prefac .AND.
718 $
lsame( equed,
'N' ) ) )
THEN
719 CALL sget04( n, nrhs, x, ldb, xact,
720 $ ldb, rcondc, result( 3 ) )
721 ELSE
722 IF( itran.EQ.1 ) THEN
723 roldc = roldo
724 ELSE
725 roldc = roldi
726 END IF
727 CALL sget04( n, nrhs, x, ldb, xact,
728 $ ldb, roldc, result( 3 ) )
729 END IF
730
731
732
733
734 CALL sgbt05( trans, n, kl, ku, nrhs, asav,
735 $ lda, b, ldb, x, ldb, xact,
736 $ ldb, rwork, rwork( nrhs+1 ),
737 $ result( 4 ) )
738 ELSE
739 trfcon = .true.
740 END IF
741
742
743
744
745 result( 6 ) =
sget06( rcond, rcondc )
746
747
748
749
750 IF( .NOT.trfcon ) THEN
751 DO 80 k = k1, ntests
752 IF( result( k ).GE.thresh ) THEN
753 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
754 $
CALL aladhd( nout, path )
755 IF( prefac ) THEN
756 WRITE( nout, fmt = 9995 )
757 $ 'SGBSVX', fact, trans, n, kl,
758 $ ku, equed, imat, k,
759 $ result( k )
760 ELSE
761 WRITE( nout, fmt = 9996 )
762 $ 'SGBSVX', fact, trans, n, kl,
763 $ ku, imat, k, result( k )
764 END IF
765 nfail = nfail + 1
766 END IF
767 80 CONTINUE
768 nrun = nrun + 7 - k1
769 ELSE
770 IF( result( 1 ).GE.thresh .AND. .NOT.
771 $ prefac ) THEN
772 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
773 $
CALL aladhd( nout, path )
774 IF( prefac ) THEN
775 WRITE( nout, fmt = 9995 )'SGBSVX',
776 $ fact, trans, n, kl, ku, equed,
777 $ imat, 1, result( 1 )
778 ELSE
779 WRITE( nout, fmt = 9996 )'SGBSVX',
780 $ fact, trans, n, kl, ku, imat, 1,
781 $ result( 1 )
782 END IF
783 nfail = nfail + 1
784 nrun = nrun + 1
785 END IF
786 IF( result( 6 ).GE.thresh ) THEN
787 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
788 $
CALL aladhd( nout, path )
789 IF( prefac ) THEN
790 WRITE( nout, fmt = 9995 )'SGBSVX',
791 $ fact, trans, n, kl, ku, equed,
792 $ imat, 6, result( 6 )
793 ELSE
794 WRITE( nout, fmt = 9996 )'SGBSVX',
795 $ fact, trans, n, kl, ku, imat, 6,
796 $ result( 6 )
797 END IF
798 nfail = nfail + 1
799 nrun = nrun + 1
800 END IF
801 IF( result( 7 ).GE.thresh ) THEN
802 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
803 $
CALL aladhd( nout, path )
804 IF( prefac ) THEN
805 WRITE( nout, fmt = 9995 )'SGBSVX',
806 $ fact, trans, n, kl, ku, equed,
807 $ imat, 7, result( 7 )
808 ELSE
809 WRITE( nout, fmt = 9996 )'SGBSVX',
810 $ fact, trans, n, kl, ku, imat, 7,
811 $ result( 7 )
812 END IF
813 nfail = nfail + 1
814 nrun = nrun + 1
815 END IF
816
817 END IF
818
819
820
821
822
823 CALL slacpy(
'Full', kl+ku+1, n, asav, lda, a,
824 $ lda )
825 CALL slacpy(
'Full', n, nrhs, bsav, ldb, b, ldb )
826
827 IF( .NOT.prefac )
828 $
CALL slaset(
'Full', 2*kl+ku+1, n, zero, zero,
829 $ afb, ldafb )
830 CALL slaset(
'Full', n, nrhs, zero, zero, x, ldb )
831 IF( iequed.GT.1 .AND. n.GT.0 ) THEN
832
833
834
835
836 CALL slaqgb( n, n, kl, ku, a, lda, s,
837 $ s( n+1 ), rowcnd, colcnd, amax, equed )
838 END IF
839
840
841
842
843 srnamt = 'SGBSVXX'
844 n_err_bnds = 3
845 CALL sgbsvxx( fact, trans, n, kl, ku, nrhs, a, lda,
846 $ afb, ldafb, iwork, equed, s, s( n+1 ), b, ldb,
847 $ x, ldb, rcond, rpvgrw_svxx, berr, n_err_bnds,
848 $ errbnds_n, errbnds_c, 0, zero, work,
849 $ iwork( n+1 ), info )
850
851
852
853 IF( info.EQ.n+1 ) GOTO 90
854 IF( info.NE.izero ) THEN
855 CALL alaerh( path,
'SGBSVXX', info, izero,
856 $ fact // trans, n, n, -1, -1, nrhs,
857 $ imat, nfail, nerrs, nout )
858 GOTO 90
859 END IF
860
861
862
863
864
865 IF ( info .GT. 0 .AND. info .LT. n+1 ) THEN
867 $ afb, ldafb )
868 ELSE
870 $ afb, ldafb )
871 ENDIF
872
873 result( 7 ) = abs( rpvgrw-rpvgrw_svxx ) /
874 $ max( rpvgrw_svxx, rpvgrw ) /
876
877 IF( .NOT.prefac ) THEN
878
879
880
881
882 CALL sgbt01( n, n, kl, ku, a, lda, afb, ldafb,
883 $ iwork, work,
884 $ result( 1 ) )
885 k1 = 1
886 ELSE
887 k1 = 2
888 END IF
889
890 IF( info.EQ.0 ) THEN
891 trfcon = .false.
892
893
894
895 CALL slacpy(
'Full', n, nrhs, bsav, ldb, work,
896 $ ldb )
897 CALL sgbt02( trans, n, n, kl, ku, nrhs, asav,
898 $ lda, x, ldb, work, ldb, rwork,
899 $ result( 2 ) )
900
901
902
903 IF( nofact .OR. ( prefac .AND.
lsame( equed,
904 $ 'N' ) ) ) THEN
905 CALL sget04( n, nrhs, x, ldb, xact, ldb,
906 $ rcondc, result( 3 ) )
907 ELSE
908 IF( itran.EQ.1 ) THEN
909 roldc = roldo
910 ELSE
911 roldc = roldi
912 END IF
913 CALL sget04( n, nrhs, x, ldb, xact, ldb,
914 $ roldc, result( 3 ) )
915 END IF
916 ELSE
917 trfcon = .true.
918 END IF
919
920
921
922
923 result( 6 ) =
sget06( rcond, rcondc )
924
925
926
927
928 IF( .NOT.trfcon ) THEN
929 DO 45 k = k1, ntests
930 IF( result( k ).GE.thresh ) THEN
931 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
932 $
CALL aladhd( nout, path )
933 IF( prefac ) THEN
934 WRITE( nout, fmt = 9995 )'SGBSVXX',
935 $ fact, trans, n, kl, ku, equed,
936 $ imat, k, result( k )
937 ELSE
938 WRITE( nout, fmt = 9996 )'SGBSVXX',
939 $ fact, trans, n, kl, ku, imat, k,
940 $ result( k )
941 END IF
942 nfail = nfail + 1
943 END IF
944 45 CONTINUE
945 nrun = nrun + 7 - k1
946 ELSE
947 IF( result( 1 ).GE.thresh .AND. .NOT.prefac )
948 $ THEN
949 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
950 $
CALL aladhd( nout, path )
951 IF( prefac ) THEN
952 WRITE( nout, fmt = 9995 )'SGBSVXX', fact,
953 $ trans, n, kl, ku, equed, imat, 1,
954 $ result( 1 )
955 ELSE
956 WRITE( nout, fmt = 9996 )'SGBSVXX', fact,
957 $ trans, n, kl, ku, imat, 1,
958 $ result( 1 )
959 END IF
960 nfail = nfail + 1
961 nrun = nrun + 1
962 END IF
963 IF( result( 6 ).GE.thresh ) THEN
964 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
965 $
CALL aladhd( nout, path )
966 IF( prefac ) THEN
967 WRITE( nout, fmt = 9995 )'SGBSVXX', fact,
968 $ trans, n, kl, ku, equed, imat, 6,
969 $ result( 6 )
970 ELSE
971 WRITE( nout, fmt = 9996 )'SGBSVXX', fact,
972 $ trans, n, kl, ku, imat, 6,
973 $ result( 6 )
974 END IF
975 nfail = nfail + 1
976 nrun = nrun + 1
977 END IF
978 IF( result( 7 ).GE.thresh ) THEN
979 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
980 $
CALL aladhd( nout, path )
981 IF( prefac ) THEN
982 WRITE( nout, fmt = 9995 )'SGBSVXX', fact,
983 $ trans, n, kl, ku, equed, imat, 7,
984 $ result( 7 )
985 ELSE
986 WRITE( nout, fmt = 9996 )'SGBSVXX', fact,
987 $ trans, n, kl, ku, imat, 7,
988 $ result( 7 )
989 END IF
990 nfail = nfail + 1
991 nrun = nrun + 1
992 END IF
993
994 END IF
995
996 90 CONTINUE
997 100 CONTINUE
998 110 CONTINUE
999 120 CONTINUE
1000 130 CONTINUE
1001 140 CONTINUE
1002 150 CONTINUE
1003
1004
1005
1006 CALL alasvm( path, nout, nfail, nrun, nerrs )
1007
1008
1009
1010
1012
1013 9999 FORMAT( ' *** In SDRVGB, LA=', i5, ' is too small for N=', i5,
1014 $ ', KU=', i5, ', KL=', i5, / ' ==> Increase LA to at least ',
1015 $ i5 )
1016 9998 FORMAT( ' *** In SDRVGB, LAFB=', i5, ' is too small for N=', i5,
1017 $ ', KU=', i5, ', KL=', i5, /
1018 $ ' ==> Increase LAFB to at least ', i5 )
1019 9997 FORMAT( 1x, a, ', N=', i5, ', KL=', i5, ', KU=', i5, ', type ',
1020 $ i1, ', test(', i1, ')=', g12.5 )
1021 9996 FORMAT( 1x, a, '( ''', a1, ''',''', a1, ''',', i5, ',', i5, ',',
1022 $ i5, ',...), type ', i1, ', test(', i1, ')=', g12.5 )
1023 9995 FORMAT( 1x, a, '( ''', a1, ''',''', a1, ''',', i5, ',', i5, ',',
1024 $ i5, ',...), EQUED=''', a1, ''', type ', i1, ', test(', i1,
1025 $ ')=', g12.5 )
1026
1027 RETURN
1028
1029
1030
subroutine alasvm(type, nout, nfail, nrun, nerrs)
ALASVM
subroutine slarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
SLARHS
subroutine xlaenv(ispec, nvalue)
XLAENV
subroutine aladhd(iounit, path)
ALADHD
subroutine alaerh(path, subnam, info, infoe, opts, m, n, kl, ku, n5, imat, nfail, nerrs, nout)
ALAERH
subroutine sgbequ(m, n, kl, ku, ab, ldab, r, c, rowcnd, colcnd, amax, info)
SGBEQU
subroutine sgbsv(n, kl, ku, nrhs, ab, ldab, ipiv, b, ldb, info)
SGBSV computes the solution to system of linear equations A * X = B for GB matrices (simple driver)
subroutine sgbsvx(fact, trans, n, kl, ku, nrhs, ab, ldab, afb, ldafb, ipiv, equed, r, c, b, ldb, x, ldx, rcond, ferr, berr, work, iwork, info)
SGBSVX computes the solution to system of linear equations A * X = B for GB matrices
subroutine sgbsvxx(fact, trans, n, kl, ku, nrhs, ab, ldab, afb, ldafb, ipiv, equed, r, c, b, ldb, x, ldx, rcond, rpvgrw, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params, work, iwork, info)
SGBSVXX computes the solution to system of linear equations A * X = B for GB matrices
subroutine sgbtrf(m, n, kl, ku, ab, ldab, ipiv, info)
SGBTRF
subroutine sgbtrs(trans, n, kl, ku, nrhs, ab, ldab, ipiv, b, ldb, info)
SGBTRS
real function sla_gbrpvgrw(n, kl, ku, ncols, ab, ldab, afb, ldafb)
SLA_GBRPVGRW computes the reciprocal pivot growth factor norm(A)/norm(U) for a general banded matrix.
subroutine slacpy(uplo, m, n, a, lda, b, ldb)
SLACPY copies all or part of one two-dimensional array to another.
real function slamch(cmach)
SLAMCH
real function slangb(norm, n, kl, ku, ab, ldab, work)
SLANGB returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value ...
real function slange(norm, m, n, a, lda, work)
SLANGE returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value ...
real function slantb(norm, uplo, diag, n, k, ab, ldab, work)
SLANTB returns the value of the 1-norm, or the Frobenius norm, or the infinity norm,...
subroutine slaqgb(m, n, kl, ku, ab, ldab, r, c, rowcnd, colcnd, amax, equed)
SLAQGB scales a general band matrix, using row and column scaling factors computed by sgbequ.
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.
logical function lsame(ca, cb)
LSAME
subroutine sebchvxx(thresh, path)
SEBCHVXX
subroutine serrvx(path, nunit)
SERRVX
subroutine sgbt01(m, n, kl, ku, a, lda, afac, ldafac, ipiv, work, resid)
SGBT01
subroutine sgbt02(trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
SGBT02
subroutine sgbt05(trans, n, kl, ku, nrhs, ab, ldab, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
SGBT05
subroutine sget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
SGET04
real function sget06(rcond, rcondc)
SGET06
subroutine slatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
SLATB4
subroutine slatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
SLATMS