198 SUBROUTINE schkqr( 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
213 INTEGER IWORK( * ), MVAL( * ), NBVAL( * ), NVAL( * ),
215 REAL A( * ), AC( * ), AF( * ), AQ( * ), AR( * ),
216 $ B( * ), RWORK( * ), TAU( * ), WORK( * ),
224 PARAMETER ( NTESTS = 9 )
226 parameter( ntypes = 8 )
228 parameter( zero = 0.0e0 )
233 INTEGER I, IK, IM, IMAT, IN, INB, INFO, K, KL, KU, LDA,
234 $ lwork, m, minmn, mode, n, nb, nerrs, nfail, nk,
239 INTEGER ISEED( 4 ), ISEEDY( 4 ), KVAL( 4 )
240 REAL RESULT( NTESTS )
260 COMMON / infoc / infot, nunit, ok, lerr
261 COMMON / srnamc / srnamt
264 DATA iseedy / 1988, 1989, 1990, 1991 /
270 path( 1: 1 ) =
'Single precision'
276 iseed( i ) = iseedy( i )
282 $
CALL serrqr( path, nout )
287 lwork = nmax*max( nmax, nrhs )
299 DO 50 imat = 1, ntypes
303 IF( .NOT.dotype( imat ) )
309 CALL slatb4( path, imat, m, n,
TYPE, kl, ku, anorm, mode,
313 CALL slatms( m, n, dist, iseed,
TYPE, rwork, mode,
314 $ cndnum, anorm, kl, ku,
'No packing', a, lda,
320 CALL alaerh( path,
'SLATMS', 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 sqrt01( m, n, a, af, aq, ar, lda, tau,
364 $ work, lwork, rwork, result( 1 ) )
368 CALL sqrt01p( m, n, a, af, aq, ar, lda, tau,
369 $ work, lwork, rwork, result( 8 ) )
371 IF( .NOT. sgennd( m, n, af, lda ) )
372 $ result( 9 ) = 2*thresh
374 ELSE IF( m.GE.n )
THEN
379 CALL sqrt02( m, n, k, a, af, aq, ar, lda, tau,
380 $ work, lwork, rwork, result( 1 ) )
387 CALL sqrt03( m, n, k, af, ac, ar, aq, lda, tau,
388 $ work, lwork, rwork, result( 3 ) )
395 IF( k.EQ.n .AND. inb.EQ.1 )
THEN
401 CALL slarhs( path,
'New',
'Full',
402 $
'No transpose', m, n, 0, 0,
403 $ nrhs, a, lda, xact, lda, b, lda,
406 CALL slacpy(
'Full', m, nrhs, b, lda, x,
409 CALL sgeqrs( m, n, nrhs, af, lda, tau, x,
410 $ lda, work, lwork, info )
415 $
CALL alaerh( path,
'SGEQRS', info, 0,
' ',
416 $ m, n, nrhs, -1, nb, imat,
417 $ nfail, nerrs, nout )
419 CALL sget02(
'No transpose', m, n, nrhs, a,
420 $ lda, x, lda, b, lda, rwork,
430 IF( result( i ).GE.thresh )
THEN
431 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
432 $
CALL alahd( nout, path )
433 WRITE( nout, fmt = 9999 )m, n, k, nb, nx,
434 $ imat, i, result( i )
447 CALL alasum( path, nout, nfail, nrun, nerrs )
449 9999
FORMAT(
' M=', i5,
', N=', i5,
', K=', i5,
', NB=', i4,
', NX=',
450 $ i5,
', type ', i2,
', test(', i2,
')=', g12.5 )
subroutine slacpy(UPLO, M, N, A, LDA, B, LDB)
SLACPY copies all or part of one two-dimensional array to another.
subroutine alasum(TYPE, NOUT, NFAIL, NRUN, NERRS)
ALASUM
subroutine xlaenv(ISPEC, NVALUE)
XLAENV
subroutine alahd(IOUNIT, PATH)
ALAHD
subroutine alaerh(PATH, SUBNAM, INFO, INFOE, OPTS, M, N, KL, KU, N5, IMAT, NFAIL, NERRS, NOUT)
ALAERH
subroutine slatms(M, N, DIST, ISEED, SYM, D, MODE, COND, DMAX, KL, KU, PACK, A, LDA, WORK, INFO)
SLATMS
subroutine sget02(TRANS, M, N, NRHS, A, LDA, X, LDX, B, LDB, RWORK, RESID)
SGET02
subroutine slarhs(PATH, XTYPE, UPLO, TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B, LDB, ISEED, INFO)
SLARHS
subroutine slatb4(PATH, IMAT, M, N, TYPE, KL, KU, ANORM, MODE, CNDNUM, DIST)
SLATB4
subroutine sqrt01p(M, N, A, AF, Q, R, LDA, TAU, WORK, LWORK, RWORK, RESULT)
SQRT01P
subroutine serrqr(PATH, NUNIT)
SERRQR
subroutine sqrt02(M, N, K, A, AF, Q, R, LDA, TAU, WORK, LWORK, RWORK, RESULT)
SQRT02
subroutine sqrt01(M, N, A, AF, Q, R, LDA, TAU, WORK, LWORK, RWORK, RESULT)
SQRT01
subroutine sgeqrs(M, N, NRHS, A, LDA, TAU, B, LDB, WORK, LWORK, INFO)
SGEQRS
subroutine sqrt03(M, N, K, AF, C, CC, Q, LDA, TAU, WORK, LWORK, RWORK, RESULT)
SQRT03
subroutine schkqr(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)
SCHKQR