295 SUBROUTINE cchkhb( NSIZES, NN, NWDTHS, KK, NTYPES, DOTYPE, ISEED,
296 $ THRESH, NOUNIT, A, LDA, SD, SE, U, LDU, WORK,
297 $ LWORK, RWORK, RESULT, INFO )
304 INTEGER INFO, LDA, LDU, LWORK, NOUNIT, NSIZES, NTYPES,
310 INTEGER ISEED( 4 ), KK( * ), NN( * )
311 REAL RESULT( * ), RWORK( * ), SD( * ), SE( * )
312 COMPLEX A( LDA, * ), U( LDU, * ), WORK( * )
319 PARAMETER ( CZERO = ( 0.0e+0, 0.0e+0 ),
320 $ cone = ( 1.0e+0, 0.0e+0 ) )
321 REAL ZERO, ONE, TWO, TEN
322 PARAMETER ( ZERO = 0.0e+0, one = 1.0e+0, two = 2.0e+0,
325 PARAMETER ( HALF = one / two )
327 parameter( maxtyp = 15 )
330 LOGICAL BADNN, BADNNB
331 INTEGER I, IINFO, IMODE, ITYPE, J, JC, JCOL, JR, JSIZE,
332 $ jtype, jwidth, k, kmax, mtypes, n, nerrs,
333 $ nmats, nmax, ntest, ntestt
334 REAL ANINV, ANORM, COND, OVFL, RTOVFL, RTUNFL,
335 $ TEMP1, ULP, ULPINV, UNFL
338 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), KMAGN( MAXTYP ),
339 $ KMODE( MAXTYP ), KTYPE( MAXTYP )
350 INTRINSIC abs, conjg,
max,
min, real, sqrt
353 DATA ktype / 1, 2, 5*4, 5*5, 3*8 /
354 DATA kmagn / 2*1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
356 DATA kmode / 2*0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
371 nmax =
max( nmax, nn( j ) )
379 kmax =
max( kmax, kk( j ) )
383 kmax =
min( nmax-1, kmax )
387 IF( nsizes.LT.0 )
THEN
389 ELSE IF( badnn )
THEN
391 ELSE IF( nwdths.LT.0 )
THEN
393 ELSE IF( badnnb )
THEN
395 ELSE IF( ntypes.LT.0 )
THEN
397 ELSE IF( lda.LT.kmax+1 )
THEN
399 ELSE IF( ldu.LT.nmax )
THEN
401 ELSE IF( (
max( lda, nmax )+1 )*nmax.GT.lwork )
THEN
406 CALL xerbla(
'CCHKHB', -info )
412 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 .OR. nwdths.EQ.0 )
417 unfl = slamch(
'Safe minimum' )
419 ulp = slamch(
'Epsilon' )*slamch(
'Base' )
421 rtunfl = sqrt( unfl )
422 rtovfl = sqrt( ovfl )
429 DO 190 jsize = 1, nsizes
431 aninv = one / real(
max( 1, n ) )
433 DO 180 jwidth = 1, nwdths
437 k =
max( 0,
min( n-1, k ) )
439 IF( nsizes.NE.1 )
THEN
440 mtypes =
min( maxtyp, ntypes )
442 mtypes =
min( maxtyp+1, ntypes )
445 DO 170 jtype = 1, mtypes
446 IF( .NOT.dotype( jtype ) )
452 ioldsd( j ) = iseed( j )
472 IF( mtypes.GT.maxtyp )
475 itype = ktype( jtype )
476 imode = kmode( jtype )
480 GO TO ( 40, 50, 60 )kmagn( jtype )
487 anorm = ( rtovfl*ulp )*aninv
491 anorm = rtunfl*n*ulpinv
496 CALL claset(
'Full', lda, n, czero, czero, a, lda )
498 IF( jtype.LE.15 )
THEN
501 cond = ulpinv*aninv / ten
508 IF( itype.EQ.1 )
THEN
511 ELSE IF( itype.EQ.2 )
THEN
516 a( k+1, jcol ) = anorm
519 ELSE IF( itype.EQ.4 )
THEN
523 CALL clatms( n, n,
'S', iseed,
'H', rwork, imode,
524 $ cond, anorm, 0, 0,
'Q', a( k+1, 1 ), lda,
527 ELSE IF( itype.EQ.5 )
THEN
531 CALL clatms( n, n,
'S', iseed,
'H', rwork, imode,
532 $ cond, anorm, k, k,
'Q', a, lda, work,
535 ELSE IF( itype.EQ.7 )
THEN
539 CALL clatmr( n, n,
'S', iseed,
'H', work, 6, one,
540 $ cone,
'T',
'N', work( n+1 ), 1, one,
541 $ work( 2*n+1 ), 1, one,
'N', idumma, 0, 0,
542 $ zero, anorm,
'Q', a( k+1, 1 ), lda,
545 ELSE IF( itype.EQ.8 )
THEN
549 CALL clatmr( n, n,
'S', iseed,
'H', work, 6, one,
550 $ cone,
'T',
'N', work( n+1 ), 1, one,
551 $ work( 2*n+1 ), 1, one,
'N', idumma, k, k,
552 $ zero, anorm,
'Q', a, lda, idumma, iinfo )
554 ELSE IF( itype.EQ.9 )
THEN
558 CALL clatms( n, n,
'S', iseed,
'P', rwork, imode,
559 $ cond, anorm, k, k,
'Q', a, lda,
560 $ work( n+1 ), iinfo )
562 ELSE IF( itype.EQ.10 )
THEN
568 CALL clatms( n, n,
'S', iseed,
'P', rwork, imode,
569 $ cond, anorm, 1, 1,
'Q', a( k, 1 ), lda,
572 temp1 = abs( a( k, i ) ) /
573 $ sqrt( abs( a( k+1, i-1 )*a( k+1, i ) ) )
574 IF( temp1.GT.half )
THEN
575 a( k, i ) = half*sqrt( abs( a( k+1,
576 $ i-1 )*a( k+1, i ) ) )
585 IF( iinfo.NE.0 )
THEN
586 WRITE( nounit, fmt = 9999 )
'Generator', iinfo, n,
596 CALL clacpy(
' ', k+1, n, a, lda, work, lda )
599 CALL chbtrd(
'V',
'U', n, k, work, lda, sd, se, u, ldu,
600 $ work( lda*n+1 ), iinfo )
602 IF( iinfo.NE.0 )
THEN
603 WRITE( nounit, fmt = 9999 )
'CHBTRD(U)', iinfo, n,
606 IF( iinfo.LT.0 )
THEN
616 CALL chbt21(
'Upper', n, k, 1, a, lda, sd, se, u, ldu,
617 $ work, rwork, result( 1 ) )
623 DO 110 jr = 0,
min( k, n-jc )
624 a( jr+1, jc ) = conjg( a( k+1-jr, jc+jr ) )
627 DO 140 jc = n + 1 - k, n
628 DO 130 jr =
min( k, n-jc ) + 1, k
635 CALL clacpy(
' ', k+1, n, a, lda, work, lda )
638 CALL chbtrd(
'V', 'l
', N, K, WORK, LDA, SD, SE, U, LDU,
639 $ WORK( LDA*N+1 ), IINFO )
641.NE.
IF( IINFO0 ) THEN
642 WRITE( NOUNIT, FMT = 9999 )'chbtrd(l)
', IINFO, N,
645.LT.
IF( IINFO0 ) THEN
656 CALL CHBT21( 'lower
', N, K, 1, A, LDA, SD, SE, U, LDU,
657 $ WORK, RWORK, RESULT( 3 ) )
662 NTESTT = NTESTT + NTEST
667.GE.
IF( RESULT( JR )THRESH ) THEN
672.EQ.
IF( NERRS0 ) THEN
673 WRITE( NOUNIT, FMT = 9998 )'chb
'
674 WRITE( NOUNIT, FMT = 9997 )
675 WRITE( NOUNIT, FMT = 9996 )
676 WRITE( NOUNIT, FMT = 9995 )'hermitian
'
677 WRITE( NOUNIT, FMT = 9994 )'unitary
', '*
',
678 $ 'conjugate transpose
', ( '*
', J = 1, 4 )
681 WRITE( NOUNIT, FMT = 9993 )N, K, IOLDSD, JTYPE,
692 CALL SLASUM( 'chb
', NOUNIT, NERRS, NTESTT )
695 9999 FORMAT( ' cchkhb:
', A, ' returned info=
', I6, '.
', / 9X, 'n=
',
696 $ I6, ', jtype=
', I6, ', iseed=(
', 3( I5, ',
' ), I5, ')
' )
697 9998 FORMAT( / 1X, A3,
698 $ ' --
Complex Hermitian Banded Tridiagonal Reduction Routines
'
700 9997 FORMAT( ' Matrix types (see SCHK23 for details):
' )
702 9996 FORMAT( / ' Special Matrices:
',
703 $ / ' 1=zero matrix.
',
704 $ ' 5=diagonal: clustered entries.
',
705 $ / ' 2=identity matrix.
',
706 $ ' 6=diagonal: large, evenly spaced.
',
707 $ / ' 3=diagonal: evenly spaced entries.
',
708 $ ' 7=diagonal: small, evenly spaced.
',
709 $ / ' 4=diagonal: geometr. spaced entries.
' )
710 9995 FORMAT( ' dense
', A, ' banded matrices:
',
711 $ / ' 8=evenly spaced eigenvals.
',
712 $ ' 12=small, evenly spaced eigenvals.
',
713 $ / ' 9=geometrically spaced eigenvals.
',
714 $ ' 13=matrix with random o(1) entries.
',
715 $ / ' 10=clustered eigenvalues.
',
716 $ ' 14=matrix with large random entries.
',
717 $ / ' 11=large, evenly spaced eigenvals.
',
718 $ ' 15=matrix with small random entries.
' )
720 9994 FORMAT( / ' tests performed: (s is tridiag, u is
', A, ',
',
721 $ / 20X, A, ' means
', A, '.
', / ' uplo=
''u
'':
',
722 $ / ' 1= | a - u s u
', A1, ' | / ( |a| n ulp )
',
723 $ ' 2= | i - u u
', A1, ' | / ( n ulp )
', / ' uplo=
''l
'':
',
724 $ / ' 3= | a - u s u
', A1, ' | / ( |a| n ulp )
',
725 $ ' 4= | i - u u
', A1, ' | / ( n ulp )
' )
726 9993 FORMAT( ' n=
', I5, ', k=
', I4, ',
seed=
', 4( I4, ',
' ), ' type ',
727 $ I2, ', test(
', I2, ')=
', G10.3 )
subroutine clatmr(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)
CLATMR