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, lda,
 
  407                           CALL dlacpy( 
'Full', m, nrhs, b, lda, x,
 
  413                           CALL dlacpy( 
'Full', m, n, a, lda, af, lda )
 
  416                           CALL dgels( 
'No transpose', m, n, nrhs, af,
 
  417     $                                 lda, x, lda, work, lwork, info )
 
  422     $                        
CALL alaerh( path, 
'DGELS', info, 0, 
'N',
 
  423     $                                     m, n, nrhs, -1, nb, imat,
 
  424     $                                     nfail, nerrs, nout )
 
  426                           CALL dget02( 
'No transpose', m, n, nrhs, a,
 
  427     $                                  lda, x, lda, b, lda, rwork,
 
  437                        IF( result( i ).GE.thresh ) 
THEN 
  438                           IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
 
  439     $                        
CALL alahd( nout, path )
 
  440                           WRITE( nout, fmt = 9999 )m, n, k, nb, nx,
 
  441     $                        imat, i, result( i )
 
  454      CALL alasum( path, nout, nfail, nrun, nerrs )
 
  456 9999 
FORMAT( 
' M=', i5, 
', N=', i5, 
', K=', i5, 
', NB=', i4, 
', NX=',
 
  457     $      i5, 
', type ', i2, 
', test(', i2, 
')=', g12.5 )
 
 
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