155 SUBROUTINE zchkq3( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
156 $ THRESH, A, COPYA, S, TAU, WORK, RWORK,
164 INTEGER NM, NN, NNB, NOUT
165 DOUBLE PRECISION THRESH
169 INTEGER IWORK( * ), MVAL( * ), NBVAL( * ), NVAL( * ),
171 DOUBLE PRECISION S( * ), RWORK( * )
172 COMPLEX*16 A( * ), COPYA( * ), TAU( * ), WORK( * )
179 PARAMETER ( NTYPES = 6 )
181 parameter( ntests = 3 )
182 DOUBLE PRECISION ONE, ZERO
184 parameter( one = 1.0d+0, zero = 0.0d+0,
185 $ czero = ( 0.0d+0, 0.0d+0 ) )
189 INTEGER I, IHIGH, ILOW, IM, IMODE, IN, INB, INFO,
190 $ istep, k, lda, lw, lwork, m, mnmin, mode, n,
191 $ nb, nerrs, nfail, nrun, nx
195 INTEGER ISEED( 4 ), ISEEDY( 4 )
196 DOUBLE PRECISION RESULT( NTESTS )
199 DOUBLE PRECISION DLAMCH, ZQPT01, ZQRT11, ZQRT12
200 EXTERNAL DLAMCH, ZQPT01, ZQRT11, ZQRT12
212 INTEGER INFOT, IOUNIT
215 COMMON / infoc / infot, iounit, ok, lerr
216 COMMON / srnamc / srnamt
219 DATA iseedy / 1988, 1989, 1990, 1991 /
225 path( 1: 1 ) =
'Zomplex precision'
231 iseed( i ) = iseedy( i )
233 eps = dlamch(
'Epsilon' )
249 lwork = max( 1, m*max( m, n )+4*mnmin+max( m, n ) )
251 DO 70 imode = 1, ntypes
252 IF( .NOT.dotype( imode ) )
273 IF( imode.EQ.1 )
THEN
274 CALL zlaset(
'Full', m, n, czero, czero, copya, lda )
279 CALL zlatms( m, n,
'Uniform', iseed,
'Nonsymm', s,
280 $ mode, one / eps, one, m, n,
'No packing',
281 $ copya, lda, work, info )
282 IF( imode.GE.4 )
THEN
283 IF( imode.EQ.4 )
THEN
286 ihigh = max( 1, n / 2 )
287 ELSE IF( imode.EQ.5 )
THEN
288 ilow = max( 1, n / 2 )
291 ELSE IF( imode.EQ.6 )
THEN
296 DO 40 i = ilow, ihigh, istep
300 CALL dlaord(
'Decreasing', mnmin, s, 1 )
315 CALL zlacpy(
'All', m, n, copya, lda, a, lda )
316 CALL icopy( n, iwork( 1 ), 1, iwork( n+1 ), 1 )
323 CALL zgeqp3( m, n, a, lda, iwork( n+1 ), tau, work,
328 result( 1 ) = zqrt12( m, n, a, lda, s, work,
333 result( 2 ) = zqpt01( m, n, mnmin, copya, a, lda, tau,
334 $ iwork( n+1 ), work, lwork )
338 result( 3 ) = zqrt11( m, mnmin, a, lda, tau, work,
345 IF( result( k ).GE.thresh )
THEN
346 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
347 $
CALL alahd( nout, path )
348 WRITE( nout, fmt = 9999 )
'ZGEQP3', m, n, nb,
349 $ imode, k, result( k )
362 CALL alasum( path, nout, nfail, nrun, nerrs )
364 9999
FORMAT( 1x, a,
' M =', i5,
', N =', i5,
', NB =', i4,
', type ',
365 $ 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 dlaord(job, n, x, incx)
DLAORD
subroutine zgeqp3(m, n, a, lda, jpvt, tau, work, lwork, rwork, info)
ZGEQP3
subroutine zlacpy(uplo, m, n, a, lda, b, ldb)
ZLACPY copies all or part of one two-dimensional array to another.
subroutine zlaset(uplo, m, n, alpha, beta, a, lda)
ZLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine icopy(n, sx, incx, sy, incy)
ICOPY
subroutine zchkq3(dotype, nm, mval, nn, nval, nnb, nbval, nxval, thresh, a, copya, s, tau, work, rwork, iwork, nout)
ZCHKQ3
subroutine zlatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
ZLATMS