136 SUBROUTINE clattr( IMAT, UPLO, TRANS, DIAG, ISEED, N, A, LDA, B,
137 $ WORK, RWORK, INFO )
144 CHARACTER DIAG, TRANS, UPLO
145 INTEGER IMAT, INFO, LDA, N
150 COMPLEX ( LDA, * ), B( * ), WORK( * )
157 parameter( one = 1.0e+0, two = 2.0e+0, zero = 0.0e+0 )
163 INTEGER I, IY, J, JCOUNT, KL, KU, MODE
164 REAL ANORM, BIGNUM, BNORM, BSCAL, C, CNDNUM, REXP,
165 $ sfac, smlnum, texp, tleft, tscal, ulp, unfl, x,
167 COMPLEX PLUS1, PLUS2, RA, RB, S, STAR1
174 EXTERNAL lsame, icamax, slamch, slarnd, clarnd
181 INTRINSIC abs,
cmplx, conjg,
max, real, sqrt
185 path( 1: 1 ) =
'Complex precision'
187 unfl = slamch(
'Safe minimum' )
188 ulp = slamch(
'Epsilon' )*slamch(
'Base' )
190 bignum = ( one-ulp ) / smlnum
191 CALL slabad( smlnum, bignum )
192 IF( ( imat.GE.7 .AND. imat.LE.10 ) .OR. imat.EQ.18 )
THEN
206 upper = lsame( uplo,
'U' )
208 CALL clatb4( path, imat, n, n,
TYPE, kl, ku, anorm, mode,
211 CALL clatb4( path, -imat, n, n,
TYPE, kl, ku, anorm, mode,
218 CALL clatms( n, n, dist, iseed,
TYPE, rwork, mode, cndnum,
219 $ anorm, kl, ku,
'No packing', a, lda, work, info )
226 ELSE IF( imat.EQ.7 )
THEN
249 ELSE IF( imat.LE.10 )
THEN
324 star1 = 0.25*clarnd( 5, iseed )
326 plus1 = sfac*clarnd( 5, iseed )
328 plus2 = star1 / plus1
334 plus1 = star1 / plus2
335 rexp = slarnd( 2, iseed )
336 IF( rexp.LT.zero )
THEN
337 star1 = -sfac**( one-rexp )*clarnd( 5, iseed )
339 star1 = sfac**( one+rexp )*clarnd( 5, iseed )
344 x = sqrt( cndnum ) - 1 / sqrt( cndnum )
346 y = sqrt( 2. / ( n-2 ) )*x
354 CALL ccopy( n-3, work, 1, a( 2, 3 ), lda+1 )
356 $
CALL ccopy( n-4, work( n+1 ), 1, a( 2, 4 ), lda+1 )
365 CALL ccopy( n-3, work, 1, a( 3, 2 ), lda+1 )
367 $
CALL ccopy( n-4, work( n+1 ), 1, a( 4, 2 ), lda+1 )
382 CALL crotg( ra, rb, c, s )
387 $
CALL crot( n-j-1, a( j, j+2 ), lda, a( j+1, j+2 ),
393 $
CALL crot( j-1, a( 1, j+1 ), 1, a( 1, j ), 1, -c, -s )
397 a( j, j+1 ) = -a( j, j+1 )
403 CALL crotg( ra, rb, c, s )
409 $
CALL crot( n-j-1, a( j+2, j+1 ), 1, a( j+2, j ), 1, c,
415 $
CALL crot( j-1, a( j, 1 ), lda, a( j+1, 1 ), lda, -c,
420 a( j+1, j ) = -a( j+1, j )
428 ELSE IF( imat.EQ.11 )
THEN
436 CALL clarnv( 4, iseed, j-1, a( 1, j ) )
437 a( j, j ) = clarnd( 5, iseed )*two
442 $
CALL clarnv( 4, iseed, n-j, a( j+1, j ) )
443 a( j, j ) = clarnd( 5, iseed )*two
449 CALL clarnv( 2, iseed, n, b )
450 iy = icamax( n, b, 1 )
451 bnorm = abs( b( iy ) )
452 bscal = bignum /
max( one, bnorm )
453 CALL csscal( n, bscal, b, 1 )
455 ELSE IF( imat.EQ.12 )
THEN
461 CALL clarnv( 2, iseed, n, b )
462 tscal = one /
max( one, real( n-1 ) )
465 CALL clarnv( 4, iseed, j-1, a( 1, j ) )
466 CALL csscal( j-1, tscal, a( 1, j ), 1 )
467 a( j, j ) = clarnd( 5, iseed )
469 a( n, n ) = smlnum*a( n, n )
473 CALL clarnv( 4, iseed, n-j, a( j+1, j ) )
474 CALL csscal( n-j, tscal, a( j+1, j ), 1 )
476 a( j, j ) = clarnd( 5, iseed )
478 a( 1, 1 ) = smlnum*a( 1, 1 )
481 ELSE IF( imat.EQ.13 )
THEN
487 CALL clarnv( 2, iseed, n, b )
490 CALL clarnv( 4, iseed, j-1, a( 1, j ) )
491 a( j, j ) = clarnd( 5, iseed )
493 a( n, n ) = smlnum*a( n, n )
497 $
CALL clarnv( 4, iseed, n-j, a( j+1, j ) )
498 a( j, j ) = clarnd( 5, iseed )
500 a( 1, 1 ) = smlnum*a( 1, 1 )
503 ELSE IF( imat.EQ.14 )
THEN
515 IF( jcount.LE.2 )
THEN
516 a( j, j ) = smlnum*clarnd( 5, iseed )
518 a( j, j ) = clarnd( 5, iseed )
530 IF( jcount.LE.2 )
THEN
531 a( j, j ) = smlnum*clarnd( 5, iseed )
533 a( j, j ) = clarnd( 5, iseed )
547 b( i-1 ) = smlnum*clarnd( 5, iseed )
551 DO 250 i = 1, n - 1, 2
553 b( i+1 ) = smlnum*clarnd( 5, iseed )
557 ELSE IF( imat.EQ.15 )
THEN
563 texp = one /
max( one, real( n-1 ) )
565 CALL clarnv( 4, iseed, n, b )
572 $ a( j-1, j ) =
cmplx( -one, -one )
573 a( j, j ) = tscal*clarnd( 5, iseed )
575 b( n ) =
cmplx( one, one )
582 $ a( j+1, j ) =
cmplx( -one, -one )
583 a( j, j ) = tscal*clarnd( 5, iseed )
585 b( 1 ) =
cmplx( one, one )
588 ELSE IF( imat.EQ.16 )
THEN
595 CALL clarnv( 4, iseed, j-1, a( 1, j ) )
597 a( j, j ) = clarnd( 5, iseed )*two
605 $
CALL clarnv( 4, iseed, n-j, a( j+1, j ) )
607 a( j, j ) = clarnd( 5, iseed )*two
613 CALL clarnv( 2, iseed, n, b )
614 CALL csscal( n, two, b, 1 )
616 ELSE IF( imat.EQ.17 )
THEN
624 tscal = ( one-ulp ) / tscal
633 a( 1, j ) = -tscal / real( n+1 )
635 b( j ) = texp*( one-ulp )
636 a( 1, j-1 ) = -( tscal / real( n+1 ) ) / real( n+2 )
638 b( j-1 ) = texp*real( n*n+n-1 )
641 b( 1 ) = ( real( n+1 ) / real( n+2 ) )*tscal
643 DO 350 j = 1, n - 1, 2
644 a( n, j ) = -tscal / real( n+1 )
646 b( j ) = texp*( one-ulp )
647 a( n, j+1 ) = -( tscal / real( n+1 ) ) / real
649 b( j+1 ) = texp*real( n*n+n-1 )
652 b( n ) = ( real( n+1 ) / real( n+2 ) )*tscal
655 ELSE IF( imat.EQ.18 )
THEN
663 CALL clarnv( 4, iseed, j-1, a( 1, j ) )
669 $
CALL clarnv( 4, iseed, n-j, a( j+1, j ) )
676 CALL clarnv( 2, iseed, n, b )
677 iy = icamax( n, b, 1 )
678 bnorm = abs( b( iy ) )
679 bscal = bignum /
max( one, bnorm )
680 CALL csscal( n, bscal, b, 1 )
682 ELSE IF( imat.EQ.19 )
THEN
689 tleft = bignum /
max( one, real( n-1 ) )
690 tscal = bignum*( real( n-1 ) /
max( one, real( n ) ) )
693 CALL clarnv( 5, iseed, j, a( 1, j ) )
694 CALL slarnv( 1, iseed, j, rwork )
696 a( i, j ) = a( i, j )*( tleft+rwork( i )*tscal )
701 CALL clarnv( 5, iseed, n-j+1, a( j, j ) )
702 CALL slarnv( 1, iseed, n-j+1, rwork )
704 a( i, j ) = a( i, j )*( tleft+rwork( i-j+1 )*tscal )
708 CALL clarnv( 2, iseed, n, b )
709 CALL csscal( n, two, b, 1 )
714 IF( .NOT.lsame( trans,
'N' ) )
THEN
717 CALL cswap( n-2*j+1, a( j, j ), lda, a( j+1, n-j+1 ),
722 CALL cswap( n-2*j+1, a( j, j ), 1, a( n-j+1, j+1 ),