131      SUBROUTINE slattr( IMAT, UPLO, TRANS, DIAG, ISEED, N, A, LDA, B,
 
  139      CHARACTER          DIAG, TRANS, UPLO
 
  140      INTEGER            IMAT, INFO, LDA, N
 
  144      REAL               A( LDA, * ), B( * ), WORK( * )
 
  151      parameter( one = 1.0e+0, two = 2.0e+0, zero = 0.0e+0 )
 
  157      INTEGER            I, IY, J, JCOUNT, KL, KU, MODE
 
  158      REAL               ANORM, BIGNUM, BNORM, BSCAL, C, CNDNUM, PLUS1,
 
  159     $                   plus2, ra, rb, rexp, s, sfac, smlnum, star1,
 
  160     $                   texp, tleft, tscal, ulp, unfl, x, y, z
 
  166      EXTERNAL           lsame, isamax, slamch, slarnd
 
  173      INTRINSIC          abs, max, real, sign, sqrt
 
  177      path( 1: 1 ) = 
'Single precision' 
  179      unfl = slamch( 
'Safe minimum' )
 
  180      ulp = slamch( 
'Epsilon' )*slamch( 
'Base' )
 
  182      bignum = ( one-ulp ) / smlnum
 
  183      IF( ( imat.GE.7 .AND. imat.LE.10 ) .OR. imat.EQ.18 ) 
THEN 
  197      upper = lsame( uplo, 
'U' )
 
  199         CALL slatb4( path, imat, n, n, 
TYPE, kl, ku, anorm, mode,
 
  202         CALL slatb4( path, -imat, n, n, 
TYPE, kl, ku, anorm, mode,
 
  209         CALL slatms( n, n, dist, iseed, 
TYPE, b, mode, cndnum, anorm,
 
  210     $                kl, ku, 
'No packing', a, lda, work, info )
 
  217      ELSE IF( imat.EQ.7 ) 
THEN 
  240      ELSE IF( imat.LE.10 ) 
THEN 
  319            plus2 = star1 / plus1
 
  325               plus1 = star1 / plus2
 
  326               rexp = slarnd( 2, iseed )
 
  327               star1 = star1*( sfac**rexp )
 
  328               IF( rexp.LT.zero ) 
THEN 
  329                  star1 = -sfac**( one-rexp )
 
  331                  star1 = sfac**( one+rexp )
 
  336         x = sqrt( cndnum ) - 1 / sqrt( cndnum )
 
  338            y = sqrt( 2. / ( n-2 ) )*x
 
  346               CALL scopy( n-3, work, 1, a( 2, 3 ), lda+1 )
 
  348     $            
CALL scopy( n-4, work( n+1 ), 1, a( 2, 4 ), lda+1 )
 
  357               CALL scopy( n-3, work, 1, a( 3, 2 ), lda+1 )
 
  359     $            
CALL scopy( n-4, work( n+1 ), 1, a( 4, 2 ), lda+1 )
 
  374               CALL srotg( ra, rb, c, s )
 
  379     $            
CALL srot( n-j-1, a( j, j+2 ), lda, a( j+1, j+2 ),
 
  385     $            
CALL srot( j-1, a( 1, j+1 ), 1, a( 1, j ), 1, -c, -s )
 
  389               a( j, j+1 ) = -a( j, j+1 )
 
  395               CALL srotg( ra, rb, c, s )
 
  400     $            
CALL srot( n-j-1, a( j+2, j+1 ), 1, a( j+2, j ), 1, c,
 
  406     $            
CALL srot( j-1, a( j, 1 ), lda, a( j+1, 1 ), lda, -c,
 
  411               a( j+1, j ) = -a( j+1, j )
 
  419      ELSE IF( imat.EQ.11 ) 
THEN 
  427               CALL slarnv( 2, iseed, j, a( 1, j ) )
 
  428               a( j, j ) = sign( two, a( j, j ) )
 
  432               CALL slarnv( 2, iseed, n-j+1, a( j, j ) )
 
  433               a( j, j ) = sign( two, a( j, j ) )
 
  439         CALL slarnv( 2, iseed, n, b )
 
  440         iy = isamax( n, b, 1 )
 
  441         bnorm = abs( b( iy ) )
 
  442         bscal = bignum / max( one, bnorm )
 
  443         CALL sscal( n, bscal, b, 1 )
 
  445      ELSE IF( imat.EQ.12 ) 
THEN 
  451         CALL slarnv( 2, iseed, n, b )
 
  452         tscal = one / max( one, real( n-1 ) )
 
  455               CALL slarnv( 2, iseed, j, a( 1, j ) )
 
  456               CALL sscal( j-1, tscal, a( 1, j ), 1 )
 
  457               a( j, j ) = sign( one, a( j, j ) )
 
  459            a( n, n ) = smlnum*a( n, n )
 
  462               CALL slarnv( 2, iseed, n-j+1, a( j, j ) )
 
  464     $            
CALL sscal( n-j, tscal, a( j+1, j ), 1 )
 
  465               a( j, j ) = sign( one, a( j, j ) )
 
  467            a( 1, 1 ) = smlnum*a( 1, 1 )
 
  470      ELSE IF( imat.EQ.13 ) 
THEN 
  476         CALL slarnv( 2, iseed, n, b )
 
  479               CALL slarnv( 2, iseed, j, a( 1, j ) )
 
  480               a( j, j ) = sign( one, a( j, j ) )
 
  482            a( n, n ) = smlnum*a( n, n )
 
  485               CALL slarnv( 2, iseed, n-j+1, a( j, j ) )
 
  486               a( j, j ) = sign( one, a( j, j ) )
 
  488            a( 1, 1 ) = smlnum*a( 1, 1 )
 
  491      ELSE IF( imat.EQ.14 ) 
THEN 
  503               IF( jcount.LE.2 ) 
THEN 
  518               IF( jcount.LE.2 ) 
THEN 
  539            DO 250 i = 1, n - 1, 2
 
  545      ELSE IF( imat.EQ.15 ) 
THEN 
  551         texp = one / max( one, real( n-1 ) )
 
  553         CALL slarnv( 2, iseed, n, b )
 
  576      ELSE IF( imat.EQ.16 ) 
THEN 
  583               CALL slarnv( 2, iseed, j, a( 1, j ) )
 
  585                  a( j, j ) = sign( two, a( j, j ) )
 
  592               CALL slarnv( 2, iseed, n-j+1, a( j, j ) )
 
  594                  a( j, j ) = sign( two, a( j, j ) )
 
  600         CALL slarnv( 2, iseed, n, b )
 
  601         CALL sscal( n, two, b, 1 )
 
  603      ELSE IF( imat.EQ.17 ) 
THEN 
  611         tscal = ( one-ulp ) / tscal
 
  620               a( 1, j ) = -tscal / real( n+1 )
 
  622               b( j ) = texp*( one-ulp )
 
  623               a( 1, j-1 ) = -( tscal / real( n+1 ) ) / real( n+2 )
 
  625               b( j-1 ) = texp*real( n*n+n-1 )
 
  628            b( 1 ) = ( real( n+1 ) / real( n+2 ) )*tscal
 
  630            DO 350 j = 1, n - 1, 2
 
  631               a( n, j ) = -tscal / real( n+1 )
 
  633               b( j ) = texp*( one-ulp )
 
  634               a( n, j+1 ) = -( tscal / real( n+1 ) ) / real( n+2 )
 
  636               b( j+1 ) = texp*real( n*n+n-1 )
 
  639            b( n ) = ( real( n+1 ) / real( n+2 ) )*tscal
 
  642      ELSE IF( imat.EQ.18 ) 
THEN 
  650               CALL slarnv( 2, iseed, j-1, a( 1, j ) )
 
  656     $            
CALL slarnv( 2, iseed, n-j, a( j+1, j ) )
 
  663         CALL slarnv( 2, iseed, n, b )
 
  664         iy = isamax( n, b, 1 )
 
  665         bnorm = abs( b( iy ) )
 
  666         bscal = bignum / max( one, bnorm )
 
  667         CALL sscal( n, bscal, b, 1 )
 
  669      ELSE IF( imat.EQ.19 ) 
THEN 
  676         tleft = bignum / max( one, real( n-1 ) )
 
  677         tscal = bignum*( real( n-1 ) / max( one, real( n ) ) )
 
  680               CALL slarnv( 2, iseed, j, a( 1, j ) )
 
  682                  a( i, j ) = sign( tleft, a( i, j ) ) + tscal*a( i, j )
 
  687               CALL slarnv( 2, iseed, n-j+1, a( j, j ) )
 
  689                  a( i, j ) = sign( tleft, a( i, j ) ) + tscal*a( i, j )
 
  693         CALL slarnv( 2, iseed, n, b )
 
  694         CALL sscal( n, two, b, 1 )
 
  699      IF( .NOT.lsame( trans, 
'N' ) ) 
THEN 
  702               CALL sswap( n-2*j+1, a( j, j ), lda, a( j+1, n-j+1 ),
 
  707               CALL sswap( n-2*j+1, a( j, j ), 1, a( n-j+1, j+1 ),