131 SUBROUTINE dlattr( IMAT, UPLO, TRANS, DIAG, ISEED, N, A, LDA, B,
139 CHARACTER DIAG, TRANS, UPLO
140 INTEGER IMAT, INFO, LDA, N
144 DOUBLE PRECISION A( LDA, * ), B( * ), WORK( * )
150 DOUBLE PRECISION ONE, TWO, ZERO
151 parameter( one = 1.0d+0, two = 2.0d+0, zero = 0.0d+0 )
157 INTEGER I, IY, J, JCOUNT, KL, KU,
158 DOUBLE PRECISION 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
165 DOUBLE PRECISION DLAMCH, DLARND
166 EXTERNAL lsame, idamax, dlamch, dlarnd
173 INTRINSIC abs, dble,
max, sign, sqrt
177 path( 1: 1 ) =
'Double precision'
179 unfl = dlamch(
'Safe minimum' )
180 ulp = dlamch(
'Epsilon' )*dlamch(
'Base' )
182 bignum = ( one-ulp ) / smlnum
183 CALL dlabad( smlnum, bignum )
184 IF( ( imat.GE.7 .AND. imat.LE.10 ) .OR. imat.EQ.18 )
THEN
198 upper = lsame( uplo,
'U' )
200 CALL dlatb4( path, imat, n, n,
TYPE, kl, ku, anorm, mode,
203 CALL dlatb4( path, -imat, n, n,
TYPE, kl, ku, anorm, mode,
210 CALL dlatms( n, n, dist, iseed,
TYPE, b, mode, cndnum, anorm,
211 $ kl, ku,
'No packing', a, lda, work, info )
218 ELSE IF( imat.EQ.7 )
THEN
241 ELSE IF( imat.LE.10 )
THEN
320 plus2 = star1 / plus1
326 plus1 = star1 / plus2
327 rexp = dlarnd( 2, iseed )
328 star1 = star1*( sfac**rexp )
329 IF( rexp.LT.zero )
THEN
330 star1 = -sfac**( one-rexp )
332 star1 = sfac**( one+rexp )
337 x = sqrt( cndnum ) - 1 / sqrt( cndnum )
339 y = sqrt( 2.d0 / ( n-2 ) )*x
347 CALL dcopy( n-3, work, 1, a( 2, 3 ), lda+1 )
349 $
CALL dcopy( n-4, work( n+1 ), 1, a( 2, 4 ), lda+1 )
358 CALL dcopy( n-3, work, 1, a( 3, 2 ), lda+1 )
360 $
CALL dcopy( n-4, work( n+1 ), 1, a( 4, 2 ), lda+1 )
375 CALL drotg( ra, rb, c, s )
380 $
CALL drot( n-j-1, a( j, j+2 ), lda, a( j+1, j+2 ),
386 $
CALL drot( j-1, a( 1, j+1 ), 1, a( 1, j ), 1, -c, -s )
390 a( j, j+1 ) = -a( j, j+1 )
396 CALL drotg( ra, rb, c, s )
401 $
CALL drot( n-j-1, a( j+2, j+1 ), 1, a( j+2, j ), 1, c,
407 $
CALL drot( j-1, a( j, 1 ), lda, a( j+1, 1 ), lda
412 a( j+1, j ) = -a( j+1, j )
420 ELSE IF( imat.EQ.11 )
THEN
428 CALL dlarnv( 2, iseed, j, a( 1, j ) )
429 a( j, j ) = sign( two, a( j, j ) )
433 CALL dlarnv( 2, iseed, n-j+1, a( j, j ) )
434 a( j, j ) = sign( two, a( j, j ) )
440 CALL dlarnv( 2, iseed, n, b )
441 iy = idamax( n, b, 1 )
442 bnorm = abs( b( iy ) )
443 bscal = bignum /
max( one, bnorm )
444 CALL dscal( n, bscal, b, 1 )
446 ELSE IF( imat.EQ.12 )
THEN
452 CALL dlarnv( 2, iseed, n, b )
453 tscal = one /
max( one, dble( n-1 ) )
456 CALL dlarnv( 2, iseed, j, a( 1, j ) )
457 CALL dscal( j-1, tscal, a( 1, j ), 1 )
458 a( j, j ) = sign( one, a( j, j ) )
460 a( n, n ) = smlnum*a( n, n )
463 CALL dlarnv( 2, iseed, n-j+1, a( j, j ) )
465 $
CALL dscal( n-j, tscal, a( j+1, j ), 1 )
466 a( j, j ) = sign( one, a( j, j ) )
468 a( 1, 1 ) = smlnum*a( 1, 1 )
471 ELSE IF( imat.EQ.13 )
THEN
477 CALL dlarnv( 2, iseed, n, b )
480 CALL dlarnv( 2, iseed, j, a( 1, j ) )
481 a( j, j ) = sign( one, a( j, j ) )
483 a( n, n ) = smlnum*a( n, n )
486 CALL dlarnv( 2, iseed, n-j+1, a( j, j ) )
487 a( j, j ) = sign( one, a( j, j ) )
489 a( 1, 1 ) = smlnum*a( 1, 1 )
492 ELSE IF( imat.EQ.14 )
THEN
504 IF( jcount.LE.2 )
THEN
519 IF( jcount.LE.2 )
THEN
540 DO 250 i = 1, n - 1, 2
546 ELSE IF( imat.EQ.15 )
THEN
552 texp = one /
max( one, dble( n-1 ) )
554 CALL dlarnv( 2, iseed, n, b )
577 ELSE IF( imat.EQ.16 )
THEN
584 CALL dlarnv( 2, iseed, j, a( 1, j ) )
586 a( j, j ) = sign( two
593 CALL dlarnv( 2, iseed, n-j+1, a( j, j ) )
595 a( j, j ) = sign( two, a( j, j ) )
601 CALL dlarnv( 2, iseed, n, b )
602 CALL dscal( n, two, b, 1 )
604 ELSE IF( imat.EQ.17 )
THEN
612 tscal = ( one-ulp ) / tscal
621 a( 1, j ) = -tscal / dble( n+1 )
623 b( j ) = texp*( one-ulp )
624 a( 1, j-1 ) = -( tscal / dble( n+1 ) ) / dble( n+2 )
626 b( j-1 ) = texp*dble( n*n+n-1 )
629 b( 1 ) = ( dble( n+1 ) / dble( n+2 ) )*tscal
631 DO 350 j = 1, n - 1, 2
632 a( n, j ) = -tscal / dble( n+1 )
634 b( j ) = texp*( one-ulp )
635 a( n, j+1 ) = -( tscal / dble( n+1 ) ) / dble( n+2 )
637 b( j+1 ) = texp*dble( n*n+n-1 )
640 b( n ) = ( dble( n+1 ) / dble( n+2 ) )*tscal
643 ELSE IF( imat.EQ.18 )
THEN
651 CALL dlarnv( 2, iseed, j-1, a( 1, j ) )
657 $
CALL dlarnv( 2, iseed, n-j, a( j+1, j ) )
664 CALL dlarnv( 2, iseed, n, b )
665 iy = idamax( n, b, 1 )
666 bnorm = abs( b( iy ) )
667 bscal = bignum /
max( one, bnorm )
668 CALL dscal( n, bscal, b, 1 )
670 ELSE IF( imat.EQ.19 )
THEN
677 tleft = bignum /
max( one, dble( n-1 ) )
678 tscal = bignum*( dble( n-1 ) /
max( one, dble( n ) ) )
681 CALL dlarnv( 2, iseed, j, a( 1, j ) )
683 a( i, j ) = sign( tleft, a( i, j ) ) + tscal*a( i, j )
688 CALL dlarnv( 2, iseed, n-j+1, a( j, j ) )
690 a( i, j ) = sign( tleft, a( i, j ) ) + tscal*a( i, j )
694 CALL dlarnv( 2, iseed, n, b )
695 CALL dscal( n, two, b, 1 )
700 IF( .NOT.lsame( trans,
'N' ) )
THEN
703 CALL dswap( n-2*j+1, a( j, j ), lda, a( j+1, n-j+1 ),
708 CALL dswap( n-2*j+1, a( j, j ), 1, a( n-j+1, j+1 ),