296 SUBROUTINE zlatme( 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 DOUBLE PRECISION ANORM, COND, CONDS
314 DOUBLE PRECISION DS( * )
315 COMPLEX*16 A( LDA, * ), D( * ), WORK( * )
321 DOUBLE PRECISION ZERO
322 PARAMETER ( ZERO = 0.0d+0 )
324 PARAMETER ( ONE = 1.0d+0 )
326 parameter( czero = ( 0.0d+0, 0.0d+0 ) )
328 parameter( cone = ( 1.0d+0, 0.0d+0 ) )
332 INTEGER I, IC, ICOLS, IDIST, IINFO, IR, IROWS, IRSIGN,
333 $ ISIM, IUPPER, J, JC, JCR
334 DOUBLE PRECISION RALPHA, TEMP
335 COMPLEX*16 ALPHA, TAU, XNORMS
338 DOUBLE PRECISION TEMPA( 1 )
342 DOUBLE PRECISION ZLANGE
344 EXTERNAL LSAME, ZLANGE, ZLARND
352 INTRINSIC abs, dconjg, 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(
'ZLATME', -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 zlatm1( 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 zscal( n, alpha, d, 1 )
494 CALL zlaset(
'Full', n, n, czero, czero, a, lda )
495 CALL zcopy( n, d, 1, a, lda+1 )
499 IF( iupper.NE.0 )
THEN
501 CALL zlarnv( idist, iseed, jc-1, a( 1, jc ) )
517 CALL dlatm1( modes, conds, 0, 0, iseed, ds, n, iinfo )
518 IF( iinfo.NE.0 )
THEN
525 CALL zlarge( n, a, lda, iseed, work, iinfo )
526 IF( iinfo.NE.0 )
THEN
534 CALL zdscal( n, ds( j ), a( j, 1 ), lda )
535 IF( ds( j ).NE.zero )
THEN
536 CALL zdscal( n, one / ds( j ), a( 1, j ), 1 )
545 CALL zlarge( n, a, lda, iseed, work, iinfo )
546 IF( iinfo.NE.0 )
THEN
558 DO 60 jcr = kl + 1, n - 1
563 CALL zcopy( irows, a( jcr, ic ), 1, work, 1 )
565 CALL zlarfg( irows, xnorms, work( 2 ), 1, tau )
568 alpha = zlarnd( 5, iseed )
570 CALL zgemv(
'C', irows, icols, cone, a( jcr, ic+1 ), lda,
571 $ work, 1, czero, work( irows+1 ), 1 )
572 CALL zgerc( irows, icols, -tau, work, 1, work( irows+1 ), 1,
573 $ a( jcr, ic+1 ), lda )
575 CALL zgemv(
'N', n, irows, cone, a( 1, jcr ), lda, work, 1,
576 $ czero, work( irows+1 ), 1 )
577 CALL zgerc( n, irows, -dconjg( tau ), work( irows+1 ), 1,
578 $ work, 1, a( 1, jcr ), lda )
580 a( jcr, ic ) = xnorms
581 CALL zlaset(
'Full', irows-1, 1, czero, czero,
582 $ a( jcr+1, ic ), lda )
584 CALL zscal( icols+1, alpha, a( jcr, ic ), lda )
585 CALL zscal( n, dconjg( alpha ), a( 1, jcr ), 1 )
587 ELSE IF( ku.LT.n-1 )
THEN
591 DO 70 jcr = ku + 1, n - 1
596 CALL zcopy( icols, a( ir, jcr ), lda, work, 1 )
598 CALL zlarfg( icols, xnorms, work( 2 ), 1, tau )
601 CALL zlacgv( icols-1, work( 2 ), 1 )
602 alpha = zlarnd( 5, iseed )
604 CALL zgemv(
'N', irows, icols, cone, a( ir+1, jcr ), lda,
605 $ work, 1, czero, work( icols+1 ), 1 )
606 CALL zgerc( irows, icols, -tau, work( icols+1 ), 1, work, 1,
607 $ a( ir+1, jcr ), lda )
609 CALL zgemv(
'C', icols, n, cone, a( jcr, 1 ), lda, work, 1,
610 $ czero, work( icols+1 ), 1 )
611 CALL zgerc( icols, n, -dconjg( tau ), work, 1,
612 $ work( icols+1 ), 1, a( jcr, 1 ), lda )
614 a( ir, jcr ) = xnorms
615 CALL zlaset(
'Full', 1, icols-1, czero, czero,
616 $ a( ir, jcr+1 ), lda )
618 CALL zscal( irows+1, alpha, a( ir, jcr ), 1 )
619 CALL zscal( n, dconjg( alpha ), a( jcr, 1 ), lda )
625 IF( anorm.GE.zero )
THEN
626 temp = zlange(
'M', n, n, a, lda, tempa )
627 IF( temp.GT.zero )
THEN
628 ralpha = anorm / temp
630 CALL zdscal( n, ralpha, a( 1, j ), 1 )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zdscal(N, DA, ZX, INCX)
ZDSCAL
subroutine zscal(N, ZA, ZX, INCX)
ZSCAL
subroutine zcopy(N, ZX, INCX, ZY, INCY)
ZCOPY
subroutine zgerc(M, N, ALPHA, X, INCX, Y, INCY, A, LDA)
ZGERC
subroutine zgemv(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
ZGEMV
subroutine zlarge(N, A, LDA, ISEED, WORK, INFO)
ZLARGE
subroutine zlatm1(MODE, COND, IRSIGN, IDIST, ISEED, D, N, INFO)
ZLATM1
subroutine zlatme(N, DIST, ISEED, D, MODE, COND, DMAX, RSIGN, UPPER, SIM, DS, MODES, CONDS, KL, KU, ANORM, A, LDA, WORK, INFO)
ZLATME
subroutine zlarnv(IDIST, ISEED, N, X)
ZLARNV returns a vector of random numbers from a uniform or normal distribution.
subroutine zlaset(UPLO, M, N, ALPHA, BETA, A, LDA)
ZLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine zlacgv(N, X, INCX)
ZLACGV conjugates a complex vector.
subroutine zlarfg(N, ALPHA, X, INCX, TAU)
ZLARFG generates an elementary reflector (Householder matrix).
subroutine dlatm1(MODE, COND, IRSIGN, IDIST, ISEED, D, N, INFO)
DLATM1