296 SUBROUTINE clatme( N, DIST, ISEED, D, MODE, COND, DMAX,
298 $ UPPER, SIM, DS, MODES, CONDS, KL, KU, ANORM,
307 CHARACTER DIST, RSIGN, SIM, UPPER
308 INTEGER INFO, KL, KU, LDA, MODE, MODES, N
309 REAL ANORM, COND, CONDS
315 COMPLEX A( LDA, * ), D( * ), WORK( * )
322 PARAMETER ( ZERO = 0.0e+0 )
324 PARAMETER ( ONE = 1.0e+0 )
326 parameter( czero = ( 0.0e+0, 0.0e+0 ) )
328 parameter( cone = ( 1.0e+0, 0.0e+0 ) )
332 INTEGER I, IC, ICOLS, IDIST, IINFO, IR, IROWS, IRSIGN,
333 $ ISIM, IUPPER, J, JC, JCR
335 COMPLEX ALPHA, TAU, XNORMS
344 EXTERNAL LSAME, CLANGE, CLARND
352 INTRINSIC abs, conjg,
max, mod
368 IF( lsame( dist,
'U' ) )
THEN
370 ELSE IF( lsame( dist,
'S' ) )
THEN
372 ELSE IF( lsame( dist,
'N' ) )
THEN
374 ELSE IF( lsame( dist,
'D' ) )
THEN
382 IF( lsame( rsign,
'T' ) )
THEN
384 ELSE IF( lsame( rsign,
'F' ) )
THEN
392 IF( lsame( upper,
'T' ) )
THEN
394 ELSE IF( lsame( upper,
'F' ) )
THEN
402 IF( lsame( sim,
'T' ) )
THEN
404 ELSE IF( lsame( sim,
'F' ) )
THEN
413 IF( modes.EQ.0 .AND. isim.EQ.1 )
THEN
415 IF( ds( j ).EQ.zero )
424 ELSE IF( idist.EQ.-1 )
THEN
426 ELSE IF( abs( mode ).GT.6 )
THEN
428 ELSE IF( ( mode.NE.0 .AND. abs( mode ).NE.6 ) .AND. cond.LT.one )
431 ELSE IF( irsign.EQ.-1 )
THEN
433 ELSE IF( iupper.EQ.-1 )
THEN
435 ELSE IF( isim.EQ.-1 )
THEN
439 ELSE IF( isim.EQ.1 .AND. abs( modes ).GT.5 )
THEN
441 ELSE IF( isim.EQ.1 .AND. modes.NE.0 .AND. conds.LT.one )
THEN
443 ELSE IF( kl.LT.1 )
THEN
445 ELSE IF( ku.LT.1 .OR. ( ku.LT.n-1 .AND. kl.LT.n-1 ) )
THEN
447 ELSE IF( lda.LT.
max( 1, n ) )
THEN
452 CALL xerbla(
'CLATME', -info )
459 iseed( i ) = mod( abs( iseed( i ) ), 4096 )
462 IF( mod( iseed( 4 ), 2 ).NE.1 )
463 $ iseed( 4 ) = iseed( 4 ) + 1
469 CALL clatm1( mode, cond, irsign, idist, iseed, d, n, iinfo )
470 IF( iinfo.NE.0 )
THEN
474 IF( mode.NE.0 .AND. abs( mode ).NE.6 )
THEN
480 temp =
max( temp, abs( d( i ) ) )
483 IF( temp.GT.zero )
THEN
490 CALL cscal( n, alpha, d, 1 )
494 CALL claset(
'Full', n, n, czero, czero, a, lda )
495 CALL ccopy( n, d, 1, a, lda+1 )
499 IF( iupper.NE.0 )
THEN
501 CALL clarnv( idist, iseed, jc-1, a( 1, jc ) )
517 CALL slatm1( modes, conds, 0, 0, iseed, ds, n, iinfo )
518 IF( iinfo.NE.0 )
THEN
525 CALL clarge( n, a, lda, iseed, work, iinfo )
526 IF( iinfo.NE.0 )
THEN
534 CALL csscal( n, ds( j ), a( j, 1 ), lda )
535 IF( ds( j ).NE.zero )
THEN
536 CALL csscal( n, one / ds( j ), a( 1, j ), 1 )
545 CALL clarge( n, a, lda, iseed, work, iinfo )
546 IF( iinfo.NE.0 )
THEN
558 DO 60 jcr = kl + 1, n - 1
563 CALL ccopy( irows, a( jcr, ic ), 1, work, 1 )
565 CALL clarfg( irows, xnorms, work( 2 ), 1, tau )
568 alpha = clarnd( 5, iseed )
570 CALL cgemv( 'c
', IROWS, ICOLS, CONE, A( JCR, IC+1 ), LDA,
571 $ WORK, 1, CZERO, WORK( IROWS+1 ), 1 )
572 CALL CGERC( IROWS, ICOLS, -TAU, WORK, 1, WORK( IROWS+1 ), 1,
573 $ A( JCR, IC+1 ), LDA )
575 CALL CGEMV( 'n
', N, IROWS, CONE, A( 1, JCR ), LDA, WORK, 1,
576 $ CZERO, WORK( IROWS+1 ), 1 )
577 CALL CGERC( N, IROWS, -CONJG( TAU ), WORK( IROWS+1 ), 1,
578 $ WORK, 1, A( 1, JCR ), LDA )
580 A( JCR, IC ) = XNORMS
581 CALL CLASET( 'full
', IROWS-1, 1, CZERO, CZERO,
582 $ A( JCR+1, IC ), LDA )
584 CALL CSCAL( ICOLS+1, ALPHA, A( JCR, IC ), LDA )
585 CALL CSCAL( N, CONJG( ALPHA ), A( 1, JCR ), 1 )
587.LT.
ELSE IF( KUN-1 ) THEN
591 DO 70 JCR = KU + 1, N - 1
596 CALL CCOPY( ICOLS, A( IR, JCR ), LDA, WORK, 1 )
598 CALL CLARFG( ICOLS, XNORMS, WORK( 2 ), 1, TAU )
601 CALL CLACGV( ICOLS-1, WORK( 2 ), 1 )
602 ALPHA = CLARND( 5, ISEED )
604 CALL CGEMV( 'n
', IROWS, ICOLS, CONE, A( IR+1, JCR ), LDA,
605 $ WORK, 1, CZERO, WORK( ICOLS+1 ), 1 )
606 CALL CGERC( IROWS, ICOLS, -TAU, WORK( ICOLS+1 ), 1, WORK, 1,
607 $ A( IR+1, JCR ), LDA )
609 CALL CGEMV( 'c
', ICOLS, N, CONE, A( JCR, 1 ), LDA, WORK, 1,
610 $ CZERO, WORK( ICOLS+1 ), 1 )
611 CALL CGERC( ICOLS, N, -CONJG( TAU ), WORK, 1,
612 $ WORK( ICOLS+1 ), 1, A( JCR, 1 ), LDA )
614 A( IR, JCR ) = XNORMS
615 CALL CLASET( 'full
', 1, ICOLS-1, CZERO, CZERO,
616 $ A( IR, JCR+1 ), LDA )
618 CALL CSCAL( IROWS+1, ALPHA, A( IR, JCR ), 1 )
619 CALL CSCAL( N, CONJG( ALPHA ), A( JCR, 1 ), LDA )
625.GE.
IF( ANORMZERO ) THEN
626 TEMP = CLANGE( 'm
', N, N, A, LDA, TEMPA )
627.GT.
IF( TEMPZERO ) THEN
628 RALPHA = ANORM / TEMP
630 CALL CSSCAL( N, RALPHA, A( 1, J ), 1 )
subroutine clatme(n, dist, iseed, d, mode, cond, dmax, rsign, upper, sim, ds, modes, conds, kl, ku, anorm, a, lda, work, info)
CLATME