00001 SUBROUTINE CCHKQ3( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
00002 $ THRESH, A, COPYA, S, COPYS, TAU, WORK, RWORK,
00003 $ IWORK, NOUT )
00004
00005
00006
00007
00008
00009
00010 INTEGER NM, NN, NNB, NOUT
00011 REAL THRESH
00012
00013
00014 LOGICAL DOTYPE( * )
00015 INTEGER IWORK( * ), MVAL( * ), NBVAL( * ), NVAL( * ),
00016 $ NXVAL( * )
00017 REAL COPYS( * ), RWORK( * ), S( * )
00018 COMPLEX A( * ), COPYA( * ), TAU( * ), 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 INTEGER NTYPES
00090 PARAMETER ( NTYPES = 6 )
00091 INTEGER NTESTS
00092 PARAMETER ( NTESTS = 3 )
00093 REAL ONE, ZERO
00094 COMPLEX CZERO
00095 PARAMETER ( ONE = 1.0E+0, ZERO = 0.0E+0,
00096 $ CZERO = ( 0.0E+0, 0.0E+0 ) )
00097
00098
00099 CHARACTER*3 PATH
00100 INTEGER I, IHIGH, ILOW, IM, IMODE, IN, INB, INFO,
00101 $ ISTEP, K, LDA, LW, LWORK, M, MNMIN, MODE, N,
00102 $ NB, NERRS, NFAIL, NRUN, NX
00103 REAL EPS
00104
00105
00106 INTEGER ISEED( 4 ), ISEEDY( 4 )
00107 REAL RESULT( NTESTS )
00108
00109
00110 REAL CQPT01, CQRT11, CQRT12, SLAMCH
00111 EXTERNAL CQPT01, CQRT11, CQRT12, SLAMCH
00112
00113
00114 EXTERNAL ALAHD, ALASUM, CGEQP3, CLACPY, CLASET, CLATMS,
00115 $ ICOPY, SLAORD, XLAENV
00116
00117
00118 INTRINSIC MAX, MIN
00119
00120
00121 LOGICAL LERR, OK
00122 CHARACTER*32 SRNAMT
00123 INTEGER INFOT, IOUNIT
00124
00125
00126 COMMON / INFOC / INFOT, IOUNIT, OK, LERR
00127 COMMON / SRNAMC / SRNAMT
00128
00129
00130 DATA ISEEDY / 1988, 1989, 1990, 1991 /
00131
00132
00133
00134
00135
00136 PATH( 1: 1 ) = 'Complex precision'
00137 PATH( 2: 3 ) = 'Q3'
00138 NRUN = 0
00139 NFAIL = 0
00140 NERRS = 0
00141 DO 10 I = 1, 4
00142 ISEED( I ) = ISEEDY( I )
00143 10 CONTINUE
00144 EPS = SLAMCH( 'Epsilon' )
00145 INFOT = 0
00146
00147 DO 90 IM = 1, NM
00148
00149
00150
00151 M = MVAL( IM )
00152 LDA = MAX( 1, M )
00153
00154 DO 80 IN = 1, NN
00155
00156
00157
00158 N = NVAL( IN )
00159 MNMIN = MIN( M, N )
00160 LWORK = MAX( 1, M*MAX( M, N )+4*MNMIN+MAX( M, N ) )
00161
00162 DO 70 IMODE = 1, NTYPES
00163 IF( .NOT.DOTYPE( IMODE ) )
00164 $ GO TO 70
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174 MODE = IMODE
00175 IF( IMODE.GT.3 )
00176 $ MODE = 1
00177
00178
00179
00180
00181 DO 20 I = 1, N
00182 IWORK( I ) = 0
00183 20 CONTINUE
00184 IF( IMODE.EQ.1 ) THEN
00185 CALL CLASET( 'Full', M, N, CZERO, CZERO, COPYA, LDA )
00186 DO 30 I = 1, MNMIN
00187 COPYS( I ) = ZERO
00188 30 CONTINUE
00189 ELSE
00190 CALL CLATMS( M, N, 'Uniform', ISEED, 'Nonsymm', COPYS,
00191 $ MODE, ONE / EPS, ONE, M, N, 'No packing',
00192 $ COPYA, LDA, WORK, INFO )
00193 IF( IMODE.GE.4 ) THEN
00194 IF( IMODE.EQ.4 ) THEN
00195 ILOW = 1
00196 ISTEP = 1
00197 IHIGH = MAX( 1, N / 2 )
00198 ELSE IF( IMODE.EQ.5 ) THEN
00199 ILOW = MAX( 1, N / 2 )
00200 ISTEP = 1
00201 IHIGH = N
00202 ELSE IF( IMODE.EQ.6 ) THEN
00203 ILOW = 1
00204 ISTEP = 2
00205 IHIGH = N
00206 END IF
00207 DO 40 I = ILOW, IHIGH, ISTEP
00208 IWORK( I ) = 1
00209 40 CONTINUE
00210 END IF
00211 CALL SLAORD( 'Decreasing', MNMIN, COPYS, 1 )
00212 END IF
00213
00214 DO 60 INB = 1, NNB
00215
00216
00217
00218 NB = NBVAL( INB )
00219 CALL XLAENV( 1, NB )
00220 NX = NXVAL( INB )
00221 CALL XLAENV( 3, NX )
00222
00223
00224
00225
00226 CALL CLACPY( 'All', M, N, COPYA, LDA, A, LDA )
00227 CALL ICOPY( N, IWORK( 1 ), 1, IWORK( N+1 ), 1 )
00228
00229
00230
00231 LW = NB*( N+1 )
00232
00233 SRNAMT = 'CGEQP3'
00234 CALL CGEQP3( M, N, A, LDA, IWORK( N+1 ), TAU, WORK,
00235 $ LW, RWORK, INFO )
00236
00237
00238
00239 RESULT( 1 ) = CQRT12( M, N, A, LDA, COPYS, WORK,
00240 $ LWORK, RWORK )
00241
00242
00243
00244 RESULT( 2 ) = CQPT01( M, N, MNMIN, COPYA, A, LDA, TAU,
00245 $ IWORK( N+1 ), WORK, LWORK )
00246
00247
00248
00249 RESULT( 3 ) = CQRT11( M, MNMIN, A, LDA, TAU, WORK,
00250 $ LWORK )
00251
00252
00253
00254
00255 DO 50 K = 1, NTESTS
00256 IF( RESULT( K ).GE.THRESH ) THEN
00257 IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 )
00258 $ CALL ALAHD( NOUT, PATH )
00259 WRITE( NOUT, FMT = 9999 )'CGEQP3', M, N, NB,
00260 $ IMODE, K, RESULT( K )
00261 NFAIL = NFAIL + 1
00262 END IF
00263 50 CONTINUE
00264 NRUN = NRUN + NTESTS
00265
00266 60 CONTINUE
00267 70 CONTINUE
00268 80 CONTINUE
00269 90 CONTINUE
00270
00271
00272
00273 CALL ALASUM( PATH, NOUT, NFAIL, NRUN, NERRS )
00274
00275 9999 FORMAT( 1X, A, ' M =', I5, ', N =', I5, ', NB =', I4, ', type ',
00276 $ I2, ', test ', I2, ', ratio =', G12.5 )
00277
00278
00279
00280 END