1 SUBROUTINE slatms( M, N, DIST, ISEED, SYM, D, MODE, COND, DMAX,
2 $ KL, KU, PACK, A, LDA, WORK, INFO )
10INTEGER INFO, KL, KU, , M, , N
15 REAL A( LDA, * ), D( * ), WORK( * )
254 parameter( zero = 0.0e0 )
256 parameter( one = 1.0e0 )
258 parameter( twopi = 6.2831853071795864769252867663e+0 )
261 LOGICAL GIVENS, ILEXTR, ILTEMP, TOPDWN
262 INTEGER I, IC, ICOL, IDIST, IENDCH, IINFO, IL, ILDA,
263 $ ioffg, ioffst, ipack, ipackg, ir, ir1, ir2,
264 $ irow, irsign, iskew, isym, isympk, j,
jc, jch,
265 $ jkl, jku, jr, k, llb, minlda, mnmin, mr, nc,
267 REAL ALPHA, ANGLE, C, , EXTRA, S, TEMP
272 EXTERNAL lsame, slarnd
279 INTRINSIC abs, cos,
max,
min, mod, real, sin
290 IF( m.EQ.0 .OR. n.EQ.0 )
295 IF( lsame( dist,
'U' ) )
THEN
297 ELSE IF( lsame( dist,
'S' ) )
THEN
299 ELSE IF( lsame( dist,
'N' ) )
THEN
307 IF( lsame( sym,
'N' ) )
THEN
310 ELSE IF( lsame( sym,
'P' ) )
THEN
313 ELSE IF( lsame( sym,
'S' ) )
THEN
316 ELSE IF( lsame( sym,
'H' ) )
THEN
326 IF( lsame( pack,
'N' ) )
THEN
328 ELSE IF( lsame( pack,
'U' ) )
THEN
331 ELSE IF( lsame( pack,
'L' ) )
THEN
334 ELSE IF( lsame( pack,
'C' ) )
THEN
337 ELSE IF( lsame( pack,
'R' ) )
THEN
340 ELSE IF( lsame( pack,
'B' ) )
THEN
343 ELSE IF( lsame( pack,
'Q' ) )
THEN
346 ELSE IF( lsame( pack,
'Z' ) )
THEN
362 IF( ipack.EQ.5 .OR. ipack.EQ.6 )
THEN
364 ELSE IF( ipack.EQ.7 )
THEN
365 minlda = llb + uub + 1
375 IF( real( llb+uub ).LT.0.3*real(
max( 1, mr+nc ) ) )
381 IF( lda.LT.m .AND. lda.GE.minlda )
388 ELSE IF( m.NE.n .AND. isym.NE.1 )
THEN
390 ELSE IF( n.LT.0 )
THEN
392 ELSE IF( idist.EQ.-1 )
THEN
394 ELSE IF( isym.EQ.-1 )
THEN
396 ELSE IF( abs( mode ).GT.6 )
THEN
398 ELSE IF( ( mode.NE.0 .AND. abs( mode ).NE.6 ) .AND. cond.LT.one )
401 ELSE IF( kl.LT.0 )
THEN
403 ELSE IF( ku.LT.0 .OR. ( isym.NE.1 .AND. kl.NE.ku ) )
THEN
405 ELSE IF( ipack.EQ.-1 .OR. ( isympk.EQ.1 .AND. isym.EQ.1 ) .OR.
406 $ ( isympk.EQ.2 .AND. isym.EQ.1 .AND. kl.GT.0 ) .OR.
407 $ ( isympk.EQ.3 .AND. isym.EQ.1 .AND. ku.GT.0 ) .OR.
408 $ ( isympk.NE.0 .AND. m.NE.n ) )
THEN
410 ELSE IF( lda.LT.
max( 1, minlda ) )
THEN
422 ISEED( I ) = MOD( ABS( ISEED( I ) ), 4096 )
425.NE.
IF( MOD( ISEED( 4 ), 2 )1 )
426 $ ISEED( 4 ) = ISEED( 4 ) + 1
432 CALL SLATM1( MODE, COND, IRSIGN, IDIST, ISEED, D, MNMIN, IINFO )
433.NE.
IF( IINFO0 ) THEN
441.LE.
IF( ABS( D( 1 ) )ABS( D( MNMIN ) ) ) THEN
447.NE..AND..NE.
IF( MODE0 ABS( MODE )6 ) THEN
453 TEMP = MAX( TEMP, ABS( D( I ) ) )
456.GT.
IF( TEMPZERO ) THEN
463 CALL SSCAL( MNMIN, ALPHA, D, 1 )
476.GT.
IF( IPACK4 ) THEN
479.GT.
IF( IPACK5 ) THEN
495 CALL SLASET( 'full
', LDA, N, ZERO, ZERO, A, LDA )
500.EQ..AND..EQ.
IF( LLB0 UUB0 ) THEN
501 CALL SCOPY( MNMIN, D, 1, A( 1-ISKEW+IOFFST, 1 ), ILDA+1 )
502.LE..OR..GE.
IF( IPACK2 IPACK5 )
505 ELSE IF( GIVENS ) THEN
514.GT.
IF( IPACK4 ) THEN
520 CALL SCOPY( MNMIN, D, 1, A( 1-ISKEW+IOFFST, 1 ), ILDA+1 )
531 DO 40 JR = 1, MIN( M+JKU, N ) + JKL - 1
533 ANGLE = TWOPI*SLARND( 1, ISEED )
536 ICOL = MAX( 1, JR-JKL )
538 IL = MIN( N, JR+JKU ) + 1 - ICOL
539.GT.
CALL SLAROT( .TRUE., JRJKL, .FALSE., IL, C,
540 $ S, A( JR-ISKEW*ICOL+IOFFST, ICOL ),
541 $ ILDA, EXTRA, DUMMY )
548 DO 30 JCH = JR - JKL, 1, -JKL - JKU
550 CALL SLARTG( A( IR+1-ISKEW*( IC+1 )+IOFFST,
551 $ IC+1 ), EXTRA, C, S, DUMMY )
553 IROW = MAX( 1, JCH-JKU )
557 CALL SLAROT( .FALSE., ILTEMP, .TRUE., IL, C, -S,
558 $ A( IROW-ISKEW*IC+IOFFST, IC ),
559 $ ILDA, TEMP, EXTRA )
561 CALL SLARTG( A( IROW+1-ISKEW*( IC+1 )+IOFFST,
562 $ IC+1 ), TEMP, C, S, DUMMY )
563 ICOL = MAX( 1, JCH-JKU-JKL )
566.GT.
CALL SLAROT( .TRUE., JCHJKU+JKL, .TRUE.,
567 $ IL, C, -S, A( IROW-ISKEW*ICOL+
568 $ IOFFST, ICOL ), ILDA, EXTRA,
582 DO 70 JC = 1, MIN( N+JKL, M ) + JKU - 1
584 ANGLE = TWOPI*SLARND( 1, ISEED )
587 IROW = MAX( 1, JC-JKU )
589 IL = MIN( M, JC+JKL ) + 1 - IROW
590.GT.
CALL SLAROT( .FALSE., JCJKU, .FALSE., IL, C,
591 $ S, A( IROW-ISKEW*JC+IOFFST, JC ),
592 $ ILDA, EXTRA, DUMMY )
599 DO 60 JCH = JC - JKU, 1, -JKL - JKU
601 CALL SLARTG( A( IR+1-ISKEW*( IC+1 )+IOFFST,
602 $ IC+1 ), EXTRA, C, S, DUMMY )
604 ICOL = MAX( 1, JCH-JKL )
608 CALL SLAROT( .TRUE., ILTEMP, .TRUE., IL, C, -S,
609 $ A( IR-ISKEW*ICOL+IOFFST, ICOL ),
610 $ ILDA, TEMP, EXTRA )
612 CALL SLARTG( A( IR+1-ISKEW*( ICOL+1 )+IOFFST,
613 $ ICOL+1 ), TEMP, C, S, DUMMY )
614 IROW = MAX( 1, JCH-JKL-JKU )
617.GT.
CALL SLAROT( .FALSE., JCHJKL+JKU, .TRUE.,
618 $ IL, C, -S, A( IROW-ISKEW*ICOL+
619 $ IOFFST, ICOL ), ILDA, EXTRA,
640 IENDCH = MIN( M, N+JKL ) - 1
641 DO 100 JC = MIN( M+JKU, N ) - 1, 1 - JKL, -1
643 ANGLE = TWOPI*SLARND( 1, ISEED )
646 IROW = MAX( 1, JC-JKU+1 )
648 IL = MIN( M, JC+JKL+1 ) + 1 - IROW
649.LT.
CALL SLAROT( .FALSE., .FALSE., JC+JKLM, IL,
650 $ C, S, A( IROW-ISKEW*JC+IOFFST,
651 $ JC ), ILDA, DUMMY, EXTRA )
657 DO 90 JCH = JC + JKL, IENDCH, JKL + JKU
660 CALL SLARTG( A( JCH-ISKEW*IC+IOFFST, IC ),
661 $ EXTRA, C, S, DUMMY )
664 ICOL = MIN( N-1, JCH+JKU )
665.LT.
ILTEMP = JCH + JKUN
667 CALL SLAROT( .TRUE., ILEXTR, ILTEMP, ICOL+2-IC,
668 $ C, S, A( JCH-ISKEW*IC+IOFFST, IC ),
669 $ ILDA, EXTRA, TEMP )
671 CALL SLARTG( A( JCH-ISKEW*ICOL+IOFFST,
672 $ ICOL ), TEMP, C, S, DUMMY )
673 IL = MIN( IENDCH, JCH+JKL+JKU ) + 2 - JCH
675 CALL SLAROT( .FALSE., .TRUE.,
676.LE.
$ JCH+JKL+JKUIENDCH, IL, C, S,
677 $ A( JCH-ISKEW*ICOL+IOFFST,
678 $ ICOL ), ILDA, TEMP, EXTRA )
693 IENDCH = MIN( N, M+JKU ) - 1
694 DO 130 JR = MIN( N+JKL, M ) - 1, 1 - JKU, -1
696 ANGLE = TWOPI*SLARND( 1, ISEED )
699 ICOL = MAX( 1, JR-JKL+1 )
701 IL = MIN( N, JR+JKU+1 ) + 1 - ICOL
702.LT.
CALL SLAROT( .TRUE., .FALSE., JR+JKUN, IL,
703 $ C, S, A( JR-ISKEW*ICOL+IOFFST,
704 $ ICOL ), ILDA, DUMMY, EXTRA )
710 DO 120 JCH = JR + JKU, IENDCH, JKL + JKU
713 CALL SLARTG( A( IR-ISKEW*JCH+IOFFST, JCH ),
714 $ EXTRA, C, S, DUMMY )
717 IROW = MIN( M-1, JCH+JKL )
718.LT.
ILTEMP = JCH + JKLM
720 CALL SLAROT( .FALSE., ILEXTR, ILTEMP, IROW+2-IR,
721 $ C, S, A( IR-ISKEW*JCH+IOFFST,
722 $ JCH ), ILDA, EXTRA, TEMP )
724 CALL SLARTG( A( IROW-ISKEW*JCH+IOFFST, JCH ),
725 $ TEMP, C, S, DUMMY )
726 IL = MIN( IENDCH, JCH+JKL+JKU ) + 2 - JCH
728 CALL SLAROT( .TRUE., .TRUE.,
729.LE.
$ JCH+JKL+JKUIENDCH, IL, C, S,
730 $ A( IROW-ISKEW*JCH+IOFFST, JCH ),
731 $ ILDA, TEMP, EXTRA )
750.GE.
IF( IPACK5 ) THEN
756 CALL SCOPY( MNMIN, D, 1, A( 1-ISKEW+IOFFG, 1 ), ILDA+1 )
760 IROW = MAX( 1, JC-K )
761 IL = MIN( JC+1, K+2 )
763 TEMP = A( JC-ISKEW*( JC+1 )+IOFFG, JC+1 )
764 ANGLE = TWOPI*SLARND( 1, ISEED )
767.GT.
CALL SLAROT( .FALSE., JCK, .TRUE., IL, C, S,
768 $ A( IROW-ISKEW*JC+IOFFG, JC ), ILDA,
770 CALL SLAROT( .TRUE., .TRUE., .FALSE.,
771 $ MIN( K, N-JC )+1, C, S,
772 $ A( ( 1-ISKEW )*JC+IOFFG, JC ), ILDA,
778 DO 150 JCH = JC - K, 1, -K
779 CALL SLARTG( A( JCH+1-ISKEW*( ICOL+1 )+IOFFG,
780 $ ICOL+1 ), EXTRA, C, S, DUMMY )
781 TEMP = A( JCH-ISKEW*( JCH+1 )+IOFFG, JCH+1 )
782 CALL SLAROT( .TRUE., .TRUE., .TRUE., K+2, C, -S,
783 $ A( ( 1-ISKEW )*JCH+IOFFG, JCH ),
784 $ ILDA, TEMP, EXTRA )
785 IROW = MAX( 1, JCH-K )
786 IL = MIN( JCH+1, K+2 )
788.GT.
CALL SLAROT( .FALSE., JCHK, .TRUE., IL, C,
789 $ -S, A( IROW-ISKEW*JCH+IOFFG, JCH ),
790 $ ILDA, EXTRA, TEMP )
799.NE..AND..NE.
IF( IPACKIPACKG IPACK3 ) THEN
801 IROW = IOFFST - ISKEW*JC
802 DO 180 JR = JC, MIN( N, JC+UUB )
803 A( JR+IROW, JC ) = A( JC-ISKEW*JR+IOFFG, JR )
806.EQ.
IF( IPACK5 ) THEN
807 DO 210 JC = N - UUB + 1, N
808 DO 200 JR = N + 2 - JC, UUB + 1
813.EQ.
IF( IPACKG6 ) THEN
823.GE.
IF( IPACK5 ) THEN
830 CALL SCOPY( MNMIN, D, 1, A( 1-ISKEW+IOFFG, 1 ), ILDA+1 )
833 DO 230 JC = N - 1, 1, -1
834 IL = MIN( N+1-JC, K+2 )
836 TEMP = A( 1+( 1-ISKEW )*JC+IOFFG, JC )
837 ANGLE = TWOPI*SLARND( 1, ISEED )
840.GT.
CALL SLAROT( .FALSE., .TRUE., N-JCK, IL, C, S,
841 $ A( ( 1-ISKEW )*JC+IOFFG, JC ), ILDA,
843 ICOL = MAX( 1, JC-K+1 )
844 CALL SLAROT( .TRUE., .FALSE., .TRUE., JC+2-ICOL, C,
845 $ S, A( JC-ISKEW*ICOL+IOFFG, ICOL ),
846 $ ILDA, DUMMY, TEMP )
851 DO 220 JCH = JC + K, N - 1, K
852 CALL SLARTG( A( JCH-ISKEW*ICOL+IOFFG, ICOL ),
853 $ EXTRA, C, S, DUMMY )
854 TEMP = A( 1+( 1-ISKEW )*JCH+IOFFG, JCH )
855 CALL SLAROT( .TRUE., .TRUE., .TRUE., K+2, C, S,
856 $ A( JCH-ISKEW*ICOL+IOFFG, ICOL ),
857 $ ILDA, EXTRA, TEMP )
858 IL = MIN( N+1-JCH, K+2 )
860.GT.
CALL SLAROT( .FALSE., .TRUE., N-JCHK, IL, C,
861 $ S, A( ( 1-ISKEW )*JCH+IOFFG, JCH ),
862 $ ILDA, TEMP, EXTRA )
871.NE..AND..NE.
IF( IPACKIPACKG IPACK4 ) THEN
873 IROW = IOFFST - ISKEW*JC
874 DO 250 JR = JC, MAX( 1, JC-UUB ), -1
875 A( JR+IROW, JC ) = A( JC-ISKEW*JR+IOFFG, JR )
878.EQ.
IF( IPACK6 ) THEN
880 DO 270 JR = 1, UUB + 1 - JC
885.EQ.
IF( IPACKG5 ) THEN
907 CALL SLAGGE( MR, NC, LLB, UUB, D, A, LDA, ISEED, WORK,
913 CALL SLAGSY( M, LLB, D, A, LDA, ISEED, WORK, IINFO )
916.NE.
IF( IINFO0 ) THEN
924.NE.
IF( IPACKIPACKG ) THEN
925.EQ.
IF( IPACK1 ) THEN
935.EQ.
ELSE IF( IPACK2 ) THEN
945.EQ.
ELSE IF( IPACK3 ) THEN
954.GT.
IF( IROWLDA ) THEN
958 A( IROW, ICOL ) = A( I, J )
962.EQ.
ELSE IF( IPACK4 ) THEN
971.GT.
IF( IROWLDA ) THEN
975 A( IROW, ICOL ) = A( I, J )
979.GE.
ELSE IF( IPACK5 ) THEN
991 DO 370 I = MIN( J+LLB, M ), 1, -1
992 A( I-J+UUB+1, J ) = A( I, J )
996 DO 400 J = UUB + 2, N
997 DO 390 I = J - UUB, MIN( J+LLB, M )
998 A( I-J+UUB+1, J ) = A( I, J )
1008.EQ..OR..EQ.
IF( IPACK3 IPACK4 ) THEN
1010 DO 410 JR = IROW + 1, LDA
1016.GE.
ELSE IF( IPACK5 ) THEN
1027 DO 430 JR = 1, UUB + 1 - JC
1030 DO 440 JR = MAX( 1, MIN( IR1, IR2-JC ) ), LDA
subroutine slaset(uplo, m, n, alpha, beta, a, lda)
SLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine slartg(f, g, c, s, r)
SLARTG generates a plane rotation with real cosine and real sine.
subroutine xerbla(srname, info)
XERBLA
subroutine slagsy(n, k, d, a, lda, iseed, work, info)
SLAGSY
subroutine slagge(m, n, kl, ku, d, a, lda, iseed, work, info)
SLAGGE
subroutine slatm1(mode, cond, irsign, idist, iseed, d, n, info)
SLATM1
subroutine slarot(lrows, lleft, lright, nl, c, s, a, lda, xleft, xright)
SLAROT
subroutine sscal(n, sa, sx, incx)
SSCAL
subroutine scopy(n, sx, incx, sy, incy)
SCOPY
subroutine jc(p, t, a, b, cm, cn, tref, tm, epsm, sigmam, jc_yield, tan_jc)