136 SUBROUTINE zlattr( IMAT, UPLO, TRANS, DIAG, ISEED, N, A, LDA, B,
137 $ WORK, RWORK, INFO )
144 CHARACTER DIAG, TRANS, UPLO
145 INTEGER IMAT, INFO, LDA, N
149 DOUBLE PRECISION RWORK( * )
150 COMPLEX*16 A( LDA, * ), B( * ), WORK( * )
156 DOUBLE PRECISION ONE, TWO, ZERO
157 parameter( one = 1.0d+0, two = 2.0d+0, zero = 0.0d+0 )
163 INTEGER I, IY, J, JCOUNT, KL, KU, MODE
164 DOUBLE PRECISION ANORM, BIGNUM, BNORM, BSCAL, , CNDNUM, REXP,
165 $ sfac, smlnum, texp, tleft, tscal, ulp, unfl, x,
167 COMPLEX*16 PLUS1, PLUS2, RA, RB, S, STAR1
172 DOUBLE PRECISION DLAMCH, DLARND
174 EXTERNAL lsame, izamax, dlamch, dlarnd, zlarnd
181 INTRINSIC abs, dble, dcmplx, dconjg,
max, sqrt
185 path( 1: 1 ) =
'Zomplex precision'
187 unfl = dlamch(
'Safe minimum' )
188 ulp = dlamch(
'Epsilon' )*dlamch(
'Base' )
190 bignum = ( one-ulp ) / smlnum
191 CALL dlabad( smlnum, bignum )
192 IF( ( imat.GE.7 .AND. imat.LE.10 ) .OR. imat.EQ.18 )
THEN
206 upper = lsame( uplo,
'U' )
208 CALL zlatb4( path, imat, n, n,
TYPE, kl, ku, anorm, mode,
211 CALL zlatb4( path, -imat, n, n,
TYPE, kl, ku, anorm, mode,
218 CALL zlatms( 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.25d0*zlarnd( 5, iseed )
326 plus1 = sfac*zlarnd( 5, iseed )
328 plus2 = star1 / plus1
334 plus1 = star1 / plus2
335 rexp = dlarnd( 2, iseed )
336 IF( rexp.LT.zero )
THEN
337 star1 = -sfac**( one-rexp )*zlarnd( 5, iseed )
339 star1 = sfac**( one+rexp )*zlarnd( 5, iseed )
344 x = sqrt( cndnum ) - 1 / sqrt( cndnum )
346 y = sqrt( 2.d0 / ( n-2 ) )*x
354 CALL zcopy( n-3, work, 1, a( 2, 3 ), lda+1 )
356 $
CALL zcopy( n-4, work( n+1 ), 1, a( 2, 4 ), lda+1 )
365 CALL zcopy( n-3, work, 1, a( 3, 2 ), lda+1 )
367 $
CALL zcopy( n-4, work( n+1 ), 1, a( 4, 2 ), lda+1 )
382 CALL zrotg( ra, rb, c, s )
387 $
CALL zrot( n-j-1, a( j, j+2 ), lda, a( j+1, j+2 ),
393 $
CALL zrot( j-1, a( 1, j+1 ), 1, a( 1, j ), 1, -c, -s )
397 a( j, j+1 ) = -a( j, j+1 )
403 CALL zrotg( ra, rb, c, s )
409 $
CALL zrot( n-j-1, a( j+2, j+1 ), 1, a( j+2, j ), 1, c,
415 $
CALL zrot( 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 zlarnv( 4, iseed, j-1, a( 1, j ) )
437 a( j, j ) = zlarnd( 5, iseed )*two
442 $
CALL zlarnv( 4, iseed, n-j, a( j+1, j ) )
443 a( j, j ) = zlarnd( 5, iseed )*two
449 CALL zlarnv( 2, iseed, n, b )
450 iy = izamax( n, b, 1 )
451 bnorm = abs( b( iy ) )
452 bscal = bignum /
max( one, bnorm )
453 CALL zdscal( n, bscal, b, 1 )
455 ELSE IF( imat.EQ.12 )
THEN
461 CALL zlarnv( 2, iseed, n, b )
462 tscal = one /
max( one, dble( n-1 ) )
465 CALL zlarnv( 4, iseed, j-1, a( 1, j ) )
466 CALL zdscal( j-1, tscal, a( 1, j ), 1 )
467 a( j, j ) = zlarnd( 5, iseed )
469 a( n, n ) = smlnum*a( n, n )
473 CALL zlarnv( 4, iseed, n-j, a( j+1, j ) )
474 CALL zdscal( n-j, tscal, a( j+1, j ), 1 )
476 a( j, j ) = zlarnd( 5, iseed )
478 a( 1, 1 ) = smlnum*a( 1, 1 )
481 ELSE IF( imat.EQ.13 )
THEN
487 CALL zlarnv( 2, iseed, n, b )
490 CALL zlarnv( 4, iseed, j-1, a( 1, j ) )
491 a( j, j ) = zlarnd( 5, iseed )
493 a( n, n ) = smlnum*a( n, n )
497 $
CALL zlarnv( 4, iseed, n-j, a( j+1, j ) )
498 a( j, j ) = zlarnd( 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*zlarnd( 5, iseed )
518 a( j, j ) = zlarnd( 5, iseed )
530 IF( jcount.LE.2 )
THEN
531 a( j, j ) = smlnum*zlarnd( 5, iseed )
533 a( j, j ) = zlarnd( 5, iseed )
547 b( i-1 ) = smlnum*zlarnd( 5, iseed )
551 DO 250 i = 1, n - 1, 2
553 b( i+1 ) = smlnum*zlarnd( 5, iseed )
557 ELSE IF( imat.EQ.15 )
THEN
563 texp = one /
max( one, dble( n-1 ) )
565 CALL zlarnv( 4, iseed, n, b )
572 $ a( j-1, j ) = dcmplx( -one, -one )
573 a( j, j ) = tscal*zlarnd( 5, iseed )
575 b( n ) = dcmplx( one, one )
582 $ a( j+1, j ) = dcmplx( -one, -one )
583 a( j, j ) = tscal*zlarnd( 5, iseed )
585 b( 1 ) = dcmplx( one, one )
588 ELSE IF( imat.EQ.16 )
THEN
595 CALL zlarnv( 4, iseed, j-1, a( 1, j ) )
597 a( j, j ) = zlarnd( 5, iseed )*two
605 $
CALL zlarnv( 4, iseed, n-j, a( j+1, j ) )
607 a( j, j ) = zlarnd( 5, iseed )*two
613 CALL zlarnv( 2, iseed, n, b )
614 CALL zdscal( n, two, b, 1 )
616 ELSE IF( imat.EQ.17 )
THEN
624 tscal = ( one-ulp ) / tscal
633 a( 1, j ) = -tscal / dble( n+1 )
635 b( j ) = texp*( one-ulp )
636 a( 1, j-1 ) = -( tscal / dble( n+1 ) ) / dble( n+2 )
638 b( j-1 ) = texp*dble( n*n+n-1 )
641 b( 1 ) = ( dble( n+1 ) / dble( n+2 ) )*tscal
643 DO 350 j = 1, n - 1, 2
644 a( n, j ) = -tscal / dble( n+1 )
646 b( j ) = texp*( one-ulp )
647 a( n, j+1 ) = -( tscal / dble( n+1 ) ) / dble( n+2 )
652 b( n ) = ( dble( n+1 ) / dble( n+2 ) )*tscal
655 ELSE IF( imat.EQ.18 )
THEN
669 $
CALL zlarnv( 4, iseed, n-j, a( j+1, j ) )
676 CALL zlarnv( 2, iseed, n, b )
677 iy = izamax( n, b, 1 )
678 bnorm = abs( b( iy ) )
679 bscal = bignum /
max( one, bnorm )
680 CALL zdscal( n, bscal, b, 1 )
682 ELSE IF( imat.EQ.19 )
THEN
689 tleft = bignum /
max( one, dble( n-1 ) )
690 tscal = bignum*( dble( n-1 ) /
max( one, dble( n ) ) )
693 CALL zlarnv( 5, iseed, j, a( 1, j ) )
694 CALL dlarnv( 1, iseed, j, rwork )
696 a( i, j ) = a( i, j )*( tleft+rwork( i )*tscal )
701 CALL zlarnv( 5, iseed, n-j+1, a( j, j ) )
702 CALL dlarnv( 1, iseed, n-j+1, rwork )
704 a( i, j ) = a( i, j )*( tleft+rwork( i-j+1 )*tscal )
708 CALL zlarnv( 2, iseed, n, b )
709 CALL zdscal( n, two, b, 1 )
714 IF( .NOT.lsame( trans,
'N' ) )
THEN
717 CALL zswap( n-2*j+1, a( j, j ), lda, a( j+1, n-j+1 ),
722 CALL zswap( n-2*j+1, a( j, j ), 1, a( n-j+1, j+1 ),