175
176
177
178
179
180
181 LOGICAL TSTERR
182 INTEGER LA, LAFB, NN, NOUT, NRHS
183 DOUBLE PRECISION THRESH
184
185
186 LOGICAL DOTYPE( * )
187 INTEGER IWORK( * ), NVAL( * )
188 DOUBLE PRECISION A( * ), AFB( * ), ASAV( * ), B( * ), BSAV( * ),
189 $ RWORK( * ), S( * ), WORK( * ), X( * ),
190 $ XACT( * )
191
192
193
194
195
196 DOUBLE PRECISION ONE, ZERO
197 parameter( one = 1.0d+0, zero = 0.0d+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 DOUBLE PRECISION 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 DOUBLE PRECISION RESULT( NTESTS ), BERR( NRHS ),
223 $ ERRBNDS_N( NRHS, 3 ), ERRBNDS_C( NRHS, 3 )
224
225
226 LOGICAL LSAME
227 DOUBLE PRECISION DGET06, DLAMCH, DLANGB, DLANGE, DLANTB,
228 $ DLA_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 ) = 'Double 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 derrvx( 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 dlatb4( path, imat, n, n,
TYPE, KL, KU, ANORM,
367 $ MODE, CNDNUM, DIST )
368 rcondc = one / cndnum
369
370 srnamt = 'DLATMS'
371 CALL dlatms( 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,
'DLATMS', 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 dlacpy(
'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 dlacpy(
'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 dgbequ( 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 dlaqgb( 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 =
dlangb(
'1', n, kl, ku, afb( kl+1 ),
486 $ ldafb, rwork )
487 anormi =
dlangb(
'I', n, kl, ku, afb( kl+1 ),
488 $ ldafb, rwork )
489
490
491
492 CALL dgbtrf( n, n, kl, ku, afb, ldafb, iwork,
493 $ info )
494
495
496
497 CALL dlaset(
'Full', n, n, zero, one, work,
498 $ ldb )
499 srnamt = 'DGBTRS'
500 CALL dgbtrs(
'No transpose', n, kl, ku, n,
501 $ afb, ldafb, iwork, work, ldb,
502 $ info )
503
504
505
506 ainvnm =
dlange(
'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 =
dlange(
'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 dlacpy(
'Full', kl+ku+1, n, asav, lda,
540 $ a, lda )
541
542
543
544
545 srnamt = 'DLARHS'
546 CALL dlarhs( path, xtype,
'Full', trans, n,
547 $ n, kl, ku, nrhs, a, lda, xact,
548 $ ldb, b, ldb, iseed, info )
549 xtype = 'C'
550 CALL dlacpy(
'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 dlacpy(
'Full', kl+ku+1, n, a, lda,
561 $ afb( kl+1 ), ldafb )
562 CALL dlacpy(
'Full', n, nrhs, b, ldb, x,
563 $ ldb )
564
565 srnamt = 'DGBSV '
566 CALL dgbsv( n, kl, ku, nrhs, afb, ldafb,
567 $ iwork, x, ldb, info )
568
569
570
571 IF( info.NE.izero )
572 $
CALL alaerh( path,
'DGBSV ', info,
573 $ izero, ' ', n, n, kl, ku,
574 $ nrhs, imat, nfail, nerrs,
575 $ nout )
576
577
578
579
580 CALL dgbt01( 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 dlacpy(
'Full', n, nrhs, b, ldb,
590 $ work, ldb )
591 CALL dgbt02(
'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 dget04( 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 )'DGBSV ',
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 dlaset(
'Full', 2*kl+ku+1, n, zero,
623 $ zero, afb, ldafb )
624 CALL dlaset(
'Full', n, nrhs, zero, zero, x,
625 $ ldb )
626 IF( iequed.GT.1 .AND. n.GT.0 ) THEN
627
628
629
630
631 CALL dlaqgb( 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 = 'DGBSVX'
640 CALL dgbsvx( 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,
'DGBSVX', 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 =
dlantb(
'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 =
dlantb(
'M',
'U',
'N', n, kl+ku,
677 $ afb, ldafb, work )
678 IF( rpvgrw.EQ.zero ) THEN
679 rpvgrw = one
680 ELSE
681 rpvgrw =
dlangb(
'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 dgbt01( 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 dlacpy(
'Full', n, nrhs, bsav, ldb,
708 $ work, ldb )
709 CALL dgbt02( 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 dget04( 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 dget04( n, nrhs, x, ldb, xact,
728 $ ldb, roldc, result( 3 ) )
729 END IF
730
731
732
733
734 CALL dgbt05( 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 ) =
dget06( 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 $ 'DGBSVX', fact, trans, n, kl,
758 $ ku, equed, imat, k,
759 $ result( k )
760 ELSE
761 WRITE( nout, fmt = 9996 )
762 $ 'DGBSVX', 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 )'DGBSVX',
776 $ fact, trans, n, kl, ku, equed,
777 $ imat, 1, result( 1 )
778 ELSE
779 WRITE( nout, fmt = 9996 )'DGBSVX',
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 )'DGBSVX',
791 $ fact, trans, n, kl, ku, equed,
792 $ imat, 6, result( 6 )
793 ELSE
794 WRITE( nout, fmt = 9996 )'DGBSVX',
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 )'DGBSVX',
806 $ fact, trans, n, kl, ku, equed,
807 $ imat, 7, result( 7 )
808 ELSE
809 WRITE( nout, fmt = 9996 )'DGBSVX',
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 dlacpy(
'Full', kl+ku+1, n, asav, lda, a,
824 $ lda )
825 CALL dlacpy(
'Full', n, nrhs, bsav, ldb, b, ldb )
826
827 IF( .NOT.prefac )
828 $
CALL dlaset(
'Full', 2*kl+ku+1, n, zero, zero,
829 $ afb, ldafb )
830 CALL dlaset(
'Full', n, nrhs, zero, zero, x, ldb )
831 IF( iequed.GT.1 .AND. n.GT.0 ) THEN
832
833
834
835
836 CALL dlaqgb( n, n, kl, ku, a, lda, s, s( n+1 ),
837 $ rowcnd, colcnd, amax, equed )
838 END IF
839
840
841
842
843 srnamt = 'DGBSVXX'
844 n_err_bnds = 3
845 CALL dgbsvxx( 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,
'DGBSVXX', 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 dgbt01( n, n, kl, ku, a, lda, afb, ldafb,
883 $ iwork, work, result( 1 ) )
884 k1 = 1
885 ELSE
886 k1 = 2
887 END IF
888
889 IF( info.EQ.0 ) THEN
890 trfcon = .false.
891
892
893
894 CALL dlacpy(
'Full', n, nrhs, bsav, ldb, work,
895 $ ldb )
896 CALL dgbt02( trans, n, n, kl, ku, nrhs, asav,
897 $ lda, x, ldb, work, ldb, rwork,
898 $ result( 2 ) )
899
900
901
902 IF( nofact .OR. ( prefac .AND.
lsame( equed,
903 $ 'N' ) ) ) THEN
904 CALL dget04( n, nrhs, x, ldb, xact, ldb,
905 $ rcondc, result( 3 ) )
906 ELSE
907 IF( itran.EQ.1 ) THEN
908 roldc = roldo
909 ELSE
910 roldc = roldi
911 END IF
912 CALL dget04( n, nrhs, x, ldb, xact, ldb,
913 $ roldc, result( 3 ) )
914 END IF
915 ELSE
916 trfcon = .true.
917 END IF
918
919
920
921
922 result( 6 ) =
dget06( rcond, rcondc )
923
924
925
926
927 IF( .NOT.trfcon ) THEN
928 DO 45 k = k1, ntests
929 IF( result( k ).GE.thresh ) THEN
930 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
931 $
CALL aladhd( nout, path )
932 IF( prefac ) THEN
933 WRITE( nout, fmt = 9995 )'DGBSVXX',
934 $ fact, trans, n, kl, ku, equed,
935 $ imat, k, result( k )
936 ELSE
937 WRITE( nout, fmt = 9996 )'DGBSVXX',
938 $ fact, trans, n, kl, ku, imat, k,
939 $ result( k )
940 END IF
941 nfail = nfail + 1
942 END IF
943 45 CONTINUE
944 nrun = nrun + 7 - k1
945 ELSE
946 IF( result( 1 ).GE.thresh .AND. .NOT.prefac )
947 $ THEN
948 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
949 $
CALL aladhd( nout, path )
950 IF( prefac ) THEN
951 WRITE( nout, fmt = 9995 )'DGBSVXX', fact,
952 $ trans, n, kl, ku, equed, imat, 1,
953 $ result( 1 )
954 ELSE
955 WRITE( nout, fmt = 9996 )'DGBSVXX', fact,
956 $ trans, n, kl, ku, imat, 1,
957 $ result( 1 )
958 END IF
959 nfail = nfail + 1
960 nrun = nrun + 1
961 END IF
962 IF( result( 6 ).GE.thresh ) THEN
963 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
964 $
CALL aladhd( nout, path )
965 IF( prefac ) THEN
966 WRITE( nout, fmt = 9995 )'DGBSVXX', fact,
967 $ trans, n, kl, ku, equed, imat, 6,
968 $ result( 6 )
969 ELSE
970 WRITE( nout, fmt = 9996 )'DGBSVXX', fact,
971 $ trans, n, kl, ku, imat, 6,
972 $ result( 6 )
973 END IF
974 nfail = nfail + 1
975 nrun = nrun + 1
976 END IF
977 IF( result( 7 ).GE.thresh ) THEN
978 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
979 $
CALL aladhd( nout, path )
980 IF( prefac ) THEN
981 WRITE( nout, fmt = 9995 )'DGBSVXX', fact,
982 $ trans, n, kl, ku, equed, imat, 7,
983 $ result( 7 )
984 ELSE
985 WRITE( nout, fmt = 9996 )'DGBSVXX', fact,
986 $ trans, n, kl, ku, imat, 7,
987 $ result( 7 )
988 END IF
989 nfail = nfail + 1
990 nrun = nrun + 1
991 END IF
992
993 END IF
994 90 CONTINUE
995 100 CONTINUE
996 110 CONTINUE
997 120 CONTINUE
998 130 CONTINUE
999 140 CONTINUE
1000 150 CONTINUE
1001
1002
1003
1004 CALL alasvm( path, nout, nfail, nrun, nerrs )
1005
1006
1007
1009
1010 9999 FORMAT( ' *** In DDRVGB, LA=', i5, ' is too small for N=', i5,
1011 $ ', KU=', i5, ', KL=', i5, / ' ==> Increase LA to at least ',
1012 $ i5 )
1013 9998 FORMAT( ' *** In DDRVGB, LAFB=', i5, ' is too small for N=', i5,
1014 $ ', KU=', i5, ', KL=', i5, /
1015 $ ' ==> Increase LAFB to at least ', i5 )
1016 9997 FORMAT( 1x, a, ', N=', i5, ', KL=', i5, ', KU=', i5, ', type ',
1017 $ i1, ', test(', i1, ')=', g12.5 )
1018 9996 FORMAT( 1x, a, '( ''', a1, ''',''', a1, ''',', i5, ',', i5, ',',
1019 $ i5, ',...), type ', i1, ', test(', i1, ')=', g12.5 )
1020 9995 FORMAT( 1x, a, '( ''', a1, ''',''', a1, ''',', i5, ',', i5, ',',
1021 $ i5, ',...), EQUED=''', a1, ''', type ', i1, ', test(', i1,
1022 $ ')=', g12.5 )
1023
1024 RETURN
1025
1026
1027
subroutine alasvm(type, nout, nfail, nrun, nerrs)
ALASVM
subroutine dlarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
DLARHS
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 debchvxx(thresh, path)
DEBCHVXX
subroutine derrvx(path, nunit)
DERRVX
subroutine dgbt01(m, n, kl, ku, a, lda, afac, ldafac, ipiv, work, resid)
DGBT01
subroutine dgbt02(trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
DGBT02
subroutine dgbt05(trans, n, kl, ku, nrhs, ab, ldab, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
DGBT05
subroutine dget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
DGET04
double precision function dget06(rcond, rcondc)
DGET06
subroutine dlatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
DLATB4
subroutine dlatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
DLATMS
subroutine dgbequ(m, n, kl, ku, ab, ldab, r, c, rowcnd, colcnd, amax, info)
DGBEQU
subroutine dgbequb(m, n, kl, ku, ab, ldab, r, c, rowcnd, colcnd, amax, info)
DGBEQUB
subroutine dgbsv(n, kl, ku, nrhs, ab, ldab, ipiv, b, ldb, info)
DGBSV computes the solution to system of linear equations A * X = B for GB matrices (simple driver)
subroutine dgbsvx(fact, trans, n, kl, ku, nrhs, ab, ldab, afb, ldafb, ipiv, equed, r, c, b, ldb, x, ldx, rcond, ferr, berr, work, iwork, info)
DGBSVX computes the solution to system of linear equations A * X = B for GB matrices
subroutine dgbsvxx(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)
DGBSVXX computes the solution to system of linear equations A * X = B for GB matrices
subroutine dgbtrf(m, n, kl, ku, ab, ldab, ipiv, info)
DGBTRF
subroutine dgbtrs(trans, n, kl, ku, nrhs, ab, ldab, ipiv, b, ldb, info)
DGBTRS
double precision function dla_gbrpvgrw(n, kl, ku, ncols, ab, ldab, afb, ldafb)
DLA_GBRPVGRW computes the reciprocal pivot growth factor norm(A)/norm(U) for a general banded matrix.
subroutine dlacpy(uplo, m, n, a, lda, b, ldb)
DLACPY copies all or part of one two-dimensional array to another.
double precision function dlamch(cmach)
DLAMCH
double precision function dlangb(norm, n, kl, ku, ab, ldab, work)
DLANGB returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value ...
double precision function dlange(norm, m, n, a, lda, work)
DLANGE returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value ...
double precision function dlantb(norm, uplo, diag, n, k, ab, ldab, work)
DLANTB returns the value of the 1-norm, or the Frobenius norm, or the infinity norm,...
subroutine dlaqgb(m, n, kl, ku, ab, ldab, r, c, rowcnd, colcnd, amax, equed)
DLAQGB scales a general band matrix, using row and column scaling factors computed by sgbequ.
subroutine dlaset(uplo, m, n, alpha, beta, a, lda)
DLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
logical function lsame(ca, cb)
LSAME