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 A( 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( n+2 )
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 ),
subroutine slabad(SMALL, LARGE)
SLABAD
subroutine slarnv(IDIST, ISEED, N, X)
SLARNV returns a vector of random numbers from a uniform or normal distribution.
subroutine ccopy(N, CX, INCX, CY, INCY)
CCOPY
subroutine csscal(N, SA, CX, INCX)
CSSCAL
subroutine cswap(N, CX, INCX, CY, INCY)
CSWAP
subroutine clatb4(PATH, IMAT, M, N, TYPE, KL, KU, ANORM, MODE, CNDNUM, DIST)
CLATB4
subroutine clattr(IMAT, UPLO, TRANS, DIAG, ISEED, N, A, LDA, B, WORK, RWORK, INFO)
CLATTR
subroutine clatms(M, N, DIST, ISEED, SYM, D, MODE, COND, DMAX, KL, KU, PACK, A, LDA, WORK, INFO)
CLATMS
subroutine crot(N, CX, INCX, CY, INCY, C, S)
CROT applies a plane rotation with real cosine and complex sine to a pair of complex vectors.
subroutine clarnv(IDIST, ISEED, N, X)
CLARNV returns a vector of random numbers from a uniform or normal distribution.
subroutine crotg(a, b, c, s)
CROTG generates a Givens rotation with real cosine and complex sine.