139 SUBROUTINE clattb( IMAT, UPLO, TRANS, DIAG, ISEED, N, KD, AB,
140 $ LDAB, B, WORK, RWORK, INFO )
147 CHARACTER DIAG, TRANS,
148 INTEGER IMAT, INFO, KD, LDAB, N
153 COMPLEX AB( LDAB, * ), B( * ), WORK( * )
160 parameter( one = 1.0e+0, two = 2.0e+0, zero = 0.0e+0 )
164 CHARACTER DIST, PACKIT, TYPE
166 INTEGER I, IOFF, IY, J, JCOUNT, KL, KU, LENJ, MODE
167 REAL , BIGNUM, BNORM, BSCAL, CNDNUM, REXP,
170 COMPLEX PLUS1, PLUS2, STAR1
177 EXTERNAL lsame, icamax, slamch, slarnd, clarnd
188 path( 1: 1 ) =
'Complex precision'
190 unfl = slamch(
'Safe minimum' )
191 ulp = slamch(
'Epsilon' )*slamch(
'Base' )
193 bignum = ( one-ulp ) / smlnum
194 CALL slabad( smlnum, bignum )
195 IF( ( imat.GE.6 .AND. imat.LE.9 ) .OR. imat.EQ.17 )
THEN
209 upper = lsame( uplo,
'U' )
211 CALL clatb4( path, imat, n, n,
TYPE, kl, ku, anorm, mode,
214 ioff = 1 +
max( 0, kd-n+1 )
218 CALL CLATB4( PATH, -IMAT, N, N, TYPE, KL, KU, ANORM, MODE,
229 CALL CLATMS( N, N, DIST, ISEED, TYPE, RWORK, MODE, CNDNUM,
230 $ ANORM, KL, KU, PACKIT, AB( IOFF, 1 ), LDAB, WORK,
238.EQ.
ELSE IF( IMAT6 ) THEN
241 DO 10 I = MAX( 1, KD+2-J ), KD
249 DO 30 I = 2, MIN( KD+1, N-J+1 )
260.LE.
ELSE IF( IMAT9 ) THEN
261 TNORM = SQRT( CNDNUM )
267 DO 50 I = MAX( 1, KD+2-J ), KD
270 AB( KD+1, J ) = REAL( J )
274 DO 70 I = 2, MIN( KD+1, N-J+1 )
277 AB( 1, J ) = REAL( J )
286 AB( 1, 2 ) = TNORM*CLARND( 5, ISEED )
288 CALL CLARNV( 2, ISEED, LENJ, WORK )
290 AB( 1, 2*( J+1 ) ) = TNORM*WORK( J )
293 AB( 2, 1 ) = TNORM*CLARND( 5, ISEED )
295 CALL CLARNV( 2, ISEED, LENJ, WORK )
297 AB( 2, 2*J+1 ) = TNORM*WORK( J )
300.GT.
ELSE IF( KD1 ) THEN
318 STAR1 = TNORM*CLARND( 5, ISEED )
320 PLUS1 = SFAC*CLARND( 5, ISEED )
322 PLUS2 = STAR1 / PLUS1
328 PLUS1 = STAR1 / PLUS2
333 REXP = SLARND( 2, ISEED )
334.LT.
IF( REXPZERO ) THEN
335 STAR1 = -SFAC**( ONE-REXP )*CLARND( 5, ISEED )
337 STAR1 = SFAC**( ONE+REXP )*CLARND( 5, ISEED )
345 CALL CCOPY( N-1, WORK, 1, AB( KD, 2 ), LDAB )
346 CALL CCOPY( N-2, WORK( N+1 ), 1, AB( KD-1, 3 ), LDAB )
348 CALL CCOPY( N-1, WORK, 1, AB( 2, 1 ), LDAB )
349 CALL CCOPY( N-2, WORK( N+1 ), 1, AB( 3, 1 ), LDAB )
357.EQ.
ELSE IF( IMAT10 ) THEN
365 LENJ = MIN( J-1, KD )
366 CALL CLARNV( 4, ISEED, LENJ, AB( KD+1-LENJ, J ) )
367 AB( KD+1, J ) = CLARND( 5, ISEED )*TWO
371 LENJ = MIN( N-J, KD )
373 $ CALL CLARNV( 4, ISEED, LENJ, AB( 2, J ) )
374 AB( 1, J ) = CLARND( 5, ISEED )*TWO
380 CALL CLARNV( 2, ISEED, N, B )
381 IY = ICAMAX( N, B, 1 )
382 BNORM = ABS( B( IY ) )
383 BSCAL = BIGNUM / MAX( ONE, BNORM )
384 CALL CSSCAL( N, BSCAL, B, 1 )
386.EQ.
ELSE IF( IMAT11 ) THEN
392 CALL CLARNV( 2, ISEED, N, B )
393 TSCAL = ONE / REAL( KD+1 )
396 LENJ = MIN( J-1, KD )
398 CALL CLARNV( 4, ISEED, LENJ, AB( KD+2-LENJ, J ) )
399 CALL CSSCAL( LENJ, TSCAL, AB( KD+2-LENJ, J ), 1 )
401 AB( KD+1, J ) = CLARND( 5, ISEED )
403 AB( KD+1, N ) = SMLNUM*AB( KD+1, N )
406 LENJ = MIN( N-J, KD )
408 CALL CLARNV( 4, ISEED, LENJ, AB( 2, J ) )
409 CALL CSSCAL( LENJ, TSCAL, AB( 2, J ), 1 )
411 AB( 1, J ) = CLARND( 5, ISEED )
413 AB( 1, 1 ) = SMLNUM*AB( 1, 1 )
416.EQ.
ELSE IF( IMAT12 ) THEN
422 CALL CLARNV( 2, ISEED, N, B )
425 LENJ = MIN( J-1, KD )
427 $ CALL CLARNV( 4, ISEED, LENJ, AB( KD+2-LENJ, J ) )
428 AB( KD+1, J ) = CLARND( 5, ISEED )
430 AB( KD+1, N ) = SMLNUM*AB( KD+1, N )
433 LENJ = MIN( N-J, KD )
435 $ CALL CLARNV( 4, ISEED, LENJ, AB( 2, J ) )
436 AB( 1, J ) = CLARND( 5, ISEED )
438 AB( 1, 1 ) = SMLNUM*AB( 1, 1 )
441.EQ.
ELSE IF( IMAT13 ) THEN
450 DO 180 I = MAX( 1, KD+1-( J-1 ) ), KD
453.LE.
IF( JCOUNT2 ) THEN
454 AB( KD+1, J ) = SMLNUM*CLARND( 5, ISEED )
456 AB( KD+1, J ) = CLARND( 5, ISEED )
465 DO 200 I = 2, MIN( N-J+1, KD+1 )
468.LE.
IF( JCOUNT2 ) THEN
469 AB( 1, J ) = SMLNUM*CLARND( 5, ISEED )
471 AB( 1, J ) = CLARND( 5, ISEED )
485 B( I-1 ) = SMLNUM*CLARND( 5, ISEED )
489 DO 230 I = 1, N - 1, 2
491 B( I+1 ) = SMLNUM*CLARND( 5, ISEED )
495.EQ.
ELSE IF( IMAT14 ) THEN
501 TEXP = ONE / REAL( KD+1 )
503 CALL CLARNV( 4, ISEED, N, B )
506 DO 240 I = MAX( 1, KD+2-J ), KD
509.GT..AND..GT.
IF( J1 KD0 )
510 $ AB( KD, J ) = CMPLX( -ONE, -ONE )
511 AB( KD+1, J ) = TSCAL*CLARND( 5, ISEED )
513 B( N ) = CMPLX( ONE, ONE )
516 DO 260 I = 3, MIN( N-J+1, KD+1 )
519.LT..AND..GT.
IF( JN KD0 )
520 $ AB( 2, J ) = CMPLX( -ONE, -ONE )
521 AB( 1, J ) = TSCAL*CLARND( 5, ISEED )
523 B( 1 ) = CMPLX( ONE, ONE )
526.EQ.
ELSE IF( IMAT15 ) THEN
533 LENJ = MIN( J, KD+1 )
534 CALL CLARNV( 4, ISEED, LENJ, AB( KD+2-LENJ, J ) )
536 AB( KD+1, J ) = CLARND( 5, ISEED )*TWO
543 LENJ = MIN( N-J+1, KD+1 )
544 CALL CLARNV( 4, ISEED, LENJ, AB( 1, J ) )
546 AB( 1, J ) = CLARND( 5, ISEED )*TWO
552 CALL CLARNV( 2, ISEED, N, B )
553 CALL CSSCAL( N, TWO, B, 1 )
555.EQ.
ELSE IF( IMAT16 ) THEN
563 TSCAL = ( ONE-ULP ) / TSCAL
573 DO 320 I = J, MAX( 1, J-KD+1 ), -2
574 AB( 1+( J-I ), I ) = -TSCAL / REAL( KD+2 )
576 B( I ) = TEXP*( ONE-ULP )
577.GT.
IF( IMAX( 1, J-KD+1 ) ) THEN
578 AB( 2+( J-I ), I-1 ) = -( TSCAL / REAL( KD+2 ) )
580 AB( KD+1, I-1 ) = ONE
581 B( I-1 ) = TEXP*REAL( ( KD+1 )*( KD+1 )+KD )
585 B( MAX( 1, J-KD+1 ) ) = ( REAL( KD+2 ) /
586 $ REAL( KD+3 ) )*TSCAL
591 LENJ = MIN( KD+1, N-J+1 )
592 DO 340 I = J, MIN( N, J+KD-1 ), 2
593 AB( LENJ-( I-J ), J ) = -TSCAL / REAL( KD+2 )
595 B( J ) = TEXP*( ONE-ULP )
596.LT.
IF( IMIN( N, J+KD-1 ) ) THEN
597 AB( LENJ-( I-J+1 ), I+1 ) = -( TSCAL /
598 $ REAL( KD+2 ) ) / REAL( KD+3 )
600 B( I+1 ) = TEXP*REAL( ( KD+1 )*( KD+1 )+KD )
604 B( MIN( N, J+KD-1 ) ) = ( REAL( KD+2 ) /
605 $ REAL( KD+3 ) )*TSCAL
610.EQ.
ELSE IF( IMAT17 ) THEN
618 LENJ = MIN( J-1, KD )
619 CALL CLARNV( 4, ISEED, LENJ, AB( KD+1-LENJ, J ) )
620 AB( KD+1, J ) = REAL( J )
624 LENJ = MIN( N-J, KD )
626 $ CALL CLARNV( 4, ISEED, LENJ, AB( 2, J ) )
627 AB( 1, J ) = REAL( J )
633 CALL CLARNV( 2, ISEED, N, B )
634 IY = ICAMAX( N, B, 1 )
635 BNORM = ABS( B( IY ) )
636 BSCAL = BIGNUM / MAX( ONE, BNORM )
637 CALL CSSCAL( N, BSCAL, B, 1 )
639.EQ.
ELSE IF( IMAT18 ) THEN
646 TLEFT = BIGNUM / REAL( KD+1 )
647 TSCAL = BIGNUM*( REAL( KD+1 ) / REAL( KD+2 ) )
650 LENJ = MIN( J, KD+1 )
651 CALL CLARNV( 5, ISEED, LENJ, AB( KD+2-LENJ, J ) )
652 CALL SLARNV( 1, ISEED, LENJ, RWORK( KD+2-LENJ ) )
653 DO 380 I = KD + 2 - LENJ, KD + 1
654 AB( I, J ) = AB( I, J )*( TLEFT+RWORK( I )*TSCAL )
659 LENJ = MIN( N-J+1, KD+1 )
660 CALL CLARNV( 5, ISEED, LENJ, AB( 1, J ) )
661 CALL SLARNV( 1, ISEED, LENJ, RWORK )
663 AB( I, J ) = AB( I, J )*( TLEFT+RWORK( I )*TSCAL )
667 CALL CLARNV( 2, ISEED, N, B )
668 CALL CSSCAL( N, TWO, B, 1 )
673.NOT.
IF( LSAME( TRANS, 'n
' ) ) THEN
676 LENJ = MIN( N-2*J+1, KD+1 )
677 CALL CSWAP( LENJ, AB( KD+1, J ), LDAB-1,
678 $ AB( KD+2-LENJ, N-J+1 ), -1 )
682 LENJ = MIN( N-2*J+1, KD+1 )
683 CALL CSWAP( LENJ, AB( 1, J ), 1, AB( LENJ, N-J+2-LENJ ),
subroutine slarnv(idist, iseed, n, x)
SLARNV returns a vector of random numbers from a uniform or normal distribution.
subroutine slabad(small, large)
SLABAD
subroutine clarnv(idist, iseed, n, x)
CLARNV returns a vector of random numbers from a uniform or normal distribution.
subroutine cswap(n, cx, incx, cy, incy)
CSWAP
subroutine csscal(n, sa, cx, incx)
CSSCAL
subroutine ccopy(n, cx, incx, cy, incy)
CCOPY
subroutine clattb(imat, uplo, trans, diag, iseed, n, kd, ab, ldab, b, work, rwork, info)
CLATTB
subroutine clatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
CLATB4
subroutine clatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
CLATMS