150 SUBROUTINE dchkq3( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
151 $ THRESH, A, COPYA, S, TAU, WORK, IWORK,
159 INTEGER NM, NN, NNB, NOUT
160 DOUBLE PRECISION THRESH
164 INTEGER IWORK( * ), MVAL( * ), NBVAL( * ), NVAL( * ),
166 DOUBLE PRECISION A( * ), COPYA( * ), S( * ),
167 $ TAU( * ), WORK( * )
174 PARAMETER ( NTYPES = 6 )
176 parameter( ntests = 3 )
177 DOUBLE PRECISION ONE, ZERO
178 parameter( one = 1.0d0, zero = 0.0d0 )
182 INTEGER I, IHIGH, ILOW, IM, IMODE, IN, INB, INFO,
183 $ istep, k, lda, lw, lwork, m, mnmin, mode, n,
184 $ nb, nerrs, nfail, nrun, nx
188 INTEGER ISEED( 4 ), ISEEDY( 4 )
189 DOUBLE PRECISION RESULT( NTESTS )
192 DOUBLE PRECISION DLAMCH, DQPT01, DQRT11, DQRT12
193 EXTERNAL DLAMCH, DQPT01, DQRT11, DQRT12
205 INTEGER INFOT, IOUNIT
208 COMMON / infoc / infot, iounit, ok, lerr
209 COMMON / srnamc / srnamt
212 DATA iseedy / 1988, 1989, 1990, 1991 /
218 path( 1: 1 ) =
'Double precision'
224 iseed( i ) = iseedy( i )
226 eps = dlamch(
'Epsilon' )
242 lwork = max( 1, m*max( m, n )+4*mnmin+max( m, n ),
243 $ m*n + 2*mnmin + 4*n )
245 DO 70 imode = 1, ntypes
246 IF( .NOT.dotype( imode ) )
267 IF( imode.EQ.1 )
THEN
268 CALL dlaset(
'Full', m, n, zero, zero, copya, lda )
273 CALL dlatms( m, n,
'Uniform', iseed,
'Nonsymm', s,
274 $ mode, one / eps, one, m, n,
'No packing',
275 $ copya, lda, work, info )
276 IF( imode.GE.4 )
THEN
277 IF( imode.EQ.4 )
THEN
280 ihigh = max( 1, n / 2 )
281 ELSE IF( imode.EQ.5 )
THEN
282 ilow = max( 1, n / 2 )
285 ELSE IF( imode.EQ.6 )
THEN
290 DO 40 i = ilow, ihigh, istep
294 CALL dlaord(
'Decreasing', mnmin, s, 1 )
309 CALL dlacpy(
'All', m, n, copya, lda, a, lda )
310 CALL icopy( n, iwork( 1 ), 1, iwork( n+1 ), 1 )
314 lw = max( 1, 2*n+nb*( n+1 ) )
319 CALL dgeqp3( m, n, a, lda, iwork( n+1 ), tau, work,
324 result( 1 ) = dqrt12( m, n, a, lda, s, work,
329 result( 2 ) = dqpt01( m, n, mnmin, copya, a, lda, tau,
330 $ iwork( n+1 ), work, lwork )
334 result( 3 ) = dqrt11( m, mnmin, a, lda, tau, work,
341 IF( result( k ).GE.thresh )
THEN
342 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
343 $
CALL alahd( nout, path )
344 WRITE( nout, fmt = 9999 )
'DGEQP3', m, n, nb,
345 $ imode, k, result( k )
358 CALL alasum( path, nout, nfail, nrun, nerrs )
360 9999
FORMAT( 1x, a,
' M =', i5,
', N =', i5,
', NB =', i4,
', type ',
361 $ i2,
', test ', i2,
', ratio =', g12.5 )
subroutine alasum(type, nout, nfail, nrun, nerrs)
ALASUM
subroutine xlaenv(ispec, nvalue)
XLAENV
subroutine alahd(iounit, path)
ALAHD
subroutine dchkq3(dotype, nm, mval, nn, nval, nnb, nbval, nxval, thresh, a, copya, s, tau, work, iwork, nout)
DCHKQ3
subroutine dlaord(job, n, x, incx)
DLAORD
subroutine dlatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
DLATMS
subroutine dgeqp3(m, n, a, lda, jpvt, tau, work, lwork, info)
DGEQP3
subroutine dlacpy(uplo, m, n, a, lda, b, ldb)
DLACPY copies all or part of one two-dimensional array to another.
subroutine dlaset(uplo, m, n, alpha, beta, a, lda)
DLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine icopy(n, sx, incx, sy, incy)
ICOPY