198 SUBROUTINE dchkqr( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
199 $ NRHS, THRESH, TSTERR, NMAX, A, AF, AQ, AR, AC,
200 $ B, X, XACT, TAU, WORK, RWORK, IWORK, NOUT )
208 INTEGER NM, NMAX, NN, NNB, NOUT, NRHS
209 DOUBLE PRECISION THRESH
213 INTEGER IWORK( * ), MVAL( * ), NBVAL( * ), NVAL( * ),
215 DOUBLE PRECISION A( * ), AC( * ), AF( * ), AQ( * ), AR( * ),
216 $ B( * ), RWORK( * ), TAU( * ), WORK( * ),
224 PARAMETER ( NTESTS = 9 )
226 parameter( ntypes = 8 )
227 DOUBLE PRECISION ZERO
228 parameter( zero = 0.0d0 )
233 INTEGER I, IK, IM, IMAT, IN, INB, INFO, K, KL, KU, LDA,
234 $ lwork, m, minmn, mode, n, nb, nerrs, nfail, nk,
236 DOUBLE PRECISION ANORM, CNDNUM
239 INTEGER ISEED( 4 ), ISEEDY( 4 ), KVAL( 4 )
240 DOUBLE PRECISION RESULT( NTESTS )
260 COMMON / infoc / infot, nunit, ok, lerr
261 COMMON / srnamc / srnamt
264 DATA iseedy / 1988, 1989, 1990, 1991 /
270 path( 1: 1 ) =
'Double precision'
276 iseed( i ) = iseedy( i )
282 $
CALL derrqr( path, nout )
287 lwork = nmax*
max( nmax, nrhs )
299 DO 50 imat = 1, ntypes
303 IF( .NOT.dotype( imat ) )
309 CALL dlatb4( path, imat, m, n,
TYPE, kl, ku, anorm, mode,
313 CALL dlatms( m, n, dist, iseed,
TYPE, rwork, mode,
314 $ cndnum, anorm, kl, ku,
'No packing', a, lda,
320 CALL alaerh( path,
'DLATMS', info, 0,
' ', m, n, -1,
321 $ -1, -1, imat, nfail, nerrs, nout )
332 kval( 4 ) = minmn / 2
333 IF( minmn.EQ.0 )
THEN
335 ELSE IF( minmn.EQ.1 )
THEN
337 ELSE IF( minmn.LE.3 )
THEN
363 CALL dqrt01( m, n, a, af, aq, ar, lda, tau,
364 $ work, lwork, rwork, result( 1 ) )
369 CALL dqrt01p( m, n, a, af, aq, ar, lda, tau,
370 $ work, lwork, rwork, result( 8 ) )
372 IF( .NOT. dgennd( m, n, af, lda ) )
373 $ result( 9 ) = 2*thresh
375 ELSE IF( m.GE.n )
THEN
380 CALL dqrt02( m, n, k, a, af, aq, ar, lda, tau,
381 $ work, lwork, rwork, result( 1 ) )
388 CALL dqrt03( m, n, k, af, ac, ar, aq, lda, tau,
389 $ work, lwork, rwork, result( 3 ) )
396 IF( k.EQ.n .AND. inb.EQ.1 )
THEN
402 CALL dlarhs( path,
'New',
'Full',
403 $
'No transpose', m, n, 0, 0,
404 $ nrhs, a, lda, xact, lda, b
407 CALL dlacpy( 'full
', M, NRHS, B, LDA, X,
410 CALL DGEQRS( M, N, NRHS, AF, LDA, TAU, X,
411 $ LDA, WORK, LWORK, INFO )
416 $ CALL ALAERH( PATH, 'dgeqrs', INFO, 0, ' ',
417 $ M, N, NRHS, -1, NB, IMAT,
418 $ NFAIL, NERRS, NOUT )
420 CALL DGET02( 'no transpose
', M, N, NRHS, A,
421 $ LDA, X, LDA, B, LDA, RWORK,
431.GE.
IF( RESULT( I )THRESH ) THEN
432.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
433 $ CALL ALAHD( NOUT, PATH )
434 WRITE( NOUT, FMT = 9999 )M, N, K, NB, NX,
435 $ IMAT, I, RESULT( I )
448 CALL ALASUM( PATH, NOUT, NFAIL, NRUN, NERRS )
450 9999 FORMAT( ' m=
', I5, ', n=
', I5, ', k=
', I5, ', nb=
', I4, ', nx=
',
451 $ I5, ',
type ', I2, ', test(
', I2, ')=
', G12.5 )
subroutine dlacpy(uplo, m, n, a, lda, b, ldb)
DLACPY copies all or part of one two-dimensional array to another.
subroutine xlaenv(ispec, nvalue)
XLAENV
subroutine alasum(type, nout, nfail, nrun, nerrs)
ALASUM
subroutine alahd(iounit, path)
ALAHD
subroutine alaerh(path, subnam, info, infoe, opts, m, n, kl, ku, n5, imat, nfail, nerrs, nout)
ALAERH
subroutine dget02(trans, m, n, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
DGET02
subroutine dlarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
DLARHS
subroutine dgeqrs(m, n, nrhs, a, lda, tau, b, ldb, work, lwork, info)
DGEQRS
subroutine dqrt01(m, n, a, af, q, r, lda, tau, work, lwork, rwork, result)
DQRT01
subroutine dqrt01p(m, n, a, af, q, r, lda, tau, work, lwork, rwork, result)
DQRT01P
subroutine derrqr(path, nunit)
DERRQR
subroutine dlatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
DLATB4
subroutine dqrt03(m, n, k, af, c, cc, q, lda, tau, work, lwork, rwork, result)
DQRT03
subroutine dchkqr(dotype, nm, mval, nn, nval, nnb, nbval, nxval, nrhs, thresh, tsterr, nmax, a, af, aq, ar, ac, b, x, xact, tau, work, rwork, iwork, nout)
DCHKQR
subroutine dqrt02(m, n, k, a, af, q, r, lda, tau, work, lwork, rwork, result)
DQRT02
subroutine dlatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
DLATMS