329 SUBROUTINE dlatmt( M, N, DIST, ISEED, SYM, D, MODE, COND, DMAX,
330 $ RANK, KL, KU, PACK, A, LDA, WORK, INFO )
337 DOUBLE PRECISION COND, DMAX
338 INTEGER INFO, KL, KU, LDA, M, MODE, N, RANK
339 CHARACTER DIST, PACK, SYM
342 DOUBLE PRECISION A( LDA, * ), D( * ), WORK( * )
349 DOUBLE PRECISION ZERO
350 parameter( zero = 0.0d0 )
352 parameter( one = 1.0d0 )
353 DOUBLE PRECISION TWOPI
354 parameter( twopi = 6.28318530717958647692528676655900576839d+0 )
357 DOUBLE PRECISION ALPHA, ANGLE, C, DUMMY, EXTRA, S, TEMP
358 INTEGER I, IC, ICOL, IDIST, IENDCH, IINFO, IL, ILDA,
359 $ ioffg, ioffst, ipack, ipackg, ir, ir1, ir2,
360 $ irow, irsign, iskew, isym, isympk, j,
jc, jch,
361 $ jkl, jku, jr, k, llb, minlda, mnmin, mr, nc,
363 LOGICAL GIVENS, ILEXTR, ILTEMP, TOPDWN
366 DOUBLE PRECISION DLARND
368 EXTERNAL dlarnd, lsame
375 INTRINSIC abs, cos, dble,
max,
min, mod, sin
386 IF( m.EQ.0 .OR. n.EQ.0 )
391 IF( lsame( dist,
'U' ) )
THEN
393 ELSE IF( lsame( dist,
'S' ) )
THEN
395 ELSE IF( lsame( dist,
'N' ) )
THEN
403 IF( lsame( sym,
'N' ) )
THEN
406 ELSE IF( lsame( sym,
'P' ) )
THEN
409 ELSE IF( lsame( sym,
'S' ) )
THEN
412 ELSE IF( lsame( sym,
'H' ) )
THEN
422 IF( lsame( pack, 'n
' ) ) THEN
424 ELSE IF( LSAME( PACK, 'u
' ) ) THEN
427 ELSE IF( LSAME( PACK, 'l
' ) ) THEN
430 ELSE IF( LSAME( PACK, 'c
' ) ) THEN
433 ELSE IF( LSAME( PACK, 'r
' ) ) THEN
436 ELSE IF( LSAME( PACK, 'b
' ) ) THEN
439 ELSE IF( LSAME( PACK, 'q
' ) ) THEN
442 ELSE IF( LSAME( PACK, 'z
' ) ) THEN
456.EQ..OR..EQ.
IF( IPACK5 IPACK6 ) THEN
458.EQ.
ELSE IF( IPACK7 ) THEN
459 MINLDA = LLB + UUB + 1
469.LT.
IF( DBLE( LLB+UUB )0.3D0*DBLE( MAX( 1, MR+NC ) ) )
475.LT..AND..GE.
IF( LDAM LDAMINLDA )
482.NE..AND..NE.
ELSE IF( MN ISYM1 ) THEN
484.LT.
ELSE IF( N0 ) THEN
486.EQ.
ELSE IF( IDIST-1 ) THEN
488.EQ.
ELSE IF( ISYM-1 ) THEN
490.GT.
ELSE IF( ABS( MODE )6 ) THEN
492.NE..AND..NE..AND..LT.
ELSE IF( ( MODE0 ABS( MODE )6 ) CONDONE )
495.LT.
ELSE IF( KL0 ) THEN
497.LT..OR..NE..AND..NE.
ELSE IF( KU0 ( ISYM1 KLKU ) ) THEN
499.EQ..OR..EQ..AND..EQ..OR.
ELSE IF( IPACK-1 ( ISYMPK1 ISYM1 )
500.EQ..AND..EQ..AND..GT..OR.
$ ( ISYMPK2 ISYM1 KL0 )
501.EQ..AND..EQ..AND..GT..OR.
$ ( ISYMPK3 ISYM1 KU0 )
502.NE..AND..NE.
$ ( ISYMPK0 MN ) ) THEN
504.LT.
ELSE IF( LDAMAX( 1, MINLDA ) ) THEN
509 CALL XERBLA( 'dlatmt', -INFO )
516 ISEED( I ) = MOD( ABS( ISEED( I ) ), 4096 )
519.NE.
IF( MOD( ISEED( 4 ), 2 )1 )
520 $ ISEED( 4 ) = ISEED( 4 ) + 1
526 CALL DLATM7( MODE, COND, IRSIGN, IDIST, ISEED, D, MNMIN, RANK,
528.NE.
IF( IINFO0 ) THEN
536.LE.
IF( ABS( D( 1 ) )ABS( D( RANK ) ) ) THEN
542.NE..AND..NE.
IF( MODE0 ABS( MODE )6 ) THEN
548 TEMP = MAX( TEMP, ABS( D( I ) ) )
551.GT.
IF( TEMPZERO ) THEN
558 CALL DSCAL( RANK, ALPHA, D, 1 )
571.GT.
IF( IPACK4 ) THEN
574.GT.
IF( IPACK5 ) THEN
590 CALL DLASET( 'full
', LDA, N, ZERO, ZERO, A, LDA )
595.EQ..AND..EQ.
IF( LLB0 UUB0 ) THEN
596 CALL DCOPY( MNMIN, D, 1, A( 1-ISKEW+IOFFST, 1 ), ILDA+1 )
597.LE..OR..GE.
IF( IPACK2 IPACK5 )
600 ELSE IF( GIVENS ) THEN
609.GT.
IF( IPACK4 ) THEN
615 CALL DCOPY( MNMIN, D, 1, A( 1-ISKEW+IOFFST, 1 ), ILDA+1 )
626 DO 130 JR = 1, MIN( M+JKU, N ) + JKL - 1
628 ANGLE = TWOPI*DLARND( 1, ISEED )
631 ICOL = MAX( 1, JR-JKL )
633 IL = MIN( N, JR+JKU ) + 1 - ICOL
634.GT.
CALL DLAROT( .TRUE., JRJKL, .FALSE., IL, C,
635 $ S, A( JR-ISKEW*ICOL+IOFFST, ICOL ),
636 $ ILDA, EXTRA, DUMMY )
643 DO 120 JCH = JR - JKL, 1, -JKL - JKU
645 CALL DLARTG( A( IR+1-ISKEW*( IC+1 )+IOFFST,
646 $ IC+1 ), EXTRA, C, S, DUMMY )
648 IROW = MAX( 1, JCH-JKU )
652 CALL DLAROT( .FALSE., ILTEMP, .TRUE., IL, C, -S,
653 $ A( IROW-ISKEW*IC+IOFFST, IC ),
654 $ ILDA, TEMP, EXTRA )
656 CALL DLARTG( A( IROW+1-ISKEW*( IC+1 )+IOFFST,
657 $ IC+1 ), TEMP, C, S, DUMMY )
658 ICOL = MAX( 1, JCH-JKU-JKL )
661.GT.
CALL DLAROT( .TRUE., JCHJKU+JKL, .TRUE.,
662 $ IL, C, -S, A( IROW-ISKEW*ICOL+
663 $ IOFFST, ICOL ), ILDA, EXTRA,
677 DO 160 JC = 1, MIN( N+JKL, M ) + JKU - 1
679 ANGLE = TWOPI*DLARND( 1, ISEED )
682 IROW = MAX( 1, JC-JKU )
684 IL = MIN( M, JC+JKL ) + 1 - IROW
685.GT.
CALL DLAROT( .FALSE., JCJKU, .FALSE., IL, C,
686 $ S, A( IROW-ISKEW*JC+IOFFST, JC ),
687 $ ILDA, EXTRA, DUMMY )
694 DO 150 JCH = JC - JKU, 1, -JKL - JKU
696 CALL DLARTG( A( IR+1-ISKEW*( IC+1 )+IOFFST,
697 $ IC+1 ), EXTRA, C, S, DUMMY )
699 ICOL = MAX( 1, JCH-JKL )
703 CALL DLAROT( .TRUE., ILTEMP, .TRUE., IL, C, -S,
704 $ A( IR-ISKEW*ICOL+IOFFST, ICOL ),
705 $ ILDA, TEMP, EXTRA )
707 CALL DLARTG( A( IR+1-ISKEW*( ICOL+1 )+IOFFST,
708 $ ICOL+1 ), TEMP, C, S, DUMMY )
709 IROW = MAX( 1, JCH-JKL-JKU )
712.GT.
CALL DLAROT( .FALSE., JCHJKL+JKU, .TRUE.,
713 $ IL, C, -S, A( IROW-ISKEW*ICOL+
714 $ IOFFST, ICOL ), ILDA, EXTRA,
735 IENDCH = MIN( M, N+JKL ) - 1
736 DO 190 JC = MIN( M+JKU, N ) - 1, 1 - JKL, -1
738 ANGLE = TWOPI*DLARND( 1, ISEED )
741 IROW = MAX( 1, JC-JKU+1 )
743 IL = MIN( M, JC+JKL+1 ) + 1 - IROW
744.LT.
CALL DLAROT( .FALSE., .FALSE., JC+JKLM, IL,
745 $ C, S, A( IROW-ISKEW*JC+IOFFST,
746 $ JC ), ILDA, DUMMY, EXTRA )
752 DO 180 JCH = JC + JKL, IENDCH, JKL + JKU
755 CALL DLARTG( A( JCH-ISKEW*IC+IOFFST, IC ),
756 $ EXTRA, C, S, DUMMY )
759 ICOL = MIN( N-1, JCH+JKU )
760.LT.
ILTEMP = JCH + JKUN
762 CALL DLAROT( .TRUE., ILEXTR, ILTEMP, ICOL+2-IC,
763 $ C, S, A( JCH-ISKEW*IC+IOFFST, IC ),
764 $ ILDA, EXTRA, TEMP )
766 CALL DLARTG( A( JCH-ISKEW*ICOL+IOFFST,
767 $ ICOL ), TEMP, C, S, DUMMY )
768 IL = MIN( IENDCH, JCH+JKL+JKU ) + 2 - JCH
770 CALL DLAROT( .FALSE., .TRUE.,
771.LE.
$ JCH+JKL+JKUIENDCH, IL, C, S,
772 $ A( JCH-ISKEW*ICOL+IOFFST,
773 $ ICOL ), ILDA, TEMP, EXTRA )
788 IENDCH = MIN( N, M+JKU ) - 1
789 DO 220 JR = MIN( N+JKL, M ) - 1, 1 - JKU, -1
791 ANGLE = TWOPI*DLARND( 1, ISEED )
794 ICOL = MAX( 1, JR-JKL+1 )
796 IL = MIN( N, JR+JKU+1 ) + 1 - ICOL
797.LT.
CALL DLAROT( .TRUE., .FALSE., JR+JKUN, IL,
798 $ C, S, A( JR-ISKEW*ICOL+IOFFST,
799 $ ICOL ), ILDA, DUMMY, EXTRA )
805 DO 210 JCH = JR + JKU, IENDCH, JKL + JKU
808 CALL DLARTG( A( IR-ISKEW*JCH+IOFFST, JCH ),
809 $ EXTRA, C, S, DUMMY )
812 IROW = MIN( M-1, JCH+JKL )
813.LT.
ILTEMP = JCH + JKLM
815 CALL DLAROT( .FALSE., ILEXTR, ILTEMP, IROW+2-IR,
816 $ C, S, A( IR-ISKEW*JCH+IOFFST,
817 $ JCH ), ILDA, EXTRA, TEMP )
819 CALL DLARTG( A( IROW-ISKEW*JCH+IOFFST, JCH ),
820 $ TEMP, C, S, DUMMY )
821 IL = MIN( IENDCH, JCH+JKL+JKU ) + 2 - JCH
823 CALL DLAROT( .TRUE., .TRUE.,
824.LE.
$ JCH+JKL+JKUIENDCH, IL, C, S,
825 $ A( IROW-ISKEW*JCH+IOFFST, JCH ),
826 $ ILDA, TEMP, EXTRA )
845.GE.
IF( IPACK5 ) THEN
851 CALL DCOPY( MNMIN, D, 1, A( 1-ISKEW+IOFFG, 1 ), ILDA+1 )
855 IROW = MAX( 1, JC-K )
856 IL = MIN( JC+1, K+2 )
858 TEMP = A( JC-ISKEW*( JC+1 )+IOFFG, JC+1 )
859 ANGLE = TWOPI*DLARND( 1, ISEED )
862.GT.
CALL DLAROT( .FALSE., JCK, .TRUE., IL, C, S,
863 $ A( IROW-ISKEW*JC+IOFFG, JC ), ILDA,
865 CALL DLAROT( .TRUE., .TRUE., .FALSE.,
866 $ MIN( K, N-JC )+1, C, S,
867 $ A( ( 1-ISKEW )*JC+IOFFG, JC ), ILDA,
873 DO 240 JCH = JC - K, 1, -K
874 CALL DLARTG( A( JCH+1-ISKEW*( ICOL+1 )+IOFFG,
875 $ ICOL+1 ), EXTRA, C, S, DUMMY )
876 TEMP = A( JCH-ISKEW*( JCH+1 )+IOFFG, JCH+1 )
877 CALL DLAROT( .TRUE., .TRUE., .TRUE., K+2, C, -S,
878 $ A( ( 1-ISKEW )*JCH+IOFFG, JCH ),
879 $ ILDA, TEMP, EXTRA )
880 IROW = MAX( 1, JCH-K )
881 IL = MIN( JCH+1, K+2 )
883.GT.
CALL DLAROT( .FALSE., JCHK, .TRUE., IL, C,
884 $ -S, A( IROW-ISKEW*JCH+IOFFG, JCH ),
885 $ ILDA, EXTRA, TEMP )
894.NE..AND..NE.
IF( IPACKIPACKG IPACK3 ) THEN
896 IROW = IOFFST - ISKEW*JC
897 DO 270 JR = JC, MIN( N, JC+UUB )
898 A( JR+IROW, JC ) = A( JC-ISKEW*JR+IOFFG, JR )
901.EQ.
IF( IPACK5 ) THEN
902 DO 300 JC = N - UUB + 1, N
903 DO 290 JR = N + 2 - JC, UUB + 1
908.EQ.
IF( IPACKG6 ) THEN
918.GE.
IF( IPACK5 ) THEN
925 CALL DCOPY( MNMIN, D, 1, A( 1-ISKEW+IOFFG, 1 ), ILDA+1 )
928 DO 320 JC = N - 1, 1, -1
929 IL = MIN( N+1-JC, K+2 )
931 TEMP = A( 1+( 1-ISKEW )*JC+IOFFG, JC )
932 ANGLE = TWOPI*DLARND( 1, ISEED )
935.GT.
CALL DLAROT( .FALSE., .TRUE., N-JCK, IL, C, S,
936 $ A( ( 1-ISKEW )*JC+IOFFG, JC ), ILDA,
938 ICOL = MAX( 1, JC-K+1 )
939 CALL DLAROT( .TRUE., .FALSE., .TRUE., JC+2-ICOL, C,
940 $ S, A( JC-ISKEW*ICOL+IOFFG, ICOL ),
941 $ ILDA, DUMMY, TEMP )
946 DO 310 JCH = JC + K, N - 1, K
947 CALL DLARTG( A( JCH-ISKEW*ICOL+IOFFG, ICOL ),
948 $ EXTRA, C, S, DUMMY )
949 TEMP = A( 1+( 1-ISKEW )*JCH+IOFFG, JCH )
950 CALL DLAROT( .TRUE., .TRUE., .TRUE., K+2, C, S,
951 $ A( JCH-ISKEW*ICOL+IOFFG, ICOL ),
952 $ ILDA, EXTRA, TEMP )
953 IL = MIN( N+1-JCH, K+2 )
955.GT.
CALL DLAROT( .FALSE., .TRUE., N-JCHK, IL, C,
956 $ S, A( ( 1-ISKEW )*JCH+IOFFG, JCH ),
957 $ ILDA, TEMP, EXTRA )
966.NE..AND..NE.
IF( IPACKIPACKG IPACK4 ) THEN
968 IROW = IOFFST - ISKEW*JC
969 DO 340 JR = JC, MAX( 1, JC-UUB ), -1
970 A( JR+IROW, JC ) = A( JC-ISKEW*JR+IOFFG, JR )
973.EQ.
IF( IPACK6 ) THEN
975 DO 360 JR = 1, UUB + 1 - JC
980.EQ.
IF( IPACKG5 ) THEN
1002 CALL DLAGGE( MR, NC, LLB, UUB, D, A, LDA, ISEED, WORK,
1008 CALL DLAGSY( M, LLB, D, A, LDA, ISEED, WORK, IINFO )
1011.NE.
IF( IINFO0 ) THEN
1019.NE.
IF( IPACKIPACKG ) THEN
1020.EQ.
IF( IPACK1 ) THEN
1030.EQ.
ELSE IF( IPACK2 ) THEN
1040.EQ.
ELSE IF( IPACK3 ) THEN
1049.GT.
IF( IROWLDA ) THEN
1053 A( IROW, ICOL ) = A( I, J )
1057.EQ.
ELSE IF( IPACK4 ) THEN
1066.GT.
IF( IROWLDA ) THEN
1070 A( IROW, ICOL ) = A( I, J )
1074.GE.
ELSE IF( IPACK5 ) THEN
1086 DO 460 I = MIN( J+LLB, M ), 1, -1
1087 A( I-J+UUB+1, J ) = A( I, J )
1091 DO 490 J = UUB + 2, N
1092 DO 480 I = J - UUB, MIN( J+LLB, M )
1093 A( I-J+UUB+1, J ) = A( I, J )
1103.EQ..OR..EQ.
IF( IPACK3 IPACK4 ) THEN
1105 DO 500 JR = IROW + 1, LDA
1111.GE.
ELSE IF( IPACK5 ) THEN
1122 DO 520 JR = 1, UUB + 1 - JC
1125 DO 530 JR = MAX( 1, MIN( IR1, IR2-JC ) ), LDA
subroutine dlartg(f, g, c, s, r)
DLARTG generates a plane rotation with real cosine and real sine.
subroutine dlaset(uplo, m, n, alpha, beta, a, lda)
DLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine xerbla(srname, info)
XERBLA
subroutine dscal(n, da, dx, incx)
DSCAL
subroutine dcopy(n, dx, incx, dy, incy)
DCOPY
subroutine dlatm7(mode, cond, irsign, idist, iseed, d, n, rank, info)
DLATM7
subroutine dlatmt(m, n, dist, iseed, sym, d, mode, cond, dmax, rank, kl, ku, pack, a, lda, work, info)
DLATMT
subroutine dlagsy(n, k, d, a, lda, iseed, work, info)
DLAGSY
subroutine dlagge(m, n, kl, ku, d, a, lda, iseed, work, info)
DLAGGE
subroutine dlarot(lrows, lleft, lright, nl, c, s, a, lda, xleft, xright)
DLAROT
subroutine jc(p, t, a, b, cm, cn, tref, tm, epsm, sigmam, jc_yield, tan_jc)