489 SUBROUTINE dchkbd( NSIZES, MVAL, NVAL, NTYPES, DOTYPE, NRHS,
490 $ ISEED, THRESH, A, LDA, BD, BE, S1, S2, X, LDX,
491 $ Y, Z, Q, LDQ, PT, LDPT, U, VT, WORK, LWORK,
492 $ IWORK, NOUT, INFO )
499 INTEGER INFO, LDA, LDPT, LDQ, LDX, LWORK, NOUT, NRHS,
501 DOUBLE PRECISION THRESH
505 INTEGER ISEED( 4 ), IWORK( * ), MVAL( * ), NVAL( * )
506 DOUBLE PRECISION A( LDA, * ), BD( * ), BE( * ), PT( LDPT, * ),
507 $ q( ldq, * ), s1( * ), s2( * ), u( ldpt, * ),
508 $ vt( ldpt, * ), work( * ), x( ldx, * ),
509 $ y( ldx, * ), z( ldx, * )
515 DOUBLE PRECISION ZERO, ONE, TWO, HALF
516 PARAMETER ( ZERO = 0.0d0, one = 1.0d0, two = 2.0d0,
519 parameter( maxtyp = 16 )
522 LOGICAL BADMM, BADNN, BIDIAG
525 INTEGER I, IINFO, IL, IMODE, ITEMP, ITYPE, IU, IWBD,
526 $ iwbe, iwbs, iwbz, iwwork, j, jcol, jsize,
527 $ jtype, log2ui, m, minwrk, mmax, mnmax, mnmin,
528 $ mnmin2, mq, mtypes, n, nfail, nmax,
530 DOUBLE PRECISION ABSTOL, AMNINV, ANORM, , OVFL, RTOVFL,
531 $ RTUNFL, TEMP1, TEMP2, ULP, ULPINV, UNFL,
535 INTEGER IDUM( 1 ), IOLDSD( 4 ), ISEED2( 4 ),
536 $ KMAGN( MAXTYP ), KMODE( MAXTYP ),
538 DOUBLE PRECISION DUM( 1 ), DUMMA( 1 ), RESULT( 40 )
541 DOUBLE PRECISION DLAMCH, DLARND, DSXT1
542 EXTERNAL DLAMCH, DLARND, DSXT1
551 INTRINSIC abs, exp, int, log,
max,
min, sqrt
559 COMMON / infoc / infot, nunit, ok, lerr
560 COMMON / srnamc / srnamt
563 DATA ktype / 1, 2, 5*4, 5*6, 3*9, 10 /
564 DATA kmagn / 2*1, 3*1, 2, 3, 3*1, 2, 3, 1, 2, 3, 0 /
565 DATA kmode / 2*0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
581 mmax =
max( mmax, mval( j ) )
584 nmax =
max( nmax, nval( j ) )
587 mnmax =
max( mnmax,
min( mval( j ), nval( j ) ) )
588 minwrk =
max( minwrk, 3*( mval( j )+nval( j ) ),
589 $ mval( j )*( mval( j )+
max( mval( j ), nval( j ),
590 $ nrhs )+1 )+nval( j )*
min( nval( j ), mval( j ) ) )
595 IF( nsizes.LT.0 )
THEN
597 ELSE IF( badmm )
THEN
599 ELSE IF( badnn )
THEN
601 ELSE IF( ntypes.LT.0 )
THEN
603 ELSE IF( nrhs.LT.0 )
THEN
605 ELSE IF( lda.LT.mmax )
THEN
607 ELSE IF( ldx.LT.mmax )
THEN
609 ELSE IF( ldq.LT.mmax )
THEN
611 ELSE IF( ldpt.LT.mnmax )
THEN
613 ELSE IF( minwrk.GT.lwork )
THEN
618 CALL xerbla(
'DCHKBD', -info )
624 path( 1: 1 ) =
'Double precision'
628 unfl = dlamch(
'Safe minimum' )
629 ovfl = dlamch(
'Overflow' )
631 ulp = dlamch(
'Precision' )
633 log2ui = int( log( ulpinv ) / log( two ) )
634 rtunfl = sqrt( unfl )
635 rtovfl = sqrt( ovfl )
641 DO 300 jsize = 1, nsizes
645 amninv = one /
max( m, n, 1 )
647 IF( nsizes.NE.1 )
THEN
648 mtypes =
min( maxtyp, ntypes )
650 mtypes =
min( maxtyp+1, ntypes )
653 DO 290 jtype = 1, mtypes
654 IF( .NOT.dotype( jtype ) )
658 ioldsd( j ) = iseed( j )
683 IF( mtypes.GT.maxtyp )
686 itype = ktype( jtype )
687 imode = kmode( jtype )
691 GO TO ( 40, 50, 60 )kmagn( jtype )
698 anorm = ( rtovfl*ulp )*amninv
702 anorm = rtunfl*
max( m, n )*ulpinv
707 CALL dlaset(
'Full', lda, n, zero, zero, a, lda )
712 IF( itype.EQ.1 )
THEN
718 ELSE IF( itype.EQ.2 )
THEN
722 DO 80 jcol = 1, mnmin
723 a( jcol, jcol ) = anorm
726 ELSE IF( itype.EQ.4 )
THEN
730 CALL dlatms( mnmin, mnmin,
'S', iseed,
'N', work, imode,
731 $ cond, anorm, 0, 0,
'N', a, lda,
732 $ work( mnmin+1 ), iinfo )
734 ELSE IF( itype.EQ.5 )
THEN
738 CALL dlatms( mnmin, mnmin,
'S', iseed,
'S', work, imode,
739 $ cond, anorm, m, n,
'N', a, lda,
740 $ work( mnmin+1 ), iinfo )
742 ELSE IF( itype.EQ.6 )
THEN
746 CALL dlatms( m, n,
'S', iseed,
'N', work, imode, cond,
747 $ anorm, m, n,
'N', a, lda, work( mnmin+1 ),
750 ELSE IF( itype.EQ.7 )
THEN
754 CALL dlatmr( mnmin, mnmin,
'S', iseed,
'N', work, 6, one,
755 $ one,
'T',
'N', work( mnmin+1 ), 1, one,
756 $ work( 2*mnmin+1 ), 1, one,
'N', iwork, 0, 0,
757 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
759 ELSE IF( itype.EQ.8 )
THEN
763 CALL dlatmr( mnmin, mnmin,
'S', iseed,
'S', work, 6, one,
764 $ one,
'T',
'N', work( mnmin+1 ), 1, one,
765 $ work( m+mnmin+1 ), 1, one,
'N', iwork, m, n,
766 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
768 ELSE IF( itype.EQ.9 )
THEN
772 CALL dlatmr( m, n,
'S', iseed,
'N', work, 6, one, one,
773 $
'T',
'N', work( mnmin+1 ), 1, one,
774 $ work( m+mnmin+1 ), 1, one,
'N', iwork, m, n,
775 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
777 ELSE IF( itype.EQ.10 )
THEN
781 temp1 = -two*log( ulp )
783 bd( j ) = exp( temp1*dlarnd( 2, iseed ) )
785 $ be( j ) = exp( temp1*dlarnd( 2, iseed ) )
799 IF( iinfo.EQ.0 )
THEN
804 CALL dlatmr( mnmin, nrhs,
'S', iseed,
'N', work, 6,
805 $ one, one,
'T',
'N', work( mnmin+1 ), 1,
806 $ one, work( 2*mnmin+1 ), 1, one,
'N',
807 $ iwork, mnmin, nrhs, zero, one,
'NO', y,
808 $ ldx, iwork, iinfo )
810 CALL dlatmr( m, nrhs,
'S', iseed,
'N', work, 6, one,
811 $ one,
'T',
'N', work( m+1 ), 1, one,
812 $ work( 2*m+1 ), 1, one,
'N', iwork, m,
813 $ nrhs, zero, one,
'NO', x, ldx,
820 IF( iinfo.NE.0 )
THEN
821 WRITE( nout, fmt = 9998 )
'Generator', iinfo, m, n,
831 IF( .NOT.bidiag )
THEN
836 CALL dlacpy(
' ', m, n, a, lda, q, ldq )
837 CALL dgebrd( m, n, q, ldq, bd, be, work, work( mnmin+1 ),
838 $ work( 2*mnmin+1 ), lwork-2*mnmin, iinfo )
842 IF( iinfo.NE.0 )
THEN
843 WRITE( nout, fmt = 9998 )'
dgebrd', IINFO, M, N,
849 CALL DLACPY( ' ', M, N, Q, LDQ, PT, LDPT )
861 CALL DORGBR( 'q
', M, MQ, N, Q, LDQ, WORK,
862 $ WORK( 2*MNMIN+1 ), LWORK-2*MNMIN, IINFO )
866.NE.
IF( IINFO0 ) THEN
867 WRITE( NOUT, FMT = 9998 )'dorgbr(q)
', IINFO, M, N,
875 CALL DORGBR( 'p
', MNMIN, N, M, PT, LDPT, WORK( MNMIN+1 ),
876 $ WORK( 2*MNMIN+1 ), LWORK-2*MNMIN, IINFO )
880.NE.
IF( IINFO0 ) THEN
881 WRITE( NOUT, FMT = 9998 )'dorgbr(p)
', IINFO, M, N,
889 CALL DGEMM( 'transpose
', 'no transpose
', M, NRHS, M, ONE,
890 $ Q, LDQ, X, LDX, ZERO, Y, LDX )
896 CALL DBDT01( M, N, 1, A, LDA, Q, LDQ, BD, BE, PT, LDPT,
897 $ WORK, RESULT( 1 ) )
898 CALL DORT01( 'columns
', M, MQ, Q, LDQ, WORK, LWORK,
900 CALL DORT01( 'rows
', MNMIN, N, PT, LDPT, WORK, LWORK,
907 CALL DCOPY( MNMIN, BD, 1, S1, 1 )
909 $ CALL DCOPY( MNMIN-1, BE, 1, WORK, 1 )
910 CALL DLACPY( ' ', M, NRHS, Y, LDX, Z, LDX )
911 CALL DLASET( 'full
', MNMIN, MNMIN, ZERO, ONE, U, LDPT )
912 CALL DLASET( 'full
', MNMIN, MNMIN, ZERO, ONE, VT, LDPT )
914 CALL DBDSQR( UPLO, MNMIN, MNMIN, MNMIN, NRHS, S1, WORK, VT,
915 $ LDPT, U, LDPT, Z, LDX, WORK( MNMIN+1 ), IINFO )
919.NE.
IF( IINFO0 ) THEN
920 WRITE( NOUT, FMT = 9998 )'dbdsqr(vects)
', IINFO, M, N,
923.LT.
IF( IINFO0 ) THEN
934 CALL DCOPY( MNMIN, BD, 1, S2, 1 )
936 $ CALL DCOPY( MNMIN-1, BE, 1, WORK, 1 )
938 CALL DBDSQR( UPLO, MNMIN, 0, 0, 0, S2, WORK, VT, LDPT, U,
939 $ LDPT, Z, LDX, WORK( MNMIN+1 ), IINFO )
943.NE.
IF( IINFO0 ) THEN
944 WRITE( NOUT, FMT = 9998 )'dbdsqr(values)
', IINFO, M, N,
947.LT.
IF( IINFO0 ) THEN
960 CALL DBDT03( UPLO, MNMIN, 1, BD, BE, U, LDPT, S1, VT, LDPT,
961 $ WORK, RESULT( 4 ) )
962 CALL DBDT02( MNMIN, NRHS, Y, LDX, Z, LDX, U, LDPT, WORK,
964 CALL DORT01( 'columns
', MNMIN, MNMIN, U, LDPT, WORK, LWORK,
966 CALL DORT01( 'rows
', MNMIN, MNMIN, VT, LDPT, WORK, LWORK,
973 DO 110 I = 1, MNMIN - 1
974.LT.
IF( S1( I )S1( I+1 ) )
975 $ RESULT( 8 ) = ULPINV
976.LT.
IF( S1( I )ZERO )
977 $ RESULT( 8 ) = ULPINV
979.GE.
IF( MNMIN1 ) THEN
980.LT.
IF( S1( MNMIN )ZERO )
981 $ RESULT( 8 ) = ULPINV
989 TEMP1 = ABS( S1( J )-S2( J ) ) /
990 $ MAX( SQRT( UNFL )*MAX( S1( 1 ), ONE ),
991 $ ULP*MAX( ABS( S1( J ) ), ABS( S2( J ) ) ) )
992 TEMP2 = MAX( TEMP1, TEMP2 )
1000 TEMP1 = THRESH*( HALF-ULP )
1002 DO 130 J = 0, LOG2UI
1010 RESULT( 10 ) = TEMP1
1015.NOT.
IF( BIDIAG ) THEN
1016 CALL DCOPY( MNMIN, BD, 1, S2, 1 )
1018 $ CALL DCOPY( MNMIN-1, BE, 1, WORK, 1 )
1020 CALL DBDSQR( UPLO, MNMIN, N, M, NRHS, S2, WORK, PT, LDPT,
1021 $ Q, LDQ, Y, LDX, WORK( MNMIN+1 ), IINFO )
1028 CALL DBDT01( M, N, 0, A, LDA, Q, LDQ, S2, DUMMA, PT,
1029 $ LDPT, WORK, RESULT( 11 ) )
1030 CALL DBDT02( M, NRHS, X, LDX, Y, LDX, Q, LDQ, WORK,
1032 CALL DORT01( 'columns
', M, MQ, Q, LDQ, WORK, LWORK,
1034 CALL DORT01( 'rows
', MNMIN, N, PT, LDPT, WORK, LWORK,
1041 CALL DCOPY( MNMIN, BD, 1, S1, 1 )
1043 $ CALL DCOPY( MNMIN-1, BE, 1, WORK, 1 )
1044 CALL DLASET( 'full
', MNMIN, MNMIN, ZERO, ONE, U, LDPT )
1045 CALL DLASET( 'full
', MNMIN, MNMIN, ZERO, ONE, VT, LDPT )
1047 CALL DBDSDC( UPLO, 'i
', MNMIN, S1, WORK, U, LDPT, VT, LDPT,
1048 $ DUM, IDUM, WORK( MNMIN+1 ), IWORK, IINFO )
1052.NE.
IF( IINFO0 ) THEN
1053 WRITE( NOUT, FMT = 9998 )'dbdsdc(vects)
', IINFO, M, N,
1056.LT.
IF( IINFO0 ) THEN
1059 RESULT( 15 ) = ULPINV
1067 CALL DCOPY( MNMIN, BD, 1, S2, 1 )
1069 $ CALL DCOPY( MNMIN-1, BE, 1, WORK, 1 )
1071 CALL DBDSDC( UPLO, 'n
', MNMIN, S2, WORK, DUM, 1, DUM, 1,
1072 $ DUM, IDUM, WORK( MNMIN+1 ), IWORK, IINFO )
1076.NE.
IF( IINFO0 ) THEN
1077 WRITE( NOUT, FMT = 9998 )'dbdsdc(values)
', IINFO, M, N,
1080.LT.
IF( IINFO0 ) THEN
1083 RESULT( 18 ) = ULPINV
1092 CALL DBDT03( UPLO, MNMIN, 1, BD, BE, U, LDPT, S1, VT, LDPT,
1093 $ WORK, RESULT( 15 ) )
1094 CALL DORT01( 'columns
', MNMIN, MNMIN, U, LDPT, WORK, LWORK,
1096 CALL DORT01( 'rows
', MNMIN, MNMIN, VT, LDPT, WORK, LWORK,
1103 DO 150 I = 1, MNMIN - 1
1104.LT.
IF( S1( I )S1( I+1 ) )
1105 $ RESULT( 18 ) = ULPINV
1106.LT.
IF( S1( I )ZERO )
1107 $ RESULT( 18 ) = ULPINV
1109.GE.
IF( MNMIN1 ) THEN
1110.LT.
IF( S1( MNMIN )ZERO )
1111 $ RESULT( 18 ) = ULPINV
1119 TEMP1 = ABS( S1( J )-S2( J ) ) /
1120 $ MAX( SQRT( UNFL )*MAX( S1( 1 ), ONE ),
1121 $ ULP*MAX( ABS( S1( 1 ) ), ABS( S2( 1 ) ) ) )
1122 TEMP2 = MAX( TEMP1, TEMP2 )
1125 RESULT( 19 ) = TEMP2
1131.EQ..OR..EQ.
IF( JTYPE10 JTYPE16 ) THEN
1135 RESULT( 20:34 ) = ZERO
1143 IWWORK = IWBZ + 2*MNMIN*(MNMIN+1)
1144 MNMIN2 = MAX( 1,MNMIN*2 )
1146 CALL DCOPY( MNMIN, BD, 1, WORK( IWBD ), 1 )
1148 $ CALL DCOPY( MNMIN-1, BE, 1, WORK( IWBE ), 1 )
1150 CALL DBDSVDX( UPLO, 'v
', 'a
', MNMIN, WORK( IWBD ),
1151 $ WORK( IWBE ), ZERO, ZERO, 0, 0, NS1, S1,
1152 $ WORK( IWBZ ), MNMIN2, WORK( IWWORK ),
1157.NE.
IF( IINFO0 ) THEN
1158 WRITE( NOUT, FMT = 9998 )'dbdsvdx(vects,a)
', IINFO, M, N,
1161.LT.
IF( IINFO0 ) THEN
1164 RESULT( 20 ) = ULPINV
1171 CALL DCOPY( MNMIN, WORK( J ), 1, U( 1,I ), 1 )
1173 CALL DCOPY( MNMIN, WORK( J ), 1, VT( I,1 ), LDPT )
1180.EQ.
IF( JTYPE9 ) THEN
1188 CALL DCOPY( MNMIN, BD, 1, WORK( IWBD ), 1 )
1190 $ CALL DCOPY( MNMIN-1, BE, 1, WORK( IWBE ), 1 )
1192 CALL DBDSVDX( UPLO, 'n
', 'a
', MNMIN, WORK( IWBD ),
1193 $ WORK( IWBE ), ZERO, ZERO, 0, 0, NS2, S2,
1194 $ WORK( IWBZ ), MNMIN2, WORK( IWWORK ),
1199.NE.
IF( IINFO0 ) THEN
1200 WRITE( NOUT, FMT = 9998 )'dbdsvdx(values,a)
', IINFO,
1201 $ M, N, JTYPE, IOLDSD
1203.LT.
IF( IINFO0 ) THEN
1206 RESULT( 24 ) = ULPINV
1213 CALL DCOPY( MNMIN, S1, 1, WORK( IWBS ), 1 )
1222 CALL DBDT03( UPLO, MNMIN, 1, BD, BE, U, LDPT, S1, VT,
1223 $ LDPT, WORK( IWBS+MNMIN ), RESULT( 20 ) )
1224 CALL DORT01( 'columns
', MNMIN, MNMIN, U, LDPT,
1225 $ WORK( IWBS+MNMIN ), LWORK-MNMIN,
1227 CALL DORT01( 'rows
', MNMIN, MNMIN, VT, LDPT,
1228 $ WORK( IWBS+MNMIN ), LWORK-MNMIN,
1232 DO 180 I = 1, MNMIN - 1
1233.LT.
IF( S1( I )S1( I+1 ) )
1234 $ RESULT( 23 ) = ULPINV
1235.LT.
IF( S1( I )ZERO )
1236 $ RESULT( 23 ) = ULPINV
1238.GE.
IF( MNMIN1 ) THEN
1239.LT.
IF( S1( MNMIN )ZERO )
1240 $ RESULT( 23 ) = ULPINV
1245 TEMP1 = ABS( S1( J )-S2( J ) ) /
1246 $ MAX( SQRT( UNFL )*MAX( S1( 1 ), ONE ),
1247 $ ULP*MAX( ABS( S1( 1 ) ), ABS( S2( 1 ) ) ) )
1248 TEMP2 = MAX( TEMP1, TEMP2 )
1250 RESULT( 24 ) = TEMP2
1258 ISEED2( I ) = ISEED( I )
1260.LE.
IF( MNMIN1 ) THEN
1264 IL = 1 + INT( ( MNMIN-1 )*DLARND( 1, ISEED2 ) )
1265 IU = 1 + INT( ( MNMIN-1 )*DLARND( 1, ISEED2 ) )
1273 CALL DCOPY( MNMIN, BD, 1, WORK( IWBD ), 1 )
1275 $ CALL DCOPY( MNMIN-1, BE, 1, WORK( IWBE ), 1 )
1277 CALL DBDSVDX( UPLO, 'v
', 'i
', MNMIN, WORK( IWBD ),
1278 $ WORK( IWBE ), ZERO, ZERO, IL, IU, NS1, S1,
1279 $ WORK( IWBZ ), MNMIN2, WORK( IWWORK ),
1284.NE.
IF( IINFO0 ) THEN
1285 WRITE( NOUT, FMT = 9998 )'dbdsvdx(vects,i)
', IINFO,
1286 $ M, N, JTYPE, IOLDSD
1288.LT.
IF( IINFO0 ) THEN
1291 RESULT( 25 ) = ULPINV
1298 CALL DCOPY( MNMIN, WORK( J ), 1, U( 1,I ), 1 )
1300 CALL DCOPY( MNMIN, WORK( J ), 1, VT( I,1 ), LDPT )
1307 CALL DCOPY( MNMIN, BD, 1, WORK( IWBD ), 1 )
1309 $ CALL DCOPY( MNMIN-1, BE, 1, WORK( IWBE ), 1 )
1311 CALL DBDSVDX( UPLO, 'n
', 'i
', MNMIN, WORK( IWBD ),
1312 $ WORK( IWBE ), ZERO, ZERO, IL, IU, NS2, S2,
1313 $ WORK( IWBZ ), MNMIN2, WORK( IWWORK ),
1318.NE.
IF( IINFO0 ) THEN
1319 WRITE( NOUT, FMT = 9998 )'dbdsvdx(values,i)
', IINFO,
1320 $ M, N, JTYPE, IOLDSD
1322.LT.
IF( IINFO0 ) THEN
1325 RESULT( 29 ) = ULPINV
1337 CALL DBDT04( UPLO, MNMIN, BD, BE, S1, NS1, U,
1338 $ LDPT, VT, LDPT, WORK( IWBS+MNMIN ),
1340 CALL DORT01( 'columns
', MNMIN, NS1, U, LDPT,
1341 $ WORK( IWBS+MNMIN ), LWORK-MNMIN,
1343 CALL DORT01( 'rows
', NS1, MNMIN, VT, LDPT,
1344 $ WORK( IWBS+MNMIN ), LWORK-MNMIN,
1348 DO 220 I = 1, NS1 - 1
1349.LT.
IF( S1( I )S1( I+1 ) )
1350 $ RESULT( 28 ) = ULPINV
1351.LT.
IF( S1( I )ZERO )
1352 $ RESULT( 28 ) = ULPINV
1355.LT.
IF( S1( NS1 )ZERO )
1356 $ RESULT( 28 ) = ULPINV
1361 TEMP1 = ABS( S1( J )-S2( J ) ) /
1362 $ MAX( SQRT( UNFL )*MAX( S1( 1 ), ONE ),
1363 $ ULP*MAX( ABS( S1( 1 ) ), ABS( S2( 1 ) ) ) )
1364 TEMP2 = MAX( TEMP1, TEMP2 )
1366 RESULT( 29 ) = TEMP2
1372 CALL DCOPY( MNMIN, WORK( IWBS ), 1, S1, 1 )
1374.GT.
IF( MNMIN0 ) THEN
1376 VU = S1( IL ) + MAX( HALF*ABS( S1( IL )-S1( IL-1 ) ),
1377 $ ULP*ANORM, TWO*RTUNFL )
1379 VU = S1( 1 ) + MAX( HALF*ABS( S1( MNMIN )-S1( 1 ) ),
1380 $ ULP*ANORM, TWO*RTUNFL )
1382.NE.
IF( IUNS1 ) THEN
1383 VL = S1( IU ) - MAX( ULP*ANORM, TWO*RTUNFL,
1384 $ HALF*ABS( S1( IU+1 )-S1( IU ) ) )
1386 VL = S1( NS1 ) - MAX( ULP*ANORM, TWO*RTUNFL,
1387 $ HALF*ABS( S1( MNMIN )-S1( 1 ) ) )
1391.GE.
IF( VLVU ) VU = MAX( VU*2, VU+VL+HALF )
1397 CALL DCOPY( MNMIN, BD, 1, WORK( IWBD ), 1 )
1399 $ CALL DCOPY( MNMIN-1, BE, 1, WORK( IWBE ), 1 )
1401 CALL DBDSVDX( UPLO, 'v
', 'v
', MNMIN, WORK( IWBD ),
1402 $ WORK( IWBE ), VL, VU, 0, 0, NS1, S1,
1403 $ WORK( IWBZ ), MNMIN2, WORK( IWWORK ),
1408.NE.
IF( IINFO0 ) THEN
1409 WRITE( NOUT, FMT = 9998 )'dbdsvdx(vects,v)
', IINFO,
1410 $ M, N, JTYPE, IOLDSD
1412.LT.
IF( IINFO0 ) THEN
1415 RESULT( 30 ) = ULPINV
1422 CALL DCOPY( MNMIN, WORK( J ), 1, U( 1,I ), 1 )
1424 CALL DCOPY( MNMIN, WORK( J ), 1, VT( I,1 ), LDPT )
1431 CALL DCOPY( MNMIN, BD, 1, WORK( IWBD ), 1 )
1433 $ CALL DCOPY( MNMIN-1, BE, 1, WORK( IWBE ), 1 )
1435 CALL DBDSVDX( UPLO, 'n
', 'v
', MNMIN, WORK( IWBD ),
1436 $ WORK( IWBE ), VL, VU, 0, 0, NS2, S2,
1437 $ WORK( IWBZ ), MNMIN2, WORK( IWWORK ),
1442.NE.
IF( IINFO0 ) THEN
1443 WRITE( NOUT, FMT = 9998 )'dbdsvdx(values,v)
', IINFO,
1444 $ M, N, JTYPE, IOLDSD
1446.LT.
IF( IINFO0 ) THEN
1449 RESULT( 34 ) = ULPINV
1461 CALL DBDT04( UPLO, MNMIN, BD, BE, S1, NS1, U,
1462 $ LDPT, VT, LDPT, WORK( IWBS+MNMIN ),
1464 CALL DORT01( 'columns
', MNMIN, NS1, U, LDPT,
1465 $ WORK( IWBS+MNMIN ), LWORK-MNMIN,
1467 CALL DORT01( 'rows
', NS1, MNMIN, VT, LDPT,
1468 $ WORK( IWBS+MNMIN ), LWORK-MNMIN,
1472 DO 250 I = 1, NS1 - 1
1473.LT.
IF( S1( I )S1( I+1 ) )
1474 $ RESULT( 28 ) = ULPINV
1475.LT.
IF( S1( I )ZERO )
1476 $ RESULT( 28 ) = ULPINV
1479.LT.
IF( S1( NS1 )ZERO )
1480 $ RESULT( 28 ) = ULPINV
1485 TEMP1 = ABS( S1( J )-S2( J ) ) /
1486 $ MAX( SQRT( UNFL )*MAX( S1( 1 ), ONE ),
1487 $ ULP*MAX( ABS( S1( 1 ) ), ABS( S2( 1 ) ) ) )
1488 TEMP2 = MAX( TEMP1, TEMP2 )
1490 RESULT( 34 ) = TEMP2
1497.GE.
IF( RESULT( J )THRESH ) THEN
1499 $ CALL DLAHD2( NOUT, PATH )
1500 WRITE( NOUT, FMT = 9999 )M, N, JTYPE, IOLDSD, J,
1505.NOT.
IF( BIDIAG ) THEN
1516 CALL ALASUM( PATH, NOUT, NFAIL, NTEST, 0 )
1522 9999 FORMAT( ' m=
', I5, ', n=
', I5, ',
type ', i2,
', seed=',
1523 $ 4( i4,
',' ),
' test(', i2,
')=', g11.4 )
1524 9998
FORMAT(
' DCHKBD: ', a,
' returned INFO=', i6,
'.', / 9x,
'M=',
1525 $ i6,
', N=', i6,
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ),
subroutine dchkbd(nsizes, mval, nval, ntypes, dotype, nrhs, iseed, thresh, a, lda, bd, be, s1, s2, x, ldx, y, z, q, ldq, pt, ldpt, u, vt, work, lwork, iwork, nout, info)
DCHKBD
subroutine dlatmr(m, n, dist, iseed, sym, d, mode, cond, dmax, rsign, grade, dl, model, condl, dr, moder, condr, pivtng, ipivot, kl, ku, sparse, anorm, pack, a, lda, iwork, info)
DLATMR