330 SUBROUTINE clatms( M, N, DIST, ISEED, SYM, D, MODE, COND, DMAX,
331 $ KL, KU, PACK, A, LDA, WORK, INFO )
338 CHARACTER DIST, PACK, SYM
339 INTEGER INFO, KL, KU, LDA, M, MODE, N
345 COMPLEX A( , * ), WORK( * )
352 parameter( zero = 0.0e+0 )
354 parameter( one = 1.0e+0 )
356 parameter( czero = ( 0.0e+0, 0.0e+0 ) )
358 parameter( twopi = 6.28318530717958647692528676655900576839e+0 )
361 LOGICAL CSYM, GIVENS, ILEXTR, ILTEMP, TOPDWN
362 INTEGER I, IC, ICOL, IDIST, IENDCH, , IL, ILDA,
363 $ ioffg, ioffst, ipack, ipackg, ir, ir1, ir2,
364 $ irow, irsign, iskew, isym, isympk, j,
jc, jch,
365 $ jkl, jku, jr, k, llb, minlda, mnmin, mr, nc,
367 REAL ALPHA, ANGLE, REALC, TEMP
368 COMPLEX C, CT, CTEMP, DUMMY, , S, ST
374 EXTERNAL lsame, slarnd, clarnd
381 INTRINSIC abs,
cmplx, conjg, cos,
max,
min, mod, real,
393 IF( m.EQ.0 .OR. n.EQ.0 )
398 IF( lsame( dist,
'U' ) )
THEN
400 ELSE IF( lsame( dist,
'S' ) )
THEN
402 ELSE IF( lsame( dist,
'N' ) )
THEN
410 IF( lsame( sym,
'N' ) )
THEN
414 ELSE IF( lsame( sym,
'P' ) )
THEN
418 ELSE IF( lsame( sym,
'S' ) )
THEN
422 ELSE IF( lsame( sym,
'H' ) )
THEN
433 IF( lsame( pack,
'N' ) )
THEN
435 ELSE IF( lsame( pack
'U'THEN
438 ELSE IF( lsame( pack,
'L' ) )
THEN
441 ELSE IF( lsame( pack,
'C' ) )
THEN
444 ELSE IF( lsame( pack,
'R' ) )
THEN
447 ELSE IF( lsame( pack,
'B' ) )
THEN
450 ELSE IF( lsame( pack,
'Q' ) )
THEN
453 ELSE IF( lsame( pack,
'Z' ) )
THEN
467 IF( ipack.EQ.5 .OR. ipack.EQ.6 )
THEN
469 ELSE IF( ipack.EQ.7 )
THEN
470 minlda = llb + uub + 1
480 IF( real( llb+uub ).LT.0.3*real(
max( 1, mr+nc ) ) )
486 IF( lda.LT.m .AND. lda.GE.minlda )
493 ELSE IF( m.NE.n .AND. isym.NE.1 )
THEN
495 ELSE IF( n.LT.0 )
THEN
497 ELSE IF( idist.EQ.-1 )
THEN
499 ELSE IF( isym.EQ.-1 )
THEN
501 ELSE IF( abs( mode ).GT.6 )
THEN
503 ELSE IF( ( mode.NE.0 .AND. abs( mode ).NE.6 ) .AND. cond.LT.one )
506 ELSE IF( kl.LT.0 )
THEN
508 ELSE IF( ku.LT.0 .OR. ( isym.NE.1 .AND. kl.NE.ku ) )
THEN
510 ELSE IF( ipack.EQ.-1 .OR. ( isympk.EQ.1 .AND. isym.EQ.1 ) .OR.
511 $ ( isympk.EQ.2 .AND. isym.EQ.1 .AND. kl.GT.0 ) .OR.
512 $ ( isympk.EQ.3 .AND. isym.EQ.1 .AND. ku.GT.0 ) .OR.
513 $ ( isympk.NE.0 .AND. m.NE.n ) )
THEN
515 ELSE IF( lda.LT.
max( 1, minlda ) )
THEN
520 CALL xerbla(
'CLATMS', -info )
527 iseed( i ) = mod( abs( iseed( i ) ), 4096 )
530 IF( mod( iseed( 4 ), 2 ).NE.1 )
531 $ iseed( 4 ) = iseed( 4 ) + 1
537 CALL slatm1( mode, cond, irsign, idist, iseed, d, mnmin, iinfo )
538 IF( iinfo.NE.0 )
THEN
546 IF( abs( d( 1 ) ).LE.abs( d( mnmin ) ) )
THEN
552 IF( mode.NE.0 .AND. abs( mode ).NE.6 )
THEN
558 temp =
max( temp, abs( d( i ) ) )
561 IF( temp.GT.zero )
THEN
568 CALL sscal( mnmin, alpha, d, 1 )
572 CALL claset( 'full
', LDA, N, CZERO, CZERO, A, LDA )
583.GT.
IF( IPACK4 ) THEN
586.GT.
IF( IPACK5 ) THEN
606.EQ..AND..EQ.
IF( LLB0 UUB0 ) THEN
608 A( ( 1-ISKEW )*J+IOFFST, J ) = CMPLX( D( J ) )
611.LE..OR..GE.
IF( IPACK2 IPACK5 )
614 ELSE IF( GIVENS ) THEN
623.GT.
IF( IPACK4 ) THEN
630 A( ( 1-ISKEW )*J+IOFFST, J ) = CMPLX( D( J ) )
642 DO 60 JR = 1, MIN( M+JKU, N ) + JKL - 1
644 ANGLE = TWOPI*SLARND( 1, ISEED )
645 C = COS( ANGLE )*CLARND( 5, ISEED )
646 S = SIN( ANGLE )*CLARND( 5, ISEED )
647 ICOL = MAX( 1, JR-JKL )
649 IL = MIN( N, JR+JKU ) + 1 - ICOL
650.GT.
CALL CLAROT( .TRUE., JRJKL, .FALSE., IL, C,
651 $ S, A( JR-ISKEW*ICOL+IOFFST, ICOL ),
652 $ ILDA, EXTRA, DUMMY )
659 DO 50 JCH = JR - JKL, 1, -JKL - JKU
661 CALL CLARTG( A( IR+1-ISKEW*( IC+1 )+IOFFST,
662 $ IC+1 ), EXTRA, REALC, S, DUMMY )
663 DUMMY = CLARND( 5, ISEED )
664 C = CONJG( REALC*DUMMY )
665 S = CONJG( -S*DUMMY )
667 IROW = MAX( 1, JCH-JKU )
671 CALL CLAROT( .FALSE., ILTEMP, .TRUE., IL, C, S,
672 $ A( IROW-ISKEW*IC+IOFFST, IC ),
673 $ ILDA, CTEMP, EXTRA )
675 CALL CLARTG( A( IROW+1-ISKEW*( IC+1 )+IOFFST,
676 $ IC+1 ), CTEMP, REALC, S, DUMMY )
677 DUMMY = CLARND( 5, ISEED )
678 C = CONJG( REALC*DUMMY )
679 S = CONJG( -S*DUMMY )
681 ICOL = MAX( 1, JCH-JKU-JKL )
684.GT.
CALL CLAROT( .TRUE., JCHJKU+JKL, .TRUE.,
685 $ IL, C, S, A( IROW-ISKEW*ICOL+
686 $ IOFFST, ICOL ), ILDA, EXTRA,
700 DO 90 JC = 1, MIN( N+JKL, M ) + JKU - 1
702 ANGLE = TWOPI*SLARND( 1, ISEED )
703 C = COS( ANGLE )*CLARND( 5, ISEED )
704 S = SIN( ANGLE )*CLARND( 5, ISEED )
705 IROW = MAX( 1, JC-JKU )
707 IL = MIN( M, JC+JKL ) + 1 - IROW
708.GT.
CALL CLAROT( .FALSE., JCJKU, .FALSE., IL, C,
709 $ S, A( IROW-ISKEW*JC+IOFFST, JC ),
710 $ ILDA, EXTRA, DUMMY )
717 DO 80 JCH = JC - JKU, 1, -JKL - JKU
719 CALL CLARTG( A( IR+1-ISKEW*( IC+1 )+IOFFST,
720 $ IC+1 ), EXTRA, REALC, S, DUMMY )
721 DUMMY = CLARND( 5, ISEED )
722 C = CONJG( REALC*DUMMY )
723 S = CONJG( -S*DUMMY )
725 ICOL = MAX( 1, JCH-JKL )
729 CALL CLAROT( .TRUE., ILTEMP, .TRUE., IL, C, S,
730 $ A( IR-ISKEW*ICOL+IOFFST, ICOL ),
731 $ ILDA, CTEMP, EXTRA )
733 CALL CLARTG( A( IR+1-ISKEW*( ICOL+1 )+IOFFST,
734 $ ICOL+1 ), CTEMP, REALC, S,
736 DUMMY = CLARND( 5, ISEED )
737 C = CONJG( REALC*DUMMY )
738 S = CONJG( -S*DUMMY )
739 IROW = MAX( 1, JCH-JKL-JKU )
742.GT.
CALL CLAROT( .FALSE., JCHJKL+JKU, .TRUE.,
743 $ IL, C, S, A( IROW-ISKEW*ICOL+
744 $ IOFFST, ICOL ), ILDA, EXTRA,
765 IENDCH = MIN( M, N+JKL ) - 1
766 DO 120 JC = MIN( M+JKU, N ) - 1, 1 - JKL, -1
768 ANGLE = TWOPI*SLARND( 1, ISEED )
769 C = COS( ANGLE )*CLARND( 5, ISEED )
770 S = SIN( ANGLE )*CLARND( 5, ISEED )
771 IROW = MAX( 1, JC-JKU+1 )
773 IL = MIN( M, JC+JKL+1 ) + 1 - IROW
774.LT.
CALL CLAROT( .FALSE., .FALSE., JC+JKLM, IL,
775 $ C, S, A( IROW-ISKEW*JC+IOFFST,
776 $ JC ), ILDA, DUMMY, EXTRA )
782 DO 110 JCH = JC + JKL, IENDCH, JKL + JKU
785 CALL CLARTG( A( JCH-ISKEW*IC+IOFFST, IC ),
786 $ EXTRA, REALC, S, DUMMY )
787 DUMMY = CLARND( 5, ISEED )
792 ICOL = MIN( N-1, JCH+JKU )
793.LT.
ILTEMP = JCH + JKUN
795 CALL CLAROT( .TRUE., ILEXTR, ILTEMP, ICOL+2-IC,
796 $ C, S, A( JCH-ISKEW*IC+IOFFST, IC ),
797 $ ILDA, EXTRA, CTEMP )
799 CALL CLARTG( A( JCH-ISKEW*ICOL+IOFFST,
800 $ ICOL ), CTEMP, REALC, S, DUMMY )
801 DUMMY = CLARND( 5, ISEED )
804 IL = MIN( IENDCH, JCH+JKL+JKU ) + 2 - JCH
806 CALL CLAROT( .FALSE., .TRUE.,
807.LE.
$ JCH+JKL+JKUIENDCH, IL, C, S,
808 $ A( JCH-ISKEW*ICOL+IOFFST,
809 $ ICOL ), ILDA, CTEMP, EXTRA )
824 IENDCH = MIN( N, M+JKU ) - 1
825 DO 150 JR = MIN( N+JKL, M ) - 1, 1 - JKU, -1
827 ANGLE = TWOPI*SLARND( 1, ISEED )
828 C = COS( ANGLE )*CLARND( 5, ISEED )
829 S = SIN( ANGLE )*CLARND( 5, ISEED )
830 ICOL = MAX( 1, JR-JKL+1 )
832 IL = MIN( N, JR+JKU+1 ) + 1 - ICOL
833.LT.
CALL CLAROT( .TRUE., .FALSE., JR+JKUN, IL,
834 $ C, S, A( JR-ISKEW*ICOL+IOFFST,
835 $ ICOL ), ILDA, DUMMY, EXTRA )
841 DO 140 JCH = JR + JKU, IENDCH, JKL + JKU
844 CALL CLARTG( A( IR-ISKEW*JCH+IOFFST, JCH ),
845 $ EXTRA, REALC, S, DUMMY )
846 DUMMY = CLARND( 5, ISEED )
851 IROW = MIN( M-1, JCH+JKL )
852.LT.
ILTEMP = JCH + JKLM
854 CALL CLAROT( .FALSE., ILEXTR, ILTEMP, IROW+2-IR,
855 $ C, S, A( IR-ISKEW*JCH+IOFFST,
856 $ JCH ), ILDA, EXTRA, CTEMP )
858 CALL CLARTG( A( IROW-ISKEW*JCH+IOFFST, JCH ),
859 $ CTEMP, REALC, S, DUMMY )
860 DUMMY = CLARND( 5, ISEED )
863 IL = MIN( IENDCH, JCH+JKL+JKU ) + 2 - JCH
865 CALL CLAROT( .TRUE., .TRUE.,
866.LE.
$ JCH+JKL+JKUIENDCH, IL, C, S,
867 $ A( IROW-ISKEW*JCH+IOFFST, JCH ),
868 $ ILDA, CTEMP, EXTRA )
889.GE.
IF( IPACK5 ) THEN
897 A( ( 1-ISKEW )*J+IOFFG, J ) = CMPLX( D( J ) )
902 IROW = MAX( 1, JC-K )
903 IL = MIN( JC+1, K+2 )
905 CTEMP = A( JC-ISKEW*( JC+1 )+IOFFG, JC+1 )
906 ANGLE = TWOPI*SLARND( 1, ISEED )
907 C = COS( ANGLE )*CLARND( 5, ISEED )
908 S = SIN( ANGLE )*CLARND( 5, ISEED )
913 CTEMP = CONJG( CTEMP )
917.GT.
CALL CLAROT( .FALSE., JCK, .TRUE., IL, C, S,
918 $ A( IROW-ISKEW*JC+IOFFG, JC ), ILDA,
920 CALL CLAROT( .TRUE., .TRUE., .FALSE.,
921 $ MIN( K, N-JC )+1, CT, ST,
922 $ A( ( 1-ISKEW )*JC+IOFFG, JC ), ILDA,
928 DO 180 JCH = JC - K, 1, -K
929 CALL CLARTG( A( JCH+1-ISKEW*( ICOL+1 )+IOFFG,
930 $ ICOL+1 ), EXTRA, REALC, S, DUMMY )
931 DUMMY = CLARND( 5, ISEED )
932 C = CONJG( REALC*DUMMY )
933 S = CONJG( -S*DUMMY )
934 CTEMP = A( JCH-ISKEW*( JCH+1 )+IOFFG, JCH+1 )
939 CTEMP = CONJG( CTEMP )
943 CALL CLAROT( .TRUE., .TRUE., .TRUE., K+2, C, S,
944 $ A( ( 1-ISKEW )*JCH+IOFFG, JCH ),
945 $ ILDA, CTEMP, EXTRA )
946 IROW = MAX( 1, JCH-K )
947 IL = MIN( JCH+1, K+2 )
949.GT.
CALL CLAROT( .FALSE., JCHK, .TRUE., IL, CT,
950 $ ST, A( IROW-ISKEW*JCH+IOFFG, JCH ),
951 $ ILDA, EXTRA, CTEMP )
960.NE..AND..NE.
IF( IPACKIPACKG IPACK3 ) THEN
962 IROW = IOFFST - ISKEW*JC
964 DO 210 JR = JC, MIN( N, JC+UUB )
965 A( JR+IROW, JC ) = A( JC-ISKEW*JR+IOFFG, JR )
968 DO 220 JR = JC, MIN( N, JC+UUB )
969 A( JR+IROW, JC ) = CONJG( A( JC-ISKEW*JR+
974.EQ.
IF( IPACK5 ) THEN
975 DO 250 JC = N - UUB + 1, N
976 DO 240 JR = N + 2 - JC, UUB + 1
981.EQ.
IF( IPACKG6 ) THEN
991.GE.
IF( IPACK5 ) THEN
1000 A( ( 1-ISKEW )*J+IOFFG, J ) = CMPLX( D( J ) )
1004 DO 280 JC = N - 1, 1, -1
1005 IL = MIN( N+1-JC, K+2 )
1007 CTEMP = A( 1+( 1-ISKEW )*JC+IOFFG, JC )
1008 ANGLE = TWOPI*SLARND( 1, ISEED )
1009 C = COS( ANGLE )*CLARND( 5, ISEED )
1010 S = SIN( ANGLE )*CLARND( 5, ISEED )
1015 CTEMP = CONJG( CTEMP )
1019.GT.
CALL CLAROT( .FALSE., .TRUE., N-JCK, IL, C, S,
1020 $ A( ( 1-ISKEW )*JC+IOFFG, JC ), ILDA,
1022 ICOL = MAX( 1, JC-K+1 )
1023 CALL CLAROT( .TRUE., .FALSE., .TRUE., JC+2-ICOL,
1024 $ CT, ST, A( JC-ISKEW*ICOL+IOFFG,
1025 $ ICOL ), ILDA, DUMMY, CTEMP )
1030 DO 270 JCH = JC + K, N - 1, K
1031 CALL CLARTG( A( JCH-ISKEW*ICOL+IOFFG, ICOL ),
1032 $ EXTRA, REALC, S, DUMMY )
1033 DUMMY = CLARND( 5, ISEED )
1036 CTEMP = A( 1+( 1-ISKEW )*JCH+IOFFG, JCH )
1041 CTEMP = CONJG( CTEMP )
1045 CALL CLAROT( .TRUE., .TRUE., .TRUE., K+2, C, S,
1046 $ A( JCH-ISKEW*ICOL+IOFFG, ICOL ),
1047 $ ILDA, EXTRA, CTEMP )
1048 IL = MIN( N+1-JCH, K+2 )
1050.GT.
CALL CLAROT( .FALSE., .TRUE., N-JCHK, IL,
1051 $ CT, ST, A( ( 1-ISKEW )*JCH+IOFFG,
1052 $ JCH ), ILDA, CTEMP, EXTRA )
1061.NE..AND..NE.
IF( IPACKIPACKG IPACK4 ) THEN
1062 DO 320 JC = N, 1, -1
1063 IROW = IOFFST - ISKEW*JC
1065 DO 300 JR = JC, MAX( 1, JC-UUB ), -1
1066 A( JR+IROW, JC ) = A( JC-ISKEW*JR+IOFFG, JR )
1069 DO 310 JR = JC, MAX( 1, JC-UUB ), -1
1070 A( JR+IROW, JC ) = CONJG( A( JC-ISKEW*JR+
1075.EQ.
IF( IPACK6 ) THEN
1077 DO 330 JR = 1, UUB + 1 - JC
1082.EQ.
IF( IPACKG5 ) THEN
1092.NOT.
IF( CSYM ) THEN
1094 IROW = IOFFST + ( 1-ISKEW )*JC
1095 A( IROW, JC ) = CMPLX( REAL( A( IROW, JC ) ) )
1110.EQ.
IF( ISYM1 ) THEN
1114 CALL CLAGGE( MR, NC, LLB, UUB, D, A, LDA, ISEED, WORK,
1122 CALL CLAGSY( M, LLB, D, A, LDA, ISEED, WORK, IINFO )
1124 CALL CLAGHE( M, LLB, D, A, LDA, ISEED, WORK, IINFO )
1128.NE.
IF( IINFO0 ) THEN
1136.NE.
IF( IPACKIPACKG ) THEN
1137.EQ.
IF( IPACK1 ) THEN
1147.EQ.
ELSE IF( IPACK2 ) THEN
1157.EQ.
ELSE IF( IPACK3 ) THEN
1166.GT.
IF( IROWLDA ) THEN
1170 A( IROW, ICOL ) = A( I, J )
1174.EQ.
ELSE IF( IPACK4 ) THEN
1183.GT.
IF( IROWLDA ) THEN
1187 A( IROW, ICOL ) = A( I, J )
1191.GE.
ELSE IF( IPACK5 ) THEN
1203 DO 440 I = MIN( J+LLB, M ), 1, -1
1204 A( I-J+UUB+1, J ) = A( I, J )
1208 DO 470 J = UUB + 2, N
1209 DO 460 I = J - UUB, MIN( J+LLB, M )
1210 A( I-J+UUB+1, J ) = A( I, J )
1220.EQ..OR..EQ.
IF( IPACK3 IPACK4 ) THEN
1222 DO 480 JR = IROW + 1, LDA
1228.GE.
ELSE IF( IPACK5 ) THEN
1239 DO 500 JR = 1, UUB + 1 - JC
1242 DO 510 JR = MAX( 1, MIN( IR1, IR2-JC ) ), LDA
subroutine clatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
CLATMS
subroutine jc(p, t, a, b, cm, cn, tref, tm, epsm, sigmam, jc_yield, tan_jc)