00001 SUBROUTINE DCKGSV( NM, MVAL, PVAL, NVAL, NMATS, ISEED, THRESH,
00002 $ NMAX, A, AF, B, BF, U, V, Q, ALPHA, BETA, R,
00003 $ IWORK, WORK, RWORK, NIN, NOUT, INFO )
00004
00005
00006
00007
00008
00009
00010 INTEGER INFO, NIN, NM, NMATS, NMAX, NOUT
00011 DOUBLE PRECISION THRESH
00012
00013
00014 INTEGER ISEED( 4 ), IWORK( * ), MVAL( * ), NVAL( * ),
00015 $ PVAL( * )
00016 DOUBLE PRECISION A( * ), AF( * ), ALPHA( * ), B( * ), BETA( * ),
00017 $ BF( * ), Q( * ), R( * ), RWORK( * ), U( * ),
00018 $ V( * ), WORK( * )
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105 INTEGER NTESTS
00106 PARAMETER ( NTESTS = 7 )
00107 INTEGER NTYPES
00108 PARAMETER ( NTYPES = 8 )
00109
00110
00111 LOGICAL FIRSTT
00112 CHARACTER DISTA, DISTB, TYPE
00113 CHARACTER*3 PATH
00114 INTEGER I, IINFO, IM, IMAT, KLA, KLB, KUA, KUB, LDA,
00115 $ LDB, LDQ, LDR, LDU, LDV, LWORK, M, MODEA,
00116 $ MODEB, N, NFAIL, NRUN, NT, P
00117 DOUBLE PRECISION ANORM, BNORM, CNDNMA, CNDNMB
00118
00119
00120 LOGICAL DOTYPE( NTYPES )
00121 DOUBLE PRECISION RESULT( NTESTS )
00122
00123
00124 EXTERNAL ALAHDG, ALAREQ, ALASUM, DGSVTS, DLATB9, DLATMS
00125
00126
00127 INTRINSIC ABS
00128
00129
00130
00131
00132
00133 PATH( 1: 3 ) = 'GSV'
00134 INFO = 0
00135 NRUN = 0
00136 NFAIL = 0
00137 FIRSTT = .TRUE.
00138 CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
00139 LDA = NMAX
00140 LDB = NMAX
00141 LDU = NMAX
00142 LDV = NMAX
00143 LDQ = NMAX
00144 LDR = NMAX
00145 LWORK = NMAX*NMAX
00146
00147
00148
00149 DO 30 IM = 1, NM
00150 M = MVAL( IM )
00151 P = PVAL( IM )
00152 N = NVAL( IM )
00153
00154 DO 20 IMAT = 1, NTYPES
00155
00156
00157
00158 IF( .NOT.DOTYPE( IMAT ) )
00159 $ GO TO 20
00160
00161
00162
00163
00164 CALL DLATB9( PATH, IMAT, M, P, N, TYPE, KLA, KUA, KLB, KUB,
00165 $ ANORM, BNORM, MODEA, MODEB, CNDNMA, CNDNMB,
00166 $ DISTA, DISTB )
00167
00168
00169
00170 CALL DLATMS( M, N, DISTA, ISEED, TYPE, RWORK, MODEA, CNDNMA,
00171 $ ANORM, KLA, KUA, 'No packing', A, LDA, WORK,
00172 $ IINFO )
00173 IF( IINFO.NE.0 ) THEN
00174 WRITE( NOUT, FMT = 9999 )IINFO
00175 INFO = ABS( IINFO )
00176 GO TO 20
00177 END IF
00178
00179 CALL DLATMS( P, N, DISTB, ISEED, TYPE, RWORK, MODEB, CNDNMB,
00180 $ BNORM, KLB, KUB, 'No packing', B, LDB, WORK,
00181 $ IINFO )
00182 IF( IINFO.NE.0 ) THEN
00183 WRITE( NOUT, FMT = 9999 )IINFO
00184 INFO = ABS( IINFO )
00185 GO TO 20
00186 END IF
00187
00188 NT = 6
00189
00190 CALL DGSVTS( M, P, N, A, AF, LDA, B, BF, LDB, U, LDU, V,
00191 $ LDV, Q, LDQ, ALPHA, BETA, R, LDR, IWORK, WORK,
00192 $ LWORK, RWORK, RESULT )
00193
00194
00195
00196
00197 DO 10 I = 1, NT
00198 IF( RESULT( I ).GE.THRESH ) THEN
00199 IF( NFAIL.EQ.0 .AND. FIRSTT ) THEN
00200 FIRSTT = .FALSE.
00201 CALL ALAHDG( NOUT, PATH )
00202 END IF
00203 WRITE( NOUT, FMT = 9998 )M, P, N, IMAT, I,
00204 $ RESULT( I )
00205 NFAIL = NFAIL + 1
00206 END IF
00207 10 CONTINUE
00208 NRUN = NRUN + NT
00209 20 CONTINUE
00210 30 CONTINUE
00211
00212
00213
00214 CALL ALASUM( PATH, NOUT, NFAIL, NRUN, 0 )
00215
00216 9999 FORMAT( ' DLATMS in DCKGSV INFO = ', I5 )
00217 9998 FORMAT( ' M=', I4, ' P=', I4, ', N=', I4, ', type ', I2,
00218 $ ', test ', I2, ', ratio=', G13.6 )
00219 RETURN
00220
00221
00222
00223 END