290 SUBROUTINE schksb( NSIZES, NN, NWDTHS, KK, NTYPES, DOTYPE, ISEED,
291 $ THRESH, NOUNIT, A, LDA, SD, SE, U, LDU, WORK,
292 $ LWORK, RESULT, INFO )
299 INTEGER INFO, LDA, LDU, LWORK, NOUNIT, NSIZES, NTYPES,
305 INTEGER ISEED( 4 ), KK( * ), NN( * )
306 REAL A( LDA, * ), RESULT( * ), SD( * ), SE( * ),
307 $ u( ldu, * ), work( * )
313 REAL ZERO, ONE, TWO, TEN
314 PARAMETER ( ZERO = 0.0e0, one = 1.0e0, two = 2.0e0,
317 PARAMETER ( HALF = one / two )
319 parameter( maxtyp = 15 )
322 LOGICAL BADNN, BADNNB
323 INTEGER I, IINFO, , ITYPE, J, JC, JCOL, JR, JSIZE,
324 $ jtype, jwidth, k, kmax, mtypes
325 $ nmats, nmax, ntest, ntestt
326 REAL ANINV, ANORM, COND, OVFL, RTOVFL, RTUNFL,
327 $ TEMP1, ULP, ULPINV, UNFL
330 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), KMAGN( MAXTYP ),
331 $ KMODE( MAXTYP ), KTYPE( MAXTYP )
342 INTRINSIC abs,
max,
min, real, sqrt
345 DATA ktype / 1, 2, 5*4, 5*5, 3*8 /
348 DATA kmode / 2*0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
363 nmax =
max( nmax, nn( j ) )
371 kmax =
max( kmax, kk( j ) )
375 kmax =
min( nmax-1, kmax )
379 IF( nsizes.LT.0 )
THEN
381 ELSE IF( badnn )
THEN
383 ELSE IF( nwdths.LT.0 )
THEN
385 ELSE IF( badnnb )
THEN
387 ELSE IF( ntypes.LT.0 )
THEN
389 ELSE IF( lda.LT.kmax+1 )
THEN
391 ELSE IF( ldu.LT.nmax )
THEN
393 ELSE IF( (
max( lda, nmax )+1 )*nmax.GT.lwork )
THEN
398 CALL xerbla(
'SCHKSB', -info )
404 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 .OR. nwdths.EQ.0 )
409 unfl = slamch(
'Safe minimum' )
411 ulp = slamch(
'Epsilon' )*slamch(
'Base' )
413 rtunfl = sqrt( unfl )
414 rtovfl = sqrt( ovfl )
421 DO 190 jsize = 1, nsizes
423 aninv = one / real(
max( 1, n ) )
425 DO 180 jwidth = 1, nwdths
429 k =
max( 0,
min( n-1, k ) )
431 IF( nsizes.NE.1 )
THEN
432 mtypes =
min( maxtyp, ntypes )
434 mtypes =
min( maxtyp+1, ntypes )
437 DO 170 jtype = 1, mtypes
438 IF( .NOT.dotype( jtype ) )
444 ioldsd( j ) = iseed( j )
464 IF( mtypes.GT.maxtyp )
467 itype = ktype( jtype )
468 imode = kmode( jtype )
472 GO TO ( 40, 50, 60 )kmagn( jtype )
479 anorm = ( rtovfl*ulp )*aninv
483 anorm = rtunfl*n*ulpinv
488 CALL slaset(
'Full', lda, n, zero, zero, a, lda )
490 IF( jtype.LE.15 )
THEN
493 cond = ulpinv*aninv / ten
500 IF( itype.EQ.1 )
THEN
503 ELSE IF( itype.EQ.2 )
THEN
508 a( k+1, jcol ) = anorm
511 ELSE IF( itype.EQ.4 )
THEN
515 CALL slatms( n, n,
'S', iseed,
'S', work, imode, cond,
516 $ anorm, 0, 0,
'Q', a( k+1, 1 ), lda,
517 $ work( n+1 ), iinfo )
519 ELSE IF( itype.EQ.5 )
THEN
523 CALL slatms( n, n,
'S', iseed,
'S', work, imode, cond,
524 $ anorm, k, k,
'Q', a, lda, work( n+1 ),
527 ELSE IF( itype.EQ.7 )
THEN
531 CALL slatmr( n, n,
'S', iseed,
'S', work, 6, one, one,
532 $ 't
', 'n
', WORK( N+1 ), 1, ONE,
533 $ WORK( 2*N+1 ), 1, ONE, 'n
', IDUMMA, 0, 0,
534 $ ZERO, ANORM, 'q
', A( K+1, 1 ), LDA,
537.EQ.
ELSE IF( ITYPE8 ) THEN
541 CALL SLATMR( N, N, 's
', ISEED, 's
', WORK, 6, ONE, ONE,
542 $ 't
', 'n
', WORK( N+1 ), 1, ONE,
543 $ WORK( 2*N+1 ), 1, ONE, 'n
', IDUMMA, K, K,
544 $ ZERO, ANORM, 'q
', A, LDA, IDUMMA, IINFO )
546.EQ.
ELSE IF( ITYPE9 ) THEN
550 CALL SLATMS( N, N, 's
', ISEED, 'p
', WORK, IMODE, COND,
551 $ ANORM, K, K, 'q
', A, LDA, WORK( N+1 ),
554.EQ.
ELSE IF( ITYPE10 ) THEN
560 CALL SLATMS( N, N, 's
', ISEED, 'p
', WORK, IMODE, COND,
561 $ ANORM, 1, 1, 'q
', A( K, 1 ), LDA,
562 $ WORK( N+1 ), IINFO )
564 TEMP1 = ABS( A( K, I ) ) /
565 $ SQRT( ABS( A( K+1, I-1 )*A( K+1, I ) ) )
566.GT.
IF( TEMP1HALF ) THEN
567 A( K, I ) = HALF*SQRT( ABS( A( K+1,
568 $ I-1 )*A( K+1, I ) ) )
577.NE.
IF( IINFO0 ) THEN
578 WRITE( NOUNIT, FMT = 9999 )'generator
', IINFO, N,
588 CALL SLACPY( ' ', K+1, N, A, LDA, WORK, LDA )
591 CALL SSBTRD( 'v
', 'u
', N, K, WORK, LDA, SD, SE, U, LDU,
592 $ WORK( LDA*N+1 ), IINFO )
594.NE.
IF( IINFO0 ) THEN
595 WRITE( NOUNIT, FMT = 9999 )'ssbtrd(u)
', IINFO, N,
598.LT.
IF( IINFO0 ) THEN
608 CALL SSBT21( 'upper
', N, K, 1, A, LDA, SD, SE, U, LDU,
609 $ WORK, RESULT( 1 ) )
615 DO 110 JR = 0, MIN( K, N-JC )
616 A( JR+1, JC ) = A( K+1-JR, JC+JR )
619 DO 140 JC = N + 1 - K, N
620 DO 130 JR = MIN( K, N-JC ) + 1, K
627 CALL SLACPY( ' ', K+1, N, A, LDA, WORK, LDA )
630 CALL SSBTRD( 'v
', 'l
', N, K, WORK, LDA, SD, SE, U, LDU,
631 $ WORK( LDA*N+1 ), IINFO )
633.NE.
IF( IINFO0 ) THEN
634 WRITE( NOUNIT, FMT = 9999 )'ssbtrd(l)
', IINFO, N,
637.LT.
IF( IINFO0 ) THEN
648 CALL SSBT21( 'lower
', N, K, 1, A, LDA, SD, SE, U, LDU,
649 $ WORK, RESULT( 3 ) )
654 NTESTT = NTESTT + NTEST
659.GE.
IF( RESULT( JR )THRESH ) THEN
664.EQ.
IF( NERRS0 ) THEN
665 WRITE( NOUNIT, FMT = 9998 )'ssb
'
666 WRITE( NOUNIT, FMT = 9997 )
667 WRITE( NOUNIT, FMT = 9996 )
668 WRITE( NOUNIT, FMT = 9995 )'symmetric
'
669 WRITE( NOUNIT, FMT = 9994 )'orthogonal
', '''',
670 $ 'transpose
', ( '''', J = 1, 4 )
673 WRITE( NOUNIT, FMT = 9993 )N, K, IOLDSD, JTYPE,
684 CALL SLASUM( 'ssb
', NOUNIT, NERRS, NTESTT )
687 9999 FORMAT( ' schksb:
', A, ' returned
', I6, '', / 9X, 'n
',
688 $ I6, ', jtype=
', I6, ', iseed=(
', 3( I5, ',
' ), I5, ')
' )
690 9998 FORMAT( / 1X, A3,
691 $ ' -- real symmetric banded tridiagonal reduction routines
' )
692 9997 FORMAT( ' matrix types(see
schksb for details):
' )
694 9996 FORMAT( / ' special matrices:
',
695 $ / ' 1=zero matrix.
',
696 $ ' 5=diagonal: clustered entries.
',
697 $ / ' 2=identity matrix.
',
698 $ ' 6=diagonal: large, evenly spaced.
',
699 $ / ' 3=diagonal: evenly spaced entries.
',
700 $ ' 7=diagonal: small, evenly spaced.
',
701 $ / ' 4=diagonal: geometr. spaced entries.
' )
702 9995 FORMAT( ' dense
', A, ' banded matrices:
',
703 $ / ' 8=evenly spaced eigenvals.
',
704 $ ' 12=small, evenly spaced eigenvals.
',
705 $ / ' 9=geometrically spaced eigenvals.
',
706 $ ' 13=matrix with random o(1) entries.
',
707 $ / ' 10=clustered eigenvalues.
',
708 $ ' 14=matrix with large random entries.
',
709 $ / ' 11=large, evenly spaced eigenvals.
',
710 $ ' 15=matrix with small
' )
712 9994 FORMAT( / ' tests performed: (s is tridiag, u is
', A, '',
713 $ / 20X, A, ' means
', A, '.
', / ' uplo=
''u
'':
',
714 $ / ' 1= | a - u s u', a1, ' | / ( |a| n ulp )
',
715 $ ' 2= | i - u u
', A1, ' | / ( n ulp )
', / ' uplo=
''l
'':
',
716 $ / ' 3= | a - u s u
', A1, ' | / ( |a| n ulp )
',
717 $ ' 4= | i - u u
', A1, ' | / ( n ulp )
' )
718 9993 FORMAT( ' n=
', I5, ', k=
', I4, ',
seed=
', 4( I4, ',
' ), ' type ',
719 $ I2, ', test(
', I2, ')=
', G10.3 )
subroutine slatmr(m, n, dist, iseed, sym, d, mode, cond, dmax, rsign, grade, dl, model, condl, dr, moder, condr, pivtng, ipivot, kl, ku, sparse, anorm, pack, a, lda, iwork, info)
SLATMR
subroutine slatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
SLATMS
subroutine schksb(nsizes, nn, nwdths, kk, ntypes, dotype, iseed, thresh, nounit, a, lda, sd, se, u, ldu, work, lwork, result, info)
SCHKSB