129 SUBROUTINE clattp( IMAT, UPLO, TRANS, DIAG, ISEED, N, AP, B, WORK,
137 CHARACTER DIAG, TRANS, UPLO
138 INTEGER IMAT, INFO, N
143 COMPLEX AP( * ), B( * ), WORK( * )
150 parameter( one = 1.0e+0, two = 2.0e+0, zero = 0.0e+0 )
154 CHARACTER DIST, PACKIT, TYPE
156 INTEGER I, IY, J, JC, JCNEXT, JCOUNT, JJ, JL, JR, JX,
158 REAL ANORM, BIGNUM, BNORM, BSCAL, C, CNDNUM, REXP,
159 $ sfac, smlnum, t, texp, tleft, tscal, ulp, unfl,
161 COMPLEX CTEMP, PLUS1, PLUS2, RA, RB, S, STAR1
168 EXTERNAL lsame, icamax, slamch, clarnd
175 INTRINSIC abs,
cmplx, conjg,
max, real, sqrt
179 path( 1: 1 ) =
'Complex precision'
181 unfl = slamch(
'Safe minimum' )
182 ulp = slamch(
'Epsilon' )*slamch(
'Base' )
184 bignum = ( one-ulp ) / smlnum
185 CALL slabad( smlnum, bignum )
186 IF( ( imat.GE.7 .AND. imat.LE.10 ) .OR. imat.EQ.18 )
THEN
200 upper = lsame( uplo,
'U' )
202 CALL clatb4( path, imat, n, n,
TYPE, , ku, anorm, mode,
206 CALL clatb4( path, -imat, n, n,
TYPE, kl, ku, anorm, mode,
214 CALL clatms( n, n, dist, iseed,
TYPE, rwork, mode, cndnum,
222 ELSE IF( imat.EQ.7 )
THEN
249 ELSE IF( imat.LE.10 )
THEN
328 star1 = 0.25*clarnd( 5, iseed )
330 plus1 = sfac*clarnd( 5, iseed )
332 plus2 = star1 / plus1
338 plus1 = star1 / plus2
339 rexp = clarnd( 2, iseed )
340 IF( rexp.LT.zero )
THEN
341 star1 = -sfac**( one-rexp )*clarnd( 5, iseed )
343 star1 = sfac**( one+rexp )*clarnd( 5, iseed )
348 x = sqrt( cndnum ) - one / sqrt( cndnum )
350 y = sqrt( two / real( n-2 ) )*x
365 $ ap( jc+j-1 ) = work( j-2 )
367 $ ap( jc+j-2 ) = work( n+j-3 )
386 ap( jc+1 ) = work( j-1 )
388 $ ap( jc+2 ) = work( n+j-1 )
400 ra = ap( jcnext+j-1 )
402 CALL crotg( ra, rb, c, s )
409 ctemp = c*ap( jx+j ) + s*ap( jx+j+1 )
410 ap( jx+j+1 ) = -conjg( s )*ap( jx+j ) +
420 $
CALL crot( j-1, ap( jcnext ), 1, ap( jc ), 1, -c, -s )
424 ap( jcnext+j-1 ) = -ap( jcnext+j-1 )
430 jcnext = jc + n - j + 1
433 CALL crotg( ra, rb, c, s )
439 $
CALL crot( n-j-1, ap( jcnext+1 ), 1, ap( jc+2 ), 1, c,
447 ctemp = -c*ap( jx+j-i ) + s*ap( jx+j-i+1 )
448 ap( jx+j-i+1 ) = -conjg( s )*ap( jx+j-i ) -
457 ap( jc+1 ) = -ap( jc+1 )
466 ELSE IF( imat.EQ.11 )
THEN
475 CALL clarnv( 4, iseed, j-1, ap( jc ) )
476 ap( jc+j-1 ) = clarnd( 5, iseed )*two
483 $
CALL clarnv( 4, iseed, n-j, ap( jc+1 ) )
484 ap( jc ) = clarnd( 5, iseed )*two
491 CALL clarnv( 2, iseed, n, b )
492 iy = icamax( n, b, 1 )
493 bnorm = abs( b( iy ) )
494 bscal = bignum /
max( one, bnorm )
495 CALL csscal( n, bscal, b, 1 )
497 ELSE IF( imat.EQ.12 )
THEN
503 CALL clarnv( 2, iseed, n, b )
504 tscal = one /
max( one, real( n-1 ) )
508 CALL clarnv( 4, iseed, j-1, ap( jc ) )
509 CALL csscal( j-1, tscal, ap( jc ), 1 )
510 ap( jc+j-1 ) = clarnd( 5, iseed )
513 ap( n*( n+1 ) / 2 ) = smlnum*ap( n*( n+1 ) / 2 )
517 CALL clarnv( 2, iseed, n-j, ap( jc+1 ) )
518 CALL csscal( n-j, tscal, ap( jc+1 ), 1 )
519 ap( jc ) = clarnd( 5, iseed )
522 ap( 1 ) = smlnum*ap( 1 )
525 ELSE IF( imat.EQ.13 )
THEN
531 CALL clarnv( 2, iseed, n, b )
535 CALL clarnv( 4, iseed, j-1, ap( jc ) )
536 ap( jc+j-1 ) = clarnd( 5, iseed )
539 ap( n*( n+1 ) / 2 ) = smlnum*ap( n*( n+1 ) / 2 )
543 CALL clarnv( 4, iseed, n-j, ap( jc+1 ) )
544 ap( jc ) = clarnd( 5, iseed )
547 ap( 1 ) = smlnum*ap( 1 )
550 ELSE IF( imat.EQ.14 )
THEN
558 jc = ( n-1 )*n / 2 + 1
563 IF( jcount.LE.2 )
THEN
564 ap( jc+j-1 ) = smlnum*clarnd( 5, iseed )
566 ap( jc+j-1 ) = clarnd( 5, iseed )
580 IF( jcount.LE.2 )
THEN
581 ap( jc ) = smlnum*clarnd( 5, iseed )
583 ap( jc ) = clarnd( 5, iseed )
598 b( i-1 ) = smlnum*clarnd( 5, iseed )
602 DO 290 i = 1, n - 1, 2
604 b( i+1 ) = smlnum*clarnd( 5, iseed )
608 ELSE IF( imat.EQ.15 )
THEN
614 texp = one /
max( one, real( n-1 ) )
616 CALL clarnv( 4, iseed, n, b )
625 ap( jc+j-1 ) = tscal*clarnd( 5, iseed )
628 b( n ) =
cmplx( one, one )
636 $ ap( jc+1 ) =
cmplx( -one, -one )
637 ap( jc ) = tscal*clarnd( 5, iseed )
640 b( 1 ) =
cmplx( one, one )
643 ELSE IF( imat.EQ.16 )
THEN
651 CALL clarnv( 4, iseed, j, ap( jc ) )
653 ap( jc+j-1 ) = clarnd( 5, iseed )*two
662 CALL clarnv( 4, iseed, n-j+1, ap( jc ) )
664 ap( jc ) = clarnd( 5, iseed )*two
671 CALL clarnv( 2, iseed, n, b )
672 CALL csscal( n, two, b, 1 )
674 ELSE IF( imat.EQ.17 )
THEN
682 tscal = ( one-ulp ) / tscal
683 DO 360 j = 1, n*( n+1 ) / 2
688 jc = ( n-1 )*n / 2 + 1
690 ap( jc ) = -tscal / real( n+1 )
692 b( j ) = texp*( one-ulp )
694 ap( jc ) = -( tscal / real( n+1 ) ) / real( n+2 )
696 b( j-1 ) = texp*real( n*n+n-1 )
700 b( 1 ) = ( real( n+1 ) / real( n+2 ) )*tscal
703 DO 380 j = 1, n - 1, 2
704 ap( jc+n-j ) = -tscal / real( n+1 )
706 b( j ) = texp*( one-ulp )
708 ap( jc+n-j-1 ) = -( tscal / real( n+1 ) ) / real( n+2 )
710 b( j+1 ) = texp*real( n*n+n-1 )
714 b( n ) = ( real( n+1 ) / real( n+2 ) )*tscal
717 ELSE IF( imat.EQ.18 )
THEN
726 CALL clarnv( 4, iseed, j-1, ap( jc
734 $
CALL clarnv( 4, iseed, n-j, ap( jc+1 ) )
742 CALL clarnv( 2, iseed, n, b )
743 iy = icamax( n, b, 1 )
744 bnorm = abs( b( iy ) )
745 bscal = bignum /
max( one, bnorm )
746 CALL csscal( n, bscal, b, 1 )
748 ELSE IF( imat.EQ.19 )
THEN
755 tleft = bignum /
max( one, real( n-1 ) )
756 tscal = bignum*( real( n-1 ) /
max( one, real( n ) ) )
760 CALL clarnv( 5, iseed, j, ap( jc ) )
761 CALL slarnv( 1, iseed, j, rwork )
763 ap( jc+i-1 ) = ap( jc+i-1 )*( tleft+rwork( i )*tscal )
770 CALL clarnv( 5, iseed, n-j+1, ap( jc ) )
771 CALL slarnv( 1, iseed, n-j+1, rwork )
773 ap( jc+i-j ) = ap( jc+i-j )*
774 $ ( tleft+rwork( i-j+1 )*tscal )
779 CALL clarnv( 2, iseed, n, b )
780 CALL csscal( n, two, b, 1 )
786 IF( .NOT.lsame( trans,
'N' ) )
THEN
794 ap( jr-i+j ) = ap( jl )
808 ap( jl+i-j ) = ap( jr )