338 SUBROUTINE zlatmt( M, N, DIST, ISEED, SYM, D, MODE, COND, DMAX,
339 $ RANK, KL, KU, PACK, A, LDA, WORK, INFO )
346 DOUBLE PRECISION COND, DMAX
347 INTEGER INFO, KL, KU, LDA, M, , N, RANK
348 CHARACTER DIST, PACK, SYM
351 COMPLEX*16 A( LDA, * ), WORK( * )
352 DOUBLE PRECISION ( * )
360 parameter( zero = 0.0d+0 )
362 parameter( one = 1.0d+0 )
364 parameter( czero = ( 0.0d+0, 0.0d+0 ) )
365 DOUBLE PRECISION TWOPI
366 parameter( twopi = 6.28318530717958647692528676655900576839d+0 )
369 COMPLEX*16 C, CT, DUMMY, EXTRA, S, ST, ZTEMP
370 DOUBLE PRECISION , ANGLE, REALC, TEMP
371 INTEGER I, IC, ICOL, IDIST, IENDCH, IINFO, IL, ILDA,
372 $ ioffg, ioffst, ipack, ipackg, ir, ir1, ir2,
373 $ irow, irsign, iskew, isym, isympk, j,
jc, jch,
374 $ jkl, jku, jr, k, llb, minlda, mnmin, mr, nc
376 LOGICAL CSYM, GIVENS, ILEXTR, ILTEMP, TOPDWN
380 DOUBLE PRECISION DLARND
382 EXTERNAL zlarnd, dlarnd, lsame
389 INTRINSIC abs, cos, dble, dcmplx, dconjg,
max,
min, mod,
401 IF( m.EQ.0 .OR. n.EQ.0 )
406 IF( lsame( dist,
'U' ) )
THEN
408 ELSE IF( lsame( dist,
'S' ) )
THEN
410 ELSE IF( lsame( dist,
'N' ) )
THEN
418 IF( lsame( sym,
'N' ) )
THEN
422 ELSE IF( lsame( sym,
'P' ) )
THEN
426 ELSE IF( lsame( sym,
'S' ) )
THEN
430 ELSE IF( lsame( sym,
'H' ) )
THEN
441 IF( lsame( pack,
'N' ) )
THEN
443 ELSE IF( lsame( pack,
'U' ) )
THEN
446 ELSE IF( lsame( pack,
'L' ) )
THEN
449 ELSE IF( lsame( pack,
'C' ) )
THEN
452 ELSE IF( lsame( pack,
'R' ) )
THEN
455 ELSE IF( lsame( pack, 'b
' ) ) THEN
458 ELSE IF( LSAME( PACK, 'q
' ) ) THEN
461 ELSE IF( LSAME( PACK, 'z
' ) ) THEN
475.EQ..OR..EQ.
IF( IPACK5 IPACK6 ) THEN
477.EQ.
ELSE IF( IPACK7 ) THEN
478 MINLDA = LLB + UUB + 1
488.LT.
IF( DBLE( LLB+UUB )0.3D0*DBLE( MAX( 1, MR+NC ) ) )
494.LT..AND..GE.
IF( LDAM LDAMINLDA )
501.NE..AND..NE.
ELSE IF( MN ISYM1 ) THEN
503.LT.
ELSE IF( N0 ) THEN
505.EQ.
ELSE IF( IDIST-1 ) THEN
507.EQ.
ELSE IF( ISYM-1 ) THEN
509.GT.
ELSE IF( ABS( MODE )6 ) THEN
511.NE..AND..NE..AND..LT.
ELSE IF( ( MODE0 ABS( MODE )6 ) CONDONE )
514.LT.
ELSE IF( KL0 ) THEN
516.LT..OR..NE..AND..NE.
ELSE IF( KU0 ( ISYM1 KLKU ) ) THEN
518.EQ..OR..EQ..AND..EQ..OR.
ELSE IF( IPACK-1 ( ISYMPK1 ISYM1 )
519.EQ..AND..EQ..AND..GT..OR.
$ ( ISYMPK2 ISYM1 KL0 )
520.EQ..AND..EQ..AND..GT..OR.
$ ( ISYMPK3 ISYM1 KU0 )
521.NE..AND..NE.
$ ( ISYMPK0 MN ) ) THEN
523.LT.
ELSE IF( LDAMAX( 1, MINLDA ) ) THEN
528 CALL XERBLA( 'zlatmt', -INFO )
535 ISEED( I ) = MOD( ABS( ISEED( I ) ), 4096 )
538.NE.
IF( MOD( ISEED( 4 ), 2 )1 )
539 $ ISEED( 4 ) = ISEED( 4 ) + 1
545 CALL DLATM7( MODE, COND, IRSIGN, IDIST, ISEED, D, MNMIN, RANK,
547.NE.
IF( IINFO0 ) THEN
555.LE.
IF( ABS( D( 1 ) )ABS( D( RANK ) ) ) THEN
561.NE..AND..NE.
IF( MODE0 ABS( MODE )6 ) THEN
567 TEMP = MAX( TEMP, ABS( D( I ) ) )
570.GT.
IF( TEMPZERO ) THEN
577 CALL DSCAL( RANK, ALPHA, D, 1 )
581 CALL ZLASET( 'full
', LDA, N, CZERO, CZERO, A, LDA )
592.GT.
IF( IPACK4 ) THEN
595.GT.
IF( IPACK5 ) THEN
615.EQ..AND..EQ.
IF( LLB0 UUB0 ) THEN
617 A( ( 1-ISKEW )*J+IOFFST, J ) = DCMPLX( D( J ) )
620.LE..OR..GE.
IF( IPACK2 IPACK5 )
623 ELSE IF( GIVENS ) THEN
632.GT.
IF( IPACK4 ) THEN
639 A( ( 1-ISKEW )*J+IOFFST, J ) = DCMPLX( D( J ) )
651 DO 150 JR = 1, MIN( M+JKU, N ) + JKL - 1
653 ANGLE = TWOPI*DLARND( 1, ISEED )
654 C = COS( ANGLE )*ZLARND( 5, ISEED )
655 S = SIN( ANGLE )*ZLARND( 5, ISEED )
656 ICOL = MAX( 1, JR-JKL )
658 IL = MIN( N, JR+JKU ) + 1 - ICOL
659.GT.
CALL ZLAROT( .TRUE., JRJKL, .FALSE., IL, C,
660 $ S, A( JR-ISKEW*ICOL+IOFFST, ICOL ),
661 $ ILDA, EXTRA, DUMMY )
668 DO 140 JCH = JR - JKL, 1, -JKL - JKU
670 CALL ZLARTG( A( IR+1-ISKEW*( IC+1 )+IOFFST,
671 $ IC+1 ), EXTRA, REALC, S, DUMMY )
672 DUMMY = DLARND( 5, ISEED )
673 C = DCONJG( REALC*DUMMY )
674 S = DCONJG( -S*DUMMY )
676 IROW = MAX( 1, JCH-JKU )
680 CALL ZLAROT( .FALSE., ILTEMP, .TRUE., IL, C, S,
681 $ A( IROW-ISKEW*IC+IOFFST, IC ),
682 $ ILDA, ZTEMP, EXTRA )
684 CALL ZLARTG( A( IROW+1-ISKEW*( IC+1 )+IOFFST,
685 $ IC+1 ), ZTEMP, REALC, S, DUMMY )
686 DUMMY = ZLARND( 5, ISEED )
687 C = DCONJG( REALC*DUMMY )
688 S = DCONJG( -S*DUMMY )
690 ICOL = MAX( 1, JCH-JKU-JKL )
693.GT.
CALL ZLAROT( .TRUE., JCHJKU+JKL, .TRUE.,
694 $ IL, C, S, A( IROW-ISKEW*ICOL+
695 $ IOFFST, ICOL ), ILDA, EXTRA,
709 DO 180 JC = 1, MIN( N+JKL, M ) + JKU - 1
711 ANGLE = TWOPI*DLARND( 1, ISEED )
712 C = COS( ANGLE )*ZLARND( 5, ISEED )
713 S = SIN( ANGLE )*ZLARND( 5, ISEED )
714 IROW = MAX( 1, JC-JKU )
716 IL = MIN( M, JC+JKL ) + 1 - IROW
717.GT.
CALL ZLAROT( .FALSE., JCJKU, .FALSE., IL, C,
718 $ S, A( IROW-ISKEW*JC+IOFFST, JC ),
719 $ ILDA, EXTRA, DUMMY )
726 DO 170 JCH = JC - JKU, 1, -JKL - JKU
728 CALL ZLARTG( A( IR+1-ISKEW*( IC+1 )+IOFFST,
729 $ IC+1 ), EXTRA, REALC, S, DUMMY )
730 DUMMY = ZLARND( 5, ISEED )
731 C = DCONJG( REALC*DUMMY )
732 S = DCONJG( -S*DUMMY )
734 ICOL = MAX( 1, JCH-JKL )
738 CALL ZLAROT( .TRUE., ILTEMP, .TRUE., IL, C, S,
739 $ A( IR-ISKEW*ICOL+IOFFST, ICOL ),
740 $ ILDA, ZTEMP, EXTRA )
742 CALL ZLARTG( A( IR+1-ISKEW*( ICOL+1 )+IOFFST,
743 $ ICOL+1 ), ZTEMP, REALC, S,
745 DUMMY = ZLARND( 5, ISEED )
746 C = DCONJG( REALC*DUMMY )
747 S = DCONJG( -S*DUMMY )
748 IROW = MAX( 1, JCH-JKL-JKU )
751.GT.
CALL ZLAROT( .FALSE., JCHJKL+JKU, .TRUE.,
752 $ IL, C, S, A( IROW-ISKEW*ICOL+
753 $ IOFFST, ICOL ), ILDA, EXTRA,
774 IENDCH = MIN( M, N+JKL ) - 1
775 DO 210 JC = MIN( M+JKU, N ) - 1, 1 - JKL, -1
777 ANGLE = TWOPI*DLARND( 1, ISEED )
778 C = COS( ANGLE )*ZLARND( 5, ISEED )
779 S = SIN( ANGLE )*ZLARND( 5, ISEED )
780 IROW = MAX( 1, JC-JKU+1 )
782 IL = MIN( M, JC+JKL+1 ) + 1 - IROW
783.LT.
CALL ZLAROT( .FALSE., .FALSE., JC+JKLM, IL,
784 $ C, S, A( IROW-ISKEW*JC+IOFFST,
785 $ JC ), ILDA, DUMMY, EXTRA )
791 DO 200 JCH = JC + JKL, IENDCH, JKL + JKU
794 CALL ZLARTG( A( JCH-ISKEW*IC+IOFFST, IC ),
795 $ EXTRA, REALC, S, DUMMY )
796 DUMMY = ZLARND( 5, ISEED )
801 ICOL = MIN( N-1, JCH+JKU )
802.LT.
ILTEMP = JCH + JKUN
804 CALL ZLAROT( .TRUE., ILEXTR, ILTEMP, ICOL+2-IC,
805 $ C, S, A( JCH-ISKEW*IC+IOFFST, IC ),
806 $ ILDA, EXTRA, ZTEMP )
808 CALL ZLARTG( A( JCH-ISKEW*ICOL+IOFFST,
809 $ ICOL ), ZTEMP, REALC, S, DUMMY )
810 DUMMY = ZLARND( 5, ISEED )
813 IL = MIN( IENDCH, JCH+JKL+JKU ) + 2 - JCH
815 CALL ZLAROT( .FALSE., .TRUE.,
816.LE.
$ JCH+JKL+JKUIENDCH, IL, C, S,
817 $ A( JCH-ISKEW*ICOL+IOFFST,
818 $ ICOL ), ILDA, ZTEMP, EXTRA )
833 IENDCH = MIN( N, M+JKU ) - 1
834 DO 240 JR = MIN( N+JKL, M ) - 1, 1 - JKU, -1
836 ANGLE = TWOPI*DLARND( 1, ISEED )
837 C = COS( ANGLE )*ZLARND( 5, ISEED )
838 S = SIN( ANGLE )*ZLARND( 5, ISEED )
839 ICOL = MAX( 1, JR-JKL+1 )
841 IL = MIN( N, JR+JKU+1 ) + 1 - ICOL
842.LT.
CALL ZLAROT( .TRUE., .FALSE., JR+JKUN, IL,
843 $ C, S, A( JR-ISKEW*ICOL+IOFFST,
844 $ ICOL ), ILDA, DUMMY, EXTRA )
850 DO 230 JCH = JR + JKU, IENDCH, JKL + JKU
853 CALL ZLARTG( A( IR-ISKEW*JCH+IOFFST, JCH ),
854 $ EXTRA, REALC, S, DUMMY )
855 DUMMY = ZLARND( 5, ISEED )
860 IROW = MIN( M-1, JCH+JKL )
861.LT.
ILTEMP = JCH + JKLM
863 CALL ZLAROT( .FALSE., ILEXTR, ILTEMP, IROW+2-IR,
864 $ C, S, A( IR-ISKEW*JCH+IOFFST,
865 $ JCH ), ILDA, EXTRA, ZTEMP )
867 CALL ZLARTG( A( IROW-ISKEW*JCH+IOFFST, JCH ),
868 $ ZTEMP, REALC, S, DUMMY )
869 DUMMY = ZLARND( 5, ISEED )
872 IL = MIN( IENDCH, JCH+JKL+JKU ) + 2 - JCH
874 CALL ZLAROT( .TRUE., .TRUE.,
875.LE.
$ JCH+JKL+JKUIENDCH, IL, C, S,
876 $ A( IROW-ISKEW*JCH+IOFFST, JCH ),
877 $ ILDA, ZTEMP, EXTRA )
898.GE.
IF( IPACK5 ) THEN
906 A( ( 1-ISKEW )*J+IOFFG, J ) = DCMPLX( D( J ) )
911 IROW = MAX( 1, JC-K )
912 IL = MIN( JC+1, K+2 )
914 ZTEMP = A( JC-ISKEW*( JC+1 )+IOFFG, JC+1 )
915 ANGLE = TWOPI*DLARND( 1, ISEED )
916 C = COS( ANGLE )*ZLARND( 5, ISEED )
917 S = SIN( ANGLE )*ZLARND( 5, ISEED )
922 ZTEMP = DCONJG( ZTEMP )
926.GT.
CALL ZLAROT( .FALSE., JCK, .TRUE., IL, C, S,
927 $ A( IROW-ISKEW*JC+IOFFG, JC ), ILDA,
929 CALL ZLAROT( .TRUE., .TRUE., .FALSE.,
930 $ MIN( K, N-JC )+1, CT, ST,
931 $ A( ( 1-ISKEW )*JC+IOFFG, JC ), ILDA,
937 DO 270 JCH = JC - K, 1, -K
938 CALL ZLARTG( A( JCH+1-ISKEW*( ICOL+1 )+IOFFG,
939 $ ICOL+1 ), EXTRA, REALC, S, DUMMY )
940 DUMMY = ZLARND( 5, ISEED )
941 C = DCONJG( REALC*DUMMY )
942 S = DCONJG( -S*DUMMY )
943 ZTEMP = A( JCH-ISKEW*( JCH+1 )+IOFFG, JCH+1 )
948 ZTEMP = DCONJG( ZTEMP )
952 CALL ZLAROT( .TRUE., .TRUE., .TRUE., K+2, C, S,
953 $ A( ( 1-ISKEW )*JCH+IOFFG, JCH ),
954 $ ILDA, ZTEMP, EXTRA )
955 IROW = MAX( 1, JCH-K )
956 IL = MIN( JCH+1, K+2 )
958.GT.
CALL ZLAROT( .FALSE., JCHK, .TRUE., IL, CT,
959 $ ST, A( IROW-ISKEW*JCH+IOFFG, JCH ),
960 $ ILDA, EXTRA, ZTEMP )
969.NE..AND..NE.
IF( IPACKIPACKG IPACK3 ) THEN
971 IROW = IOFFST - ISKEW*JC
973 DO 300 JR = JC, MIN( N, JC+UUB )
974 A( JR+IROW, JC ) = A( JC-ISKEW*JR+IOFFG, JR )
977 DO 310 JR = JC, MIN( N, JC+UUB )
978 A( JR+IROW, JC ) = DCONJG( A( JC-ISKEW*JR+
983.EQ.
IF( IPACK5 ) THEN
984 DO 340 JC = N - UUB + 1, N
985 DO 330 JR = N + 2 - JC, UUB + 1
990.EQ.
IF( IPACKG6 ) THEN
1000.GE.
IF( IPACK5 ) THEN
1009 A( ( 1-ISKEW )*J+IOFFG, J ) = DCMPLX( D( J ) )
1013 DO 370 JC = N - 1, 1, -1
1014 IL = MIN( N+1-JC, K+2 )
1016 ZTEMP = A( 1+( 1-ISKEW )*JC+IOFFG, JC )
1017 ANGLE = TWOPI*DLARND( 1, ISEED )
1018 C = COS( ANGLE )*ZLARND( 5, ISEED )
1019 S = SIN( ANGLE )*ZLARND( 5, ISEED )
1024 ZTEMP = DCONJG( ZTEMP )
1028.GT.
CALL ZLAROT( .FALSE., .TRUE., N-JCK, IL, C, S,
1029 $ A( ( 1-ISKEW )*JC+IOFFG, JC ), ILDA,
1031 ICOL = MAX( 1, JC-K+1 )
1032 CALL ZLAROT( .TRUE., .FALSE., .TRUE., JC+2-ICOL,
1033 $ CT, ST, A( JC-ISKEW*ICOL+IOFFG,
1034 $ ICOL ), ILDA, DUMMY, ZTEMP )
1039 DO 360 JCH = JC + K, N - 1, K
1040 CALL ZLARTG( A( JCH-ISKEW*ICOL+IOFFG, ICOL ),
1041 $ EXTRA, REALC, S, DUMMY )
1042 DUMMY = ZLARND( 5, ISEED )
1045 ZTEMP = A( 1+( 1-ISKEW )*JCH+IOFFG, JCH )
1050 ZTEMP = DCONJG( ZTEMP )
1054 CALL ZLAROT( .TRUE., .TRUE., .TRUE., K+2, C, S,
1055 $ A( JCH-ISKEW*ICOL+IOFFG, ICOL ),
1056 $ ILDA, EXTRA, ZTEMP )
1057 IL = MIN( N+1-JCH, K+2 )
1059.GT.
CALL ZLAROT( .FALSE., .TRUE., N-JCHK, IL,
1060 $ CT, ST, A( ( 1-ISKEW )*JCH+IOFFG,
1061 $ JCH ), ILDA, ZTEMP, EXTRA )
1070.NE..AND..NE.
IF( IPACKIPACKG IPACK4 ) THEN
1071 DO 410 JC = N, 1, -1
1072 IROW = IOFFST - ISKEW*JC
1074 DO 390 JR = JC, MAX( 1, JC-UUB ), -1
1075 A( JR+IROW, JC ) = A( JC-ISKEW*JR+IOFFG, JR )
1078 DO 400 JR = JC, MAX( 1, JC-UUB ), -1
1079 A( JR+IROW, JC ) = DCONJG( A( JC-ISKEW*JR+
1084.EQ.
IF( IPACK6 ) THEN
1086 DO 420 JR = 1, UUB + 1 - JC
1091.EQ.
IF( IPACKG5 ) THEN
1101.NOT.
IF( CSYM ) THEN
1103 IROW = IOFFST + ( 1-ISKEW )*JC
1104 A( IROW, JC ) = DCMPLX( DBLE( A( IROW, JC ) ) )
1119.EQ.
IF( ISYM1 ) THEN
1123 CALL ZLAGGE( MR, NC, LLB, UUB, D, A, LDA, ISEED, WORK,
1131 CALL ZLAGSY( M, LLB, D, A, LDA, ISEED, WORK, IINFO )
1133 CALL ZLAGHE( M, LLB, D, A, LDA, ISEED, WORK, IINFO )
1137.NE.
IF( IINFO0 ) THEN
1145.NE.
IF( IPACKIPACKG ) THEN
1146.EQ.
IF( IPACK1 ) THEN
1156.EQ.
ELSE IF( IPACK2 ) THEN
1166.EQ.
ELSE IF( IPACK3 ) THEN
1175.GT.
IF( IROWLDA ) THEN
1179 A( IROW, ICOL ) = A( I, J )
1183.EQ.
ELSE IF( IPACK4 ) THEN
1192.GT.
IF( IROWLDA ) THEN
1196 A( IROW, ICOL ) = A( I, J )
1200.GE.
ELSE IF( IPACK5 ) THEN
1212 DO 530 I = MIN( J+LLB, M ), 1, -1
1213 A( I-J+UUB+1, J ) = A( I, J )
1217 DO 560 J = UUB + 2, N
1218 DO 550 I = J - UUB, MIN( J+LLB, M )
1219 A( I-J+UUB+1, J ) = A( I, J )
1229.EQ..OR..EQ.
IF( IPACK3 IPACK4 ) THEN
1231 DO 570 JR = IROW + 1, LDA
1237.GE.
ELSE IF( IPACK5 ) THEN
1248 DO 590 JR = 1, UUB + 1 - JC
1251 DO 600 JR = MAX( 1, MIN( IR1, IR2-JC ) ), LDA
subroutine zlartg(f, g, c, s, r)
ZLARTG generates a plane rotation with real cosine and complex sine.
subroutine xerbla(srname, info)
XERBLA
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 zlagge(m, n, kl, ku, d, a, lda, iseed, work, info)
ZLAGGE
subroutine zlarot(lrows, lleft, lright, nl, c, s, a, lda, xleft, xright)
ZLAROT
subroutine zlagsy(n, k, d, a, lda, iseed, work, info)
ZLAGSY
subroutine zlaghe(n, k, d, a, lda, iseed, work, info)
ZLAGHE
subroutine zlatmt(m, n, dist, iseed, sym, d, mode, cond, dmax, rank, kl, ku, pack, a, lda, work, info)
ZLATMT
subroutine dscal(n, da, dx, incx)
DSCAL
subroutine dlatm7(mode, cond, irsign, idist, iseed, d, n, rank, info)
DLATM7
subroutine jc(p, t, a, b, cm, cn, tref, tm, epsm, sigmam, jc_yield, tan_jc)