Provided by: liblapack-doc-man_3.6.0-2ubuntu2_all bug

NAME

       double_lin - double

   Functions
       program dchkaa
           DCHKAA
       program dchkab
           DCHKAB
       subroutine dchkeq (THRESH, NOUT)
           DCHKEQ
       subroutine dchkgb (DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, A,
           LA, AFAC, LAFAC, B, X, XACT, WORK, RWORK, IWORK, NOUT)
           DCHKGB
       subroutine dchkge (DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR,
           NMAX, A, AFAC, AINV, B, X, XACT, WORK, RWORK, IWORK, NOUT)
           DCHKGE
       subroutine dchkgt (DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, A, AF, B, X, XACT, WORK,
           RWORK, IWORK, NOUT)
           DCHKGT
       subroutine dchklq (DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, NRHS, THRESH, TSTERR,
           NMAX, A, AF, AQ, AL, AC, B, X, XACT, TAU, WORK, RWORK, NOUT)
           DCHKLQ
       subroutine dchkpb (DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A,
           AFAC, AINV, B, X, XACT, WORK, RWORK, IWORK, NOUT)
           DCHKPB
       subroutine dchkpo (DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A,
           AFAC, AINV, B, X, XACT, WORK, RWORK, IWORK, NOUT)
           DCHKPO
       subroutine dchkpp (DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A, AFAC, AINV, B,
           X, XACT, WORK, RWORK, IWORK, NOUT)
           DCHKPP
       subroutine dchkps (DOTYPE, NN, NVAL, NNB, NBVAL, NRANK, RANKVAL, THRESH, TSTERR, NMAX, A,
           AFAC, PERM, PIV, WORK, RWORK, NOUT)
           DCHKPS
       subroutine dchkpt (DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, A, D, E, B, X, XACT,
           WORK, RWORK, NOUT)
           DCHKPT
       subroutine dchkq3 (DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, THRESH, A, COPYA, S,
           TAU, WORK, IWORK, NOUT)
           DCHKQ3
       subroutine dchkql (DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, NRHS, THRESH, TSTERR,
           NMAX, A, AF, AQ, AL, AC, B, X, XACT, TAU, WORK, RWORK, NOUT)
           DCHKQL
       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 dchkqrt (THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB, NBVAL, NOUT)
           DCHKQRT
       subroutine dchkqrtp (THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB, NBVAL, NOUT)
           DCHKQRTP
       program dchkrfp
           DCHKRFP
       subroutine dchkrq (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)
           DCHKRQ
       subroutine dchksp (DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A, AFAC, AINV, B,
           X, XACT, WORK, RWORK, IWORK, NOUT)
           DCHKSP
       subroutine dchksy (DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A,
           AFAC, AINV, B, X, XACT, WORK, RWORK, IWORK, NOUT)
           DCHKSY
       subroutine dchksy_rook (DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A,
           AFAC, AINV, B, X, XACT, WORK, RWORK, IWORK, NOUT)
           DCHKSY_ROOK
       subroutine dchktb (DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, AB, AINV, B, X,
           XACT, WORK, RWORK, IWORK, NOUT)
           DCHKTB
       subroutine dchktp (DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, AP, AINVP, B, X,
           XACT, WORK, RWORK, IWORK, NOUT)
           DCHKTP
       subroutine dchktr (DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A,
           AINV, B, X, XACT, WORK, RWORK, IWORK, NOUT)
           DCHKTR
       subroutine dchktz (DOTYPE, NM, MVAL, NN, NVAL, THRESH, TSTERR, A, COPYA, S, TAU, WORK,
           NOUT)
           DCHKTZ
       subroutine ddrvab (DOTYPE, NM, MVAL, NNS, NSVAL, THRESH, NMAX, A, AFAC, B, X, WORK, RWORK,
           SWORK, IWORK, NOUT)
           DDRVAB
       subroutine ddrvac (DOTYPE, NM, MVAL, NNS, NSVAL, THRESH, NMAX, A, AFAC, B, X, WORK, RWORK,
           SWORK, NOUT)
           DDRVAC
       subroutine ddrvgb (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, A, LA, AFB, LAFB, ASAV, B,
           BSAV, X, XACT, S, WORK, RWORK, IWORK, NOUT)
           DDRVGB
       subroutine ddrvge (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, ASAV, B, BSAV,
           X, XACT, S, WORK, RWORK, IWORK, NOUT)
           DDRVGE
       subroutine ddrvgt (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, A, AF, B, X, XACT, WORK, RWORK,
           IWORK, NOUT)
           DDRVGT
       subroutine ddrvls (DOTYPE, NM, MVAL, NN, NVAL, NNS, NSVAL, NNB, NBVAL, NXVAL, THRESH,
           TSTERR, A, COPYA, B, COPYB, C, S, COPYS, WORK, IWORK, NOUT)
           DDRVLS
       subroutine ddrvpb (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, ASAV, B, BSAV,
           X, XACT, S, WORK, RWORK, IWORK, NOUT)
           DDRVPB
       subroutine ddrvpo (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, ASAV, B, BSAV,
           X, XACT, S, WORK, RWORK, IWORK, NOUT)
           DDRVPO
       subroutine ddrvpp (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, ASAV, B, BSAV,
           X, XACT, S, WORK, RWORK, IWORK, NOUT)
           DDRVPP
       subroutine ddrvpt (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, A, D, E, B, X, XACT, WORK,
           RWORK, NOUT)
           DDRVPT
       subroutine ddrvrf1 (NOUT, NN, NVAL, THRESH, A, LDA, ARF, WORK)
           DDRVRF1
       subroutine ddrvrf2 (NOUT, NN, NVAL, A, LDA, ARF, AP, ASAV)
           DDRVRF2
       subroutine ddrvrf3 (NOUT, NN, NVAL, THRESH, A, LDA, ARF, B1, B2, D_WORK_DLANGE,
           D_WORK_DGEQRF, TAU)
           DDRVRF3
       subroutine ddrvrf4 (NOUT, NN, NVAL, THRESH, C1, C2, LDC, CRF, A, LDA, D_WORK_DLANGE)
           DDRVRF4
       subroutine ddrvrfp (NOUT, NN, NVAL, NNS, NSVAL, NNT, NTVAL, THRESH, A, ASAV, AFAC, AINV,
           B, BSAV, XACT, X, ARF, ARFINV, D_WORK_DLATMS, D_WORK_DPOT01, D_TEMP_DPOT02,
           D_TEMP_DPOT03, D_WORK_DLANSY, D_WORK_DPOT02, D_WORK_DPOT03)
           DDRVRFP
       subroutine ddrvsp (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, AINV, B, X,
           XACT, WORK, RWORK, IWORK, NOUT)
           DDRVSP
       subroutine ddrvsy (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, AINV, B, X,
           XACT, WORK, RWORK, IWORK, NOUT)
           DDRVSY
       subroutine ddrvsy_rook (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, AINV, B, X,
           XACT, WORK, RWORK, IWORK, NOUT)
           DDRVSY_ROOK
       subroutine debchvxx (THRESH, PATH)
           DEBCHVXX
       subroutine derrab (NUNIT)
           DERRAB
       subroutine derrac (NUNIT)
           DERRAC
       subroutine derrge (PATH, NUNIT)
           DERRGE
       subroutine derrgt (PATH, NUNIT)
           DERRGT
       subroutine derrlq (PATH, NUNIT)
           DERRLQ
       subroutine derrls (PATH, NUNIT)
           DERRLS
       subroutine derrpo (PATH, NUNIT)
           DERRPO
       subroutine derrps (PATH, NUNIT)
           DERRPS
       subroutine derrql (PATH, NUNIT)
           DERRQL
       subroutine derrqp (PATH, NUNIT)
           DERRQP
       subroutine derrqr (PATH, NUNIT)
           DERRQR
       subroutine derrqrt (PATH, NUNIT)
           DERRQRT
       subroutine derrqrtp (PATH, NUNIT)
           DERRQRTP
       subroutine derrrfp (NUNIT)
           DERRRFP
       subroutine derrrq (PATH, NUNIT)
           DERRRQ
       subroutine derrsy (PATH, NUNIT)
           DERRSY
       subroutine derrtr (PATH, NUNIT)
           DERRTR
       subroutine derrtz (PATH, NUNIT)
           DERRTZ
       subroutine derrvx (PATH, NUNIT)
           DERRVX
       subroutine dgbt01 (M, N, KL, KU, A, LDA, AFAC, LDAFAC, IPIV, WORK, RESID)
           DGBT01
       subroutine dgbt02 (TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B, LDB, RESID)
           DGBT02
       subroutine dgbt05 (TRANS, N, KL, KU, NRHS, AB, LDAB, B, LDB, X, LDX, XACT, LDXACT, FERR,
           BERR, RESLTS)
           DGBT05
       subroutine dgelqs (M, N, NRHS, A, LDA, TAU, B, LDB, WORK, LWORK, INFO)
           DGELQS
       logical function dgennd (M, N, A, LDA)
           DGENND
       subroutine dgeqls (M, N, NRHS, A, LDA, TAU, B, LDB, WORK, LWORK, INFO)
           DGEQLS
       subroutine dgeqrs (M, N, NRHS, A, LDA, TAU, B, LDB, WORK, LWORK, INFO)
           DGEQRS
       subroutine dgerqs (M, N, NRHS, A, LDA, TAU, B, LDB, WORK, LWORK, INFO)
           DGERQS
       subroutine dget01 (M, N, A, LDA, AFAC, LDAFAC, IPIV, RWORK, RESID)
           DGET01
       subroutine dget02 (TRANS, M, N, NRHS, A, LDA, X, LDX, B, LDB, RWORK, RESID)
           DGET02
       subroutine dget03 (N, A, LDA, AINV, LDAINV, WORK, LDWORK, RWORK, RCOND, RESID)
           DGET03
       subroutine dget04 (N, NRHS, X, LDX, XACT, LDXACT, RCOND, RESID)
           DGET04
       double precision function dget06 (RCOND, RCONDC)
           DGET06
       subroutine dget07 (TRANS, N, NRHS, A, LDA, B, LDB, X, LDX, XACT, LDXACT, FERR, CHKFERR,
           BERR, RESLTS)
           DGET07
       subroutine dget08 (TRANS, M, N, NRHS, A, LDA, X, LDX, B, LDB, RWORK, RESID)
           DGET08
       subroutine dgtt01 (N, DL, D, DU, DLF, DF, DUF, DU2, IPIV, WORK, LDWORK, RWORK, RESID)
           DGTT01
       subroutine dgtt02 (TRANS, N, NRHS, DL, D, DU, X, LDX, B, LDB, RESID)
           DGTT02
       subroutine dgtt05 (TRANS, N, NRHS, DL, D, DU, B, LDB, X, LDX, XACT, LDXACT, FERR, BERR,
           RESLTS)
           DGTT05
       subroutine dlahilb (N, NRHS, A, LDA, X, LDX, B, LDB, WORK, INFO)
           DLAHILB
       subroutine dlaord (JOB, N, X, INCX)
           DLAORD
       subroutine dlaptm (N, NRHS, ALPHA, D, E, X, LDX, BETA, B, LDB)
           DLAPTM
       subroutine dlarhs (PATH, XTYPE, UPLO, TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B, LDB,
           ISEED, INFO)
           DLARHS
       subroutine dlatb4 (PATH, IMAT, M, N, TYPE, KL, KU, ANORM, MODE, CNDNUM, DIST)
           DLATB4
       subroutine dlatb5 (PATH, IMAT, N, TYPE, KL, KU, ANORM, MODE, CNDNUM, DIST)
           DLATB5
       subroutine dlattb (IMAT, UPLO, TRANS, DIAG, ISEED, N, KD, AB, LDAB, B, WORK, INFO)
           DLATTB
       subroutine dlattp (IMAT, UPLO, TRANS, DIAG, ISEED, N, A, B, WORK, INFO)
           DLATTP
       subroutine dlattr (IMAT, UPLO, TRANS, DIAG, ISEED, N, A, LDA, B, WORK, INFO)
           DLATTR
       subroutine dlavsp (UPLO, TRANS, DIAG, N, NRHS, A, IPIV, B, LDB, INFO)
           DLAVSP
       subroutine dlavsy (UPLO, TRANS, DIAG, N, NRHS, A, LDA, IPIV, B, LDB, INFO)
           DLAVSY
       subroutine dlavsy_rook (UPLO, TRANS, DIAG, N, NRHS, A, LDA, IPIV, B, LDB, INFO)
           DLAVSY_ROOK
       subroutine dlqt01 (M, N, A, AF, Q, L, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           DLQT01
       subroutine dlqt02 (M, N, K, A, AF, Q, L, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           DLQT02
       subroutine dlqt03 (M, N, K, AF, C, CC, Q, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           DLQT03
       subroutine dpbt01 (UPLO, N, KD, A, LDA, AFAC, LDAFAC, RWORK, RESID)
           DPBT01
       subroutine dpbt02 (UPLO, N, KD, NRHS, A, LDA, X, LDX, B, LDB, RWORK, RESID)
           DPBT02
       subroutine dpbt05 (UPLO, N, KD, NRHS, AB, LDAB, B, LDB, X, LDX, XACT, LDXACT, FERR, BERR,
           RESLTS)
           DPBT05
       subroutine dpot01 (UPLO, N, A, LDA, AFAC, LDAFAC, RWORK, RESID)
           DPOT01
       subroutine dpot02 (UPLO, N, NRHS, A, LDA, X, LDX, B, LDB, RWORK, RESID)
           DPOT02
       subroutine dpot03 (UPLO, N, A, LDA, AINV, LDAINV, WORK, LDWORK, RWORK, RCOND, RESID)
           DPOT03
       subroutine dpot05 (UPLO, N, NRHS, A, LDA, B, LDB, X, LDX, XACT, LDXACT, FERR, BERR,
           RESLTS)
           DPOT05
       subroutine dpot06 (UPLO, N, NRHS, A, LDA, X, LDX, B, LDB, RWORK, RESID)
           DPOT06
       subroutine dppt01 (UPLO, N, A, AFAC, RWORK, RESID)
           DPPT01
       subroutine dppt02 (UPLO, N, NRHS, A, X, LDX, B, LDB, RWORK, RESID)
           DPPT02
       subroutine dppt03 (UPLO, N, A, AINV, WORK, LDWORK, RWORK, RCOND, RESID)
           DPPT03
       subroutine dppt05 (UPLO, N, NRHS, AP, B, LDB, X, LDX, XACT, LDXACT, FERR, BERR, RESLTS)
           DPPT05
       subroutine dpst01 (UPLO, N, A, LDA, AFAC, LDAFAC, PERM, LDPERM, PIV, RWORK, RESID, RANK)
           DPST01
       subroutine dptt01 (N, D, E, DF, EF, WORK, RESID)
           DPTT01
       subroutine dptt02 (N, NRHS, D, E, X, LDX, B, LDB, RESID)
           DPTT02
       subroutine dptt05 (N, NRHS, D, E, B, LDB, X, LDX, XACT, LDXACT, FERR, BERR, RESLTS)
           DPTT05
       subroutine dqlt01 (M, N, A, AF, Q, L, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           DQLT01
       subroutine dqlt02 (M, N, K, A, AF, Q, L, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           DQLT02
       subroutine dqlt03 (M, N, K, AF, C, CC, Q, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           DQLT03
       double precision function dqpt01 (M, N, K, A, AF, LDA, TAU, JPVT, WORK, LWORK)
           DQPT01
       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 dqrt02 (M, N, K, A, AF, Q, R, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           DQRT02
       subroutine dqrt03 (M, N, K, AF, C, CC, Q, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           DQRT03
       subroutine dqrt04 (M, N, NB, RESULT)
           DQRT04
       subroutine dqrt05 (M, N, L, NB, RESULT)
           DQRT05
       double precision function dqrt11 (M, K, A, LDA, TAU, WORK, LWORK)
           DQRT11
       double precision function dqrt12 (M, N, A, LDA, S, WORK, LWORK)
           DQRT12
       subroutine dqrt13 (SCALE, M, N, A, LDA, NORMA, ISEED)
           DQRT13
       double precision function dqrt14 (TRANS, M, N, NRHS, A, LDA, X, LDX, WORK, LWORK)
           DQRT14
       subroutine dqrt15 (SCALE, RKSEL, M, N, NRHS, A, LDA, B, LDB, S, RANK, NORMA, NORMB, ISEED,
           WORK, LWORK)
           DQRT15
       subroutine dqrt16 (TRANS, M, N, NRHS, A, LDA, X, LDX, B, LDB, RWORK, RESID)
           DQRT16
       double precision function dqrt17 (TRANS, IRESID, M, N, NRHS, A, LDA, X, LDX, B, LDB, C,
           WORK, LWORK)
           DQRT17
       subroutine drqt01 (M, N, A, AF, Q, R, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           DRQT01
       subroutine drqt02 (M, N, K, A, AF, Q, R, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           DRQT02
       subroutine drqt03 (M, N, K, AF, C, CC, Q, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           DRQT03
       double precision function drzt01 (M, N, A, AF, LDA, TAU, WORK, LWORK)
           DRZT01
       double precision function drzt02 (M, N, AF, LDA, TAU, WORK, LWORK)
           DRZT02
       subroutine dspt01 (UPLO, N, A, AFAC, IPIV, C, LDC, RWORK, RESID)
           DSPT01
       subroutine dsyt01 (UPLO, N, A, LDA, AFAC, LDAFAC, IPIV, C, LDC, RWORK, RESID)
           DSYT01
       subroutine dsyt01_rook (UPLO, N, A, LDA, AFAC, LDAFAC, IPIV, C, LDC, RWORK, RESID)
           DSYT01_ROOK
       subroutine dtbt02 (UPLO, TRANS, DIAG, N, KD, NRHS, AB, LDAB, X, LDX, B, LDB, WORK, RESID)
           DTBT02
       subroutine dtbt03 (UPLO, TRANS, DIAG, N, KD, NRHS, AB, LDAB, SCALE, CNORM, TSCAL, X, LDX,
           B, LDB, WORK, RESID)
           DTBT03
       subroutine dtbt05 (UPLO, TRANS, DIAG, N, KD, NRHS, AB, LDAB, B, LDB, X, LDX, XACT, LDXACT,
           FERR, BERR, RESLTS)
           DTBT05
       subroutine dtbt06 (RCOND, RCONDC, UPLO, DIAG, N, KD, AB, LDAB, WORK, RAT)
           DTBT06
       subroutine dtpt01 (UPLO, DIAG, N, AP, AINVP, RCOND, WORK, RESID)
           DTPT01
       subroutine dtpt02 (UPLO, TRANS, DIAG, N, NRHS, AP, X, LDX, B, LDB, WORK, RESID)
           DTPT02
       subroutine dtpt03 (UPLO, TRANS, DIAG, N, NRHS, AP, SCALE, CNORM, TSCAL, X, LDX, B, LDB,
           WORK, RESID)
           DTPT03
       subroutine dtpt05 (UPLO, TRANS, DIAG, N, NRHS, AP, B, LDB, X, LDX, XACT, LDXACT, FERR,
           BERR, RESLTS)
           DTPT05
       subroutine dtpt06 (RCOND, RCONDC, UPLO, DIAG, N, AP, WORK, RAT)
           DTPT06
       subroutine dtrt01 (UPLO, DIAG, N, A, LDA, AINV, LDAINV, RCOND, WORK, RESID)
           DTRT01
       subroutine dtrt02 (UPLO, TRANS, DIAG, N, NRHS, A, LDA, X, LDX, B, LDB, WORK, RESID)
           DTRT02
       subroutine dtrt03 (UPLO, TRANS, DIAG, N, NRHS, A, LDA, SCALE, CNORM, TSCAL, X, LDX, B,
           LDB, WORK, RESID)
           DTRT03
       subroutine dtrt05 (UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB, X, LDX, XACT, LDXACT, FERR,
           BERR, RESLTS)
           DTRT05
       subroutine dtrt06 (RCOND, RCONDC, UPLO, DIAG, N, A, LDA, WORK, RAT)
           DTRT06
       subroutine sdrvsy_rook (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, AINV, B, X,
           XACT, WORK, RWORK, IWORK, NOUT)
           SDRVSY_ROOK

Detailed Description

       This is the group of double LAPACK TESTING LIN routines.

Function Documentation

   program dchkaa ()
       DCHKAA

       Purpose:

            DCHKAA is the main test program for the DOUBLE PRECISION LAPACK
            linear equation routines

            The program must be driven by a short data file. The first 15 records
            (not including the first comment  line) specify problem dimensions
            and program options using list-directed input. The remaining lines
            specify the LAPACK test paths and the number of matrix types to use
            in testing.  An annotated example of a data file can be obtained by
            deleting the first 3 characters from the following 40 lines:
            Data file for testing DOUBLE PRECISION LAPACK linear eqn. routines
            7                      Number of values of M
            0 1 2 3 5 10 16        Values of M (row dimension)
            7                      Number of values of N
            0 1 2 3 5 10 16        Values of N (column dimension)
            1                      Number of values of NRHS
            2                      Values of NRHS (number of right hand sides)
            5                      Number of values of NB
            1 3 3 3 20             Values of NB (the blocksize)
            1 0 5 9 1              Values of NX (crossover point)
            3                      Number of values of RANK
            30 50 90               Values of rank (as a % of N)
            20.0                   Threshold value of test ratio
            T                      Put T to test the LAPACK routines
            T                      Put T to test the driver routines
            T                      Put T to test the error exits
            DGE   11               List types on next line if 0 < NTYPES < 11
            DGB    8               List types on next line if 0 < NTYPES <  8
            DGT   12               List types on next line if 0 < NTYPES < 12
            DPO    9               List types on next line if 0 < NTYPES <  9
            DPS    9               List types on next line if 0 < NTYPES <  9
            DPP    9               List types on next line if 0 < NTYPES <  9
            DPB    8               List types on next line if 0 < NTYPES <  8
            DPT   12               List types on next line if 0 < NTYPES < 12
            DSY   10               List types on next line if 0 < NTYPES < 10
            DSR   10               List types on next line if 0 < NTYPES < 10
            DSP   10               List types on next line if 0 < NTYPES < 10
            DTR   18               List types on next line if 0 < NTYPES < 18
            DTP   18               List types on next line if 0 < NTYPES < 18
            DTB   17               List types on next line if 0 < NTYPES < 17
            DQR    8               List types on next line if 0 < NTYPES <  8
            DRQ    8               List types on next line if 0 < NTYPES <  8
            DLQ    8               List types on next line if 0 < NTYPES <  8
            DQL    8               List types on next line if 0 < NTYPES <  8
            DQP    6               List types on next line if 0 < NTYPES <  6
            DTZ    3               List types on next line if 0 < NTYPES <  3
            DLS    6               List types on next line if 0 < NTYPES <  6
            DEQ
            DQT
            DQX

             NMAX    INTEGER
                     The maximum allowable value for M and N.

             MAXIN   INTEGER
                     The number of different values that can be used for each of
                     M, N, NRHS, NB, NX and RANK

             MAXRHS  INTEGER
                     The maximum number of right hand sides

             MATMAX  INTEGER
                     The maximum number of matrix types to use for testing

             NIN     INTEGER
                     The unit number for input

             NOUT    INTEGER
                     The unit number for output

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           April 2012

   program dchkab ()
       DCHKAB

       Purpose:

            DCHKAB is the test program for the DOUBLE PRECISION LAPACK
            DSGESV/DSPOSV routine

            The program must be driven by a short data file. The first 5 records
            specify problem dimensions and program options using list-directed
            input. The remaining lines specify the LAPACK test paths and the
            number of matrix types to use in testing.  An annotated example of a
            data file can be obtained by deleting the first 3 characters from the
            following 10 lines:
            Data file for testing DOUBLE PRECISION LAPACK DSGESV
            7                      Number of values of M
            0 1 2 3 5 10 16        Values of M (row dimension)
            1                      Number of values of NRHS
            2                      Values of NRHS (number of right hand sides)
            20.0                   Threshold value of test ratio
            T                      Put T to test the LAPACK routines
            T                      Put T to test the error exits
            DGE    11              List types on next line if 0 < NTYPES < 11
            DPO    9               List types on next line if 0 < NTYPES <  9

             NMAX    INTEGER
                     The maximum allowable value for N

             MAXIN   INTEGER
                     The number of different values that can be used for each of
                     M, N, NRHS, NB, and NX

             MAXRHS  INTEGER
                     The maximum number of right hand sides

             NIN     INTEGER
                     The unit number for input

             NOUT    INTEGER
                     The unit number for output

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           April 2012

   subroutine dchkeq (double precision THRESH, integer NOUT)
       DCHKEQ

       Purpose:

            DCHKEQ tests DGEEQU, DGBEQU, DPOEQU, DPPEQU and DPBEQU

       Parameters:
           THRESH

                     THRESH is DOUBLE PRECISION
                     Threshold for testing routines. Should be between 2 and 10.

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dchkgb (logical, dimension( * ) DOTYPE, integer NM, integer, dimension( * ) MVAL,
       integer NN, integer, dimension( * ) NVAL, integer NNB, integer, dimension( * ) NBVAL,
       integer NNS, integer, dimension( * ) NSVAL, double precision THRESH, logical TSTERR,
       double precision, dimension( * ) A, integer LA, double precision, dimension( * ) AFAC,
       integer LAFAC, double precision, dimension( * ) B, double precision, dimension( * ) X,
       double precision, dimension( * ) XACT, double precision, dimension( * ) WORK, double
       precision, dimension( * ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       DCHKGB

       Purpose:

            DCHKGB tests DGBTRF, -TRS, -RFS, and -CON

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NM

                     NM is INTEGER
                     The number of values of M contained in the vector MVAL.

           MVAL

                     MVAL is INTEGER array, dimension (NM)
                     The values of the matrix row dimension M.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix column dimension N.

           NNB

                     NNB is INTEGER
                     The number of values of NB contained in the vector NBVAL.

           NBVAL

                     NBVAL is INTEGER array, dimension (NNB)
                     The values of the blocksize NB.

           NNS

                     NNS is INTEGER
                     The number of values of NRHS contained in the vector NSVAL.

           NSVAL

                     NSVAL is INTEGER array, dimension (NNS)
                     The values of the number of right hand sides NRHS.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           A

                     A is DOUBLE PRECISION array, dimension (LA)

           LA

                     LA is INTEGER
                     The length of the array A.  LA >= (KLMAX+KUMAX+1)*NMAX
                     where KLMAX is the largest entry in the local array KLVAL,
                           KUMAX is the largest entry in the local array KUVAL and
                           NMAX is the largest entry in the input array NVAL.

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (LAFAC)

           LAFAC

                     LAFAC is INTEGER
                     The length of the array AFAC. LAFAC >= (2*KLMAX+KUMAX+1)*NMAX
                     where KLMAX is the largest entry in the local array KLVAL,
                           KUMAX is the largest entry in the local array KUVAL and
                           NMAX is the largest entry in the input array NVAL.

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NSMAX)
                     where NSMAX is the largest entry in NSVAL.

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NSMAX,NMAX))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension
                                 (max(NMAX,2*NSMAX))

           IWORK

                     IWORK is INTEGER array, dimension (2*NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dchkge (logical, dimension( * ) DOTYPE, integer NM, integer, dimension( * ) MVAL,
       integer NN, integer, dimension( * ) NVAL, integer NNB, integer, dimension( * ) NBVAL,
       integer NNS, integer, dimension( * ) NSVAL, double precision THRESH, logical TSTERR,
       integer NMAX, double precision, dimension( * ) A, double precision, dimension( * ) AFAC,
       double precision, dimension( * ) AINV, double precision, dimension( * ) B, double
       precision, dimension( * ) X, double precision, dimension( * ) XACT, double precision,
       dimension( * ) WORK, double precision, dimension( * ) RWORK, integer, dimension( * )
       IWORK, integer NOUT)
       DCHKGE

       Purpose:

            DCHKGE tests DGETRF, -TRI, -TRS, -RFS, and -CON.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NM

                     NM is INTEGER
                     The number of values of M contained in the vector MVAL.

           MVAL

                     MVAL is INTEGER array, dimension (NM)
                     The values of the matrix row dimension M.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix column dimension N.

           NNB

                     NNB is INTEGER
                     The number of values of NB contained in the vector NBVAL.

           NBVAL

                     NBVAL is INTEGER array, dimension (NBVAL)
                     The values of the blocksize NB.

           NNS

                     NNS is INTEGER
                     The number of values of NRHS contained in the vector NSVAL.

           NSVAL

                     NSVAL is INTEGER array, dimension (NNS)
                     The values of the number of right hand sides NRHS.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for M or N, used in dimensioning
                     the work arrays.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AINV

                     AINV is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NSMAX)
                     where NSMAX is the largest entry in NSVAL.

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NSMAX))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension
                                 (max(2*NMAX,2*NSMAX+NWORK))

           IWORK

                     IWORK is INTEGER array, dimension (2*NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dchkgt (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNS, integer, dimension( * ) NSVAL, double precision THRESH, logical TSTERR,
       double precision, dimension( * ) A, double precision, dimension( * ) AF, double precision,
       dimension( * ) B, double precision, dimension( * ) X, double precision, dimension( * )
       XACT, double precision, dimension( * ) WORK, double precision, dimension( * ) RWORK,
       integer, dimension( * ) IWORK, integer NOUT)
       DCHKGT

       Purpose:

            DCHKGT tests DGTTRF, -TRS, -RFS, and -CON

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix dimension N.

           NNS

                     NNS is INTEGER
                     The number of values of NRHS contained in the vector NSVAL.

           NSVAL

                     NSVAL is INTEGER array, dimension (NNS)
                     The values of the number of right hand sides NRHS.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*4)

           AF

                     AF is DOUBLE PRECISION array, dimension (NMAX*4)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NSMAX)
                     where NSMAX is the largest entry in NSVAL.

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NSMAX))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension
                                 (max(NMAX,2*NSMAX))

           IWORK

                     IWORK is INTEGER array, dimension (2*NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dchklq (logical, dimension( * ) DOTYPE, integer NM, integer, dimension( * ) MVAL,
       integer NN, integer, dimension( * ) NVAL, integer NNB, integer, dimension( * ) NBVAL,
       integer, dimension( * ) NXVAL, integer NRHS, double precision THRESH, logical TSTERR,
       integer NMAX, double precision, dimension( * ) A, double precision, dimension( * ) AF,
       double precision, dimension( * ) AQ, double precision, dimension( * ) AL, double
       precision, dimension( * ) AC, double precision, dimension( * ) B, double precision,
       dimension( * ) X, double precision, dimension( * ) XACT, double precision, dimension( * )
       TAU, double precision, dimension( * ) WORK, double precision, dimension( * ) RWORK,
       integer NOUT)
       DCHKLQ

       Purpose:

            DCHKLQ tests DGELQF, DORGLQ and DORMLQ.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NM

                     NM is INTEGER
                     The number of values of M contained in the vector MVAL.

           MVAL

                     MVAL is INTEGER array, dimension (NM)
                     The values of the matrix row dimension M.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix column dimension N.

           NNB

                     NNB is INTEGER
                     The number of values of NB and NX contained in the
                     vectors NBVAL and NXVAL.  The blocking parameters are used
                     in pairs (NB,NX).

           NBVAL

                     NBVAL is INTEGER array, dimension (NNB)
                     The values of the blocksize NB.

           NXVAL

                     NXVAL is INTEGER array, dimension (NNB)
                     The values of the crossover point NX.

           NRHS

                     NRHS is INTEGER
                     The number of right hand side vectors to be generated for
                     each linear system.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for M or N, used in dimensioning
                     the work arrays.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AF

                     AF is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AQ

                     AQ is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AL

                     AL is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AC

                     AC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           TAU

                     TAU is DOUBLE PRECISION array, dimension (NMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dchkpb (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNB, integer, dimension( * ) NBVAL, integer NNS, integer, dimension( * ) NSVAL,
       double precision THRESH, logical TSTERR, integer NMAX, double precision, dimension( * ) A,
       double precision, dimension( * ) AFAC, double precision, dimension( * ) AINV, double
       precision, dimension( * ) B, double precision, dimension( * ) X, double precision,
       dimension( * ) XACT, double precision, dimension( * ) WORK, double precision, dimension( *
       ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       DCHKPB

       Purpose:

            DCHKPB tests DPBTRF, -TRS, -RFS, and -CON.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix dimension N.

           NNB

                     NNB is INTEGER
                     The number of values of NB contained in the vector NBVAL.

           NBVAL

                     NBVAL is INTEGER array, dimension (NBVAL)
                     The values of the blocksize NB.

           NNS

                     NNS is INTEGER
                     The number of values of NRHS contained in the vector NSVAL.

           NSVAL

                     NSVAL is INTEGER array, dimension (NNS)
                     The values of the number of right hand sides NRHS.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for N, used in dimensioning the
                     work arrays.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AINV

                     AINV is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NSMAX)
                     where NSMAX is the largest entry in NSVAL.

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NSMAX))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension
                                 (max(NMAX,2*NSMAX))

           IWORK

                     IWORK is INTEGER array, dimension (NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dchkpo (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNB, integer, dimension( * ) NBVAL, integer NNS, integer, dimension( * ) NSVAL,
       double precision THRESH, logical TSTERR, integer NMAX, double precision, dimension( * ) A,
       double precision, dimension( * ) AFAC, double precision, dimension( * ) AINV, double
       precision, dimension( * ) B, double precision, dimension( * ) X, double precision,
       dimension( * ) XACT, double precision, dimension( * ) WORK, double precision, dimension( *
       ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       DCHKPO

       Purpose:

            DCHKPO tests DPOTRF, -TRI, -TRS, -RFS, and -CON

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix dimension N.

           NNB

                     NNB is INTEGER
                     The number of values of NB contained in the vector NBVAL.

           NBVAL

                     NBVAL is INTEGER array, dimension (NBVAL)
                     The values of the blocksize NB.

           NNS

                     NNS is INTEGER
                     The number of values of NRHS contained in the vector NSVAL.

           NSVAL

                     NSVAL is INTEGER array, dimension (NNS)
                     The values of the number of right hand sides NRHS.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for N, used in dimensioning the
                     work arrays.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AINV

                     AINV is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NSMAX)
                     where NSMAX is the largest entry in NSVAL.

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NSMAX))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension
                                 (max(NMAX,2*NSMAX))

           IWORK

                     IWORK is INTEGER array, dimension (NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dchkpp (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNS, integer, dimension( * ) NSVAL, double precision THRESH, logical TSTERR,
       integer NMAX, double precision, dimension( * ) A, double precision, dimension( * ) AFAC,
       double precision, dimension( * ) AINV, double precision, dimension( * ) B, double
       precision, dimension( * ) X, double precision, dimension( * ) XACT, double precision,
       dimension( * ) WORK, double precision, dimension( * ) RWORK, integer, dimension( * )
       IWORK, integer NOUT)
       DCHKPP

       Purpose:

            DCHKPP tests DPPTRF, -TRI, -TRS, -RFS, and -CON

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix dimension N.

           NNS

                     NNS is INTEGER
                     The number of values of NRHS contained in the vector NSVAL.

           NSVAL

                     NSVAL is INTEGER array, dimension (NNS)
                     The values of the number of right hand sides NRHS.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for N, used in dimensioning the
                     work arrays.

           A

                     A is DOUBLE PRECISION array, dimension
                                 (NMAX*(NMAX+1)/2)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension
                                 (NMAX*(NMAX+1)/2)

           AINV

                     AINV is DOUBLE PRECISION array, dimension
                                 (NMAX*(NMAX+1)/2)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NSMAX)
                     where NSMAX is the largest entry in NSVAL.

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NSMAX))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension
                                 (max(NMAX,2*NSMAX))

           IWORK

                     IWORK is INTEGER array, dimension (NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dchkps (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNB, integer, dimension( * ) NBVAL, integer NRANK, integer, dimension( * )
       RANKVAL, double precision THRESH, logical TSTERR, integer NMAX, double precision,
       dimension( * ) A, double precision, dimension( * ) AFAC, double precision, dimension( * )
       PERM, integer, dimension( * ) PIV, double precision, dimension( * ) WORK, double
       precision, dimension( * ) RWORK, integer NOUT)
       DCHKPS

       Purpose:

            DCHKPS tests DPSTRF.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix dimension N.

           NNB

                     NNB is INTEGER
                     The number of values of NB contained in the vector NBVAL.

           NBVAL

                     NBVAL is INTEGER array, dimension (NBVAL)
                     The values of the block size NB.

           NRANK

                     NRANK is INTEGER
                     The number of values of RANK contained in the vector RANKVAL.

           RANKVAL

                     RANKVAL is INTEGER array, dimension (NBVAL)
                     The values of the block size NB.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for N, used in dimensioning the
                     work arrays.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           PERM

                     PERM is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           PIV

                     PIV is INTEGER array, dimension (NMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension (NMAX*3)

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dchkpt (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNS, integer, dimension( * ) NSVAL, double precision THRESH, logical TSTERR,
       double precision, dimension( * ) A, double precision, dimension( * ) D, double precision,
       dimension( * ) E, double precision, dimension( * ) B, double precision, dimension( * ) X,
       double precision, dimension( * ) XACT, double precision, dimension( * ) WORK, double
       precision, dimension( * ) RWORK, integer NOUT)
       DCHKPT

       Purpose:

            DCHKPT tests DPTTRF, -TRS, -RFS, and -CON

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix dimension N.

           NNS

                     NNS is INTEGER
                     The number of values of NRHS contained in the vector NSVAL.

           NSVAL

                     NSVAL is INTEGER array, dimension (NNS)
                     The values of the number of right hand sides NRHS.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*2)

           D

                     D is DOUBLE PRECISION array, dimension (NMAX*2)

           E

                     E is DOUBLE PRECISION array, dimension (NMAX*2)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NSMAX)
                     where NSMAX is the largest entry in NSVAL.

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NSMAX))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension
                                 (max(NMAX,2*NSMAX))

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dchkq3 (logical, dimension( * ) DOTYPE, integer NM, integer, dimension( * ) MVAL,
       integer NN, integer, dimension( * ) NVAL, integer NNB, integer, dimension( * ) NBVAL,
       integer, dimension( * ) NXVAL, double precision THRESH, double precision, dimension( * )
       A, double precision, dimension( * ) COPYA, double precision, dimension( * ) S, double
       precision, dimension( * ) TAU, double precision, dimension( * ) WORK, integer, dimension(
       * ) IWORK, integer NOUT)
       DCHKQ3

       Purpose:

            DCHKQ3 tests DGEQP3.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NM

                     NM is INTEGER
                     The number of values of M contained in the vector MVAL.

           MVAL

                     MVAL is INTEGER array, dimension (NM)
                     The values of the matrix row dimension M.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix column dimension N.

           NNB

                     NNB is INTEGER
                     The number of values of NB and NX contained in the
                     vectors NBVAL and NXVAL.  The blocking parameters are used
                     in pairs (NB,NX).

           NBVAL

                     NBVAL is INTEGER array, dimension (NNB)
                     The values of the blocksize NB.

           NXVAL

                     NXVAL is INTEGER array, dimension (NNB)
                     The values of the crossover point NX.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           A

                     A is DOUBLE PRECISION array, dimension (MMAX*NMAX)
                     where MMAX is the maximum value of M in MVAL and NMAX is the
                     maximum value of N in NVAL.

           COPYA

                     COPYA is DOUBLE PRECISION array, dimension (MMAX*NMAX)

           S

                     S is DOUBLE PRECISION array, dimension
                                 (min(MMAX,NMAX))

           TAU

                     TAU is DOUBLE PRECISION array, dimension (MMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (MMAX*NMAX + 4*NMAX + MMAX)

           IWORK

                     IWORK is INTEGER array, dimension (2*NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dchkql (logical, dimension( * ) DOTYPE, integer NM, integer, dimension( * ) MVAL,
       integer NN, integer, dimension( * ) NVAL, integer NNB, integer, dimension( * ) NBVAL,
       integer, dimension( * ) NXVAL, integer NRHS, double precision THRESH, logical TSTERR,
       integer NMAX, double precision, dimension( * ) A, double precision, dimension( * ) AF,
       double precision, dimension( * ) AQ, double precision, dimension( * ) AL, double
       precision, dimension( * ) AC, double precision, dimension( * ) B, double precision,
       dimension( * ) X, double precision, dimension( * ) XACT, double precision, dimension( * )
       TAU, double precision, dimension( * ) WORK, double precision, dimension( * ) RWORK,
       integer NOUT)
       DCHKQL

       Purpose:

            DCHKQL tests DGEQLF, DORGQL and DORMQL.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NM

                     NM is INTEGER
                     The number of values of M contained in the vector MVAL.

           MVAL

                     MVAL is INTEGER array, dimension (NM)
                     The values of the matrix row dimension M.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix column dimension N.

           NNB

                     NNB is INTEGER
                     The number of values of NB and NX contained in the
                     vectors NBVAL and NXVAL.  The blocking parameters are used
                     in pairs (NB,NX).

           NBVAL

                     NBVAL is INTEGER array, dimension (NNB)
                     The values of the blocksize NB.

           NXVAL

                     NXVAL is INTEGER array, dimension (NNB)
                     The values of the crossover point NX.

           NRHS

                     NRHS is INTEGER
                     The number of right hand side vectors to be generated for
                     each linear system.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for M or N, used in dimensioning
                     the work arrays.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AF

                     AF is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AQ

                     AQ is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AL

                     AL is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AC

                     AC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           TAU

                     TAU is DOUBLE PRECISION array, dimension (NMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2015

   subroutine dchkqr (logical, dimension( * ) DOTYPE, integer NM, integer, dimension( * ) MVAL,
       integer NN, integer, dimension( * ) NVAL, integer NNB, integer, dimension( * ) NBVAL,
       integer, dimension( * ) NXVAL, integer NRHS, double precision THRESH, logical TSTERR,
       integer NMAX, double precision, dimension( * ) A, double precision, dimension( * ) AF,
       double precision, dimension( * ) AQ, double precision, dimension( * ) AR, double
       precision, dimension( * ) AC, double precision, dimension( * ) B, double precision,
       dimension( * ) X, double precision, dimension( * ) XACT, double precision, dimension( * )
       TAU, double precision, dimension( * ) WORK, double precision, dimension( * ) RWORK,
       integer, dimension( * ) IWORK, integer NOUT)
       DCHKQR

       Purpose:

            DCHKQR tests DGEQRF, DORGQR and DORMQR.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NM

                     NM is INTEGER
                     The number of values of M contained in the vector MVAL.

           MVAL

                     MVAL is INTEGER array, dimension (NM)
                     The values of the matrix row dimension M.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix column dimension N.

           NNB

                     NNB is INTEGER
                     The number of values of NB and NX contained in the
                     vectors NBVAL and NXVAL.  The blocking parameters are used
                     in pairs (NB,NX).

           NBVAL

                     NBVAL is INTEGER array, dimension (NNB)
                     The values of the blocksize NB.

           NXVAL

                     NXVAL is INTEGER array, dimension (NNB)
                     The values of the crossover point NX.

           NRHS

                     NRHS is INTEGER
                     The number of right hand side vectors to be generated for
                     each linear system.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for M or N, used in dimensioning
                     the work arrays.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AF

                     AF is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AQ

                     AQ is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AR

                     AR is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AC

                     AC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           TAU

                     TAU is DOUBLE PRECISION array, dimension (NMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (NMAX)

           IWORK

                     IWORK is INTEGER array, dimension (NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2015

   subroutine dchkqrt (double precision THRESH, logical TSTERR, integer NM, integer, dimension( *
       ) MVAL, integer NN, integer, dimension( * ) NVAL, integer NNB, integer, dimension( * )
       NBVAL, integer NOUT)
       DCHKQRT

       Purpose:

            DCHKQRT tests DGEQRT and DGEMQRT.

       Parameters:
           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NM

                     NM is INTEGER
                     The number of values of M contained in the vector MVAL.

           MVAL

                     MVAL is INTEGER array, dimension (NM)
                     The values of the matrix row dimension M.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix column dimension N.

           NNB

                     NNB is INTEGER
                     The number of values of NB contained in the vector NBVAL.

           NBVAL

                     NBVAL is INTEGER array, dimension (NBVAL)
                     The values of the blocksize NB.

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dchkqrtp (double precision THRESH, logical TSTERR, integer NM, integer, dimension(
       * ) MVAL, integer NN, integer, dimension( * ) NVAL, integer NNB, integer, dimension( * )
       NBVAL, integer NOUT)
       DCHKQRTP

       Purpose:

            DCHKQRTP tests DTPQRT and DTPMQRT.

       Parameters:
           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NM

                     NM is INTEGER
                     The number of values of M contained in the vector MVAL.

           MVAL

                     MVAL is INTEGER array, dimension (NM)
                     The values of the matrix row dimension M.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix column dimension N.

           NNB

                     NNB is INTEGER
                     The number of values of NB contained in the vector NBVAL.

           NBVAL

                     NBVAL is INTEGER array, dimension (NBVAL)
                     The values of the blocksize NB.

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   program dchkrfp ()
       DCHKRFP

       Purpose:

            DCHKRFP is the main test program for the DOUBLE PRECISION linear
            equation routines with RFP storage format

             MAXIN   INTEGER
                     The number of different values that can be used for each of
                     M, N, or NB

             MAXRHS  INTEGER
                     The maximum number of right hand sides

             NTYPES  INTEGER

             NMAX    INTEGER
                     The maximum allowable value for N.

             NIN     INTEGER
                     The unit number for input

             NOUT    INTEGER
                     The unit number for output

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           April 2012

   subroutine dchkrq (logical, dimension( * ) DOTYPE, integer NM, integer, dimension( * ) MVAL,
       integer NN, integer, dimension( * ) NVAL, integer NNB, integer, dimension( * ) NBVAL,
       integer, dimension( * ) NXVAL, integer NRHS, double precision THRESH, logical TSTERR,
       integer NMAX, double precision, dimension( * ) A, double precision, dimension( * ) AF,
       double precision, dimension( * ) AQ, double precision, dimension( * ) AR, double
       precision, dimension( * ) AC, double precision, dimension( * ) B, double precision,
       dimension( * ) X, double precision, dimension( * ) XACT, double precision, dimension( * )
       TAU, double precision, dimension( * ) WORK, double precision, dimension( * ) RWORK,
       integer, dimension( * ) IWORK, integer NOUT)
       DCHKRQ

       Purpose:

            DCHKRQ tests DGERQF, DORGRQ and DORMRQ.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NM

                     NM is INTEGER
                     The number of values of M contained in the vector MVAL.

           MVAL

                     MVAL is INTEGER array, dimension (NM)
                     The values of the matrix row dimension M.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix column dimension N.

           NNB

                     NNB is INTEGER
                     The number of values of NB and NX contained in the
                     vectors NBVAL and NXVAL.  The blocking parameters are used
                     in pairs (NB,NX).

           NBVAL

                     NBVAL is INTEGER array, dimension (NNB)
                     The values of the blocksize NB.

           NXVAL

                     NXVAL is INTEGER array, dimension (NNB)
                     The values of the crossover point NX.

           NRHS

                     NRHS is INTEGER
                     The number of right hand side vectors to be generated for
                     each linear system.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for M or N, used in dimensioning
                     the work arrays.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AF

                     AF is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AQ

                     AQ is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AR

                     AR is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AC

                     AC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           TAU

                     TAU is DOUBLE PRECISION array, dimension (NMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (NMAX)

           IWORK

                     IWORK is INTEGER array, dimension (NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dchksp (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNS, integer, dimension( * ) NSVAL, double precision THRESH, logical TSTERR,
       integer NMAX, double precision, dimension( * ) A, double precision, dimension( * ) AFAC,
       double precision, dimension( * ) AINV, double precision, dimension( * ) B, double
       precision, dimension( * ) X, double precision, dimension( * ) XACT, double precision,
       dimension( * ) WORK, double precision, dimension( * ) RWORK, integer, dimension( * )
       IWORK, integer NOUT)
       DCHKSP

       Purpose:

            DCHKSP tests DSPTRF, -TRI, -TRS, -RFS, and -CON

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix dimension N.

           NNS

                     NNS is INTEGER
                     The number of values of NRHS contained in the vector NSVAL.

           NSVAL

                     NSVAL is INTEGER array, dimension (NNS)
                     The values of the number of right hand sides NRHS.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for N, used in dimensioning the
                     work arrays.

           A

                     A is DOUBLE PRECISION array, dimension
                                 (NMAX*(NMAX+1)/2)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension
                                 (NMAX*(NMAX+1)/2)

           AINV

                     AINV is DOUBLE PRECISION array, dimension
                                 (NMAX*(NMAX+1)/2)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NSMAX)
                     where NSMAX is the largest entry in NSVAL.

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(2,NSMAX))

           RWORK

                     RWORK is DOUBLE PRECISION array,
                                            dimension (NMAX+2*NSMAX)

           IWORK

                     IWORK is INTEGER array, dimension (2*NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dchksy (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNB, integer, dimension( * ) NBVAL, integer NNS, integer, dimension( * ) NSVAL,
       double precision THRESH, logical TSTERR, integer NMAX, double precision, dimension( * ) A,
       double precision, dimension( * ) AFAC, double precision, dimension( * ) AINV, double
       precision, dimension( * ) B, double precision, dimension( * ) X, double precision,
       dimension( * ) XACT, double precision, dimension( * ) WORK, double precision, dimension( *
       ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       DCHKSY

       Purpose:

            DCHKSY tests DSYTRF, -TRI2, -TRS, -TRS2, -RFS, and -CON.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix dimension N.

           NNB

                     NNB is INTEGER
                     The number of values of NB contained in the vector NBVAL.

           NBVAL

                     NBVAL is INTEGER array, dimension (NBVAL)
                     The values of the blocksize NB.

           NNS

                     NNS is INTEGER
                     The number of values of NRHS contained in the vector NSVAL.

           NSVAL

                     NSVAL is INTEGER array, dimension (NNS)
                     The values of the number of right hand sides NRHS.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for N, used in dimensioning the
                     work arrays.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AINV

                     AINV is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NSMAX)
                     where NSMAX is the largest entry in NSVAL.

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension (NMAX*max(3,NSMAX))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (max(NMAX,2*NSMAX))

           IWORK

                     IWORK is INTEGER array, dimension (2*NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2013

   subroutine dchksy_rook (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * )
       NVAL, integer NNB, integer, dimension( * ) NBVAL, integer NNS, integer, dimension( * )
       NSVAL, double precision THRESH, logical TSTERR, integer NMAX, double precision, dimension(
       * ) A, double precision, dimension( * ) AFAC, double precision, dimension( * ) AINV,
       double precision, dimension( * ) B, double precision, dimension( * ) X, double precision,
       dimension( * ) XACT, double precision, dimension( * ) WORK, double precision, dimension( *
       ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       DCHKSY_ROOK

       Purpose:

            DCHKSY_ROOK tests DSYTRF_ROOK, -TRI_ROOK, -TRS_ROOK,
            and -CON_ROOK.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix dimension N.

           NNB

                     NNB is INTEGER
                     The number of values of NB contained in the vector NBVAL.

           NBVAL

                     NBVAL is INTEGER array, dimension (NBVAL)
                     The values of the blocksize NB.

           NNS

                     NNS is INTEGER
                     The number of values of NRHS contained in the vector NSVAL.

           NSVAL

                     NSVAL is INTEGER array, dimension (NNS)
                     The values of the number of right hand sides NRHS.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for N, used in dimensioning the
                     work arrays.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AINV

                     AINV is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NSMAX)
                     where NSMAX is the largest entry in NSVAL.

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension (NMAX*max(3,NSMAX))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (max(NMAX,2*NSMAX))

           IWORK

                     IWORK is INTEGER array, dimension (2*NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2015

   subroutine dchktb (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNS, integer, dimension( * ) NSVAL, double precision THRESH, logical TSTERR,
       integer NMAX, double precision, dimension( * ) AB, double precision, dimension( * ) AINV,
       double precision, dimension( * ) B, double precision, dimension( * ) X, double precision,
       dimension( * ) XACT, double precision, dimension( * ) WORK, double precision, dimension( *
       ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       DCHKTB

       Purpose:

            DCHKTB tests DTBTRS, -RFS, and -CON, and DLATBS.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix column dimension N.

           NNS

                     NNS is INTEGER
                     The number of values of NRHS contained in the vector NSVAL.

           NSVAL

                     NSVAL is INTEGER array, dimension (NNS)
                     The values of the number of right hand sides NRHS.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The leading dimension of the work arrays.
                     NMAX >= the maximum value of N in NVAL.

           AB

                     AB is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AINV

                     AINV is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NSMAX)
                     where NSMAX is the largest entry in NSVAL.

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NSMAX))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension
                                 (max(NMAX,2*NSMAX))

           IWORK

                     IWORK is INTEGER array, dimension (NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dchktp (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNS, integer, dimension( * ) NSVAL, double precision THRESH, logical TSTERR,
       integer NMAX, double precision, dimension( * ) AP, double precision, dimension( * ) AINVP,
       double precision, dimension( * ) B, double precision, dimension( * ) X, double precision,
       dimension( * ) XACT, double precision, dimension( * ) WORK, double precision, dimension( *
       ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       DCHKTP

       Purpose:

            DCHKTP tests DTPTRI, -TRS, -RFS, and -CON, and DLATPS

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix column dimension N.

           NNS

                     NNS is INTEGER
                     The number of values of NRHS contained in the vector NSVAL.

           NSVAL

                     NSVAL is INTEGER array, dimension (NNS)
                     The values of the number of right hand sides NRHS.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The leading dimension of the work arrays.  NMAX >= the
                     maximumm value of N in NVAL.

           AP

                     AP is DOUBLE PRECISION array, dimension
                                 (NMAX*(NMAX+1)/2)

           AINVP

                     AINVP is DOUBLE PRECISION array, dimension
                                 (NMAX*(NMAX+1)/2)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NSMAX)
                     where NSMAX is the largest entry in NSVAL.

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NSMAX))

           IWORK

                     IWORK is INTEGER array, dimension (NMAX)

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension
                                 (max(NMAX,2*NSMAX))

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dchktr (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNB, integer, dimension( * ) NBVAL, integer NNS, integer, dimension( * ) NSVAL,
       double precision THRESH, logical TSTERR, integer NMAX, double precision, dimension( * ) A,
       double precision, dimension( * ) AINV, double precision, dimension( * ) B, double
       precision, dimension( * ) X, double precision, dimension( * ) XACT, double precision,
       dimension( * ) WORK, double precision, dimension( * ) RWORK, integer, dimension( * )
       IWORK, integer NOUT)
       DCHKTR

       Purpose:

            DCHKTR tests DTRTRI, -TRS, -RFS, and -CON, and DLATRS

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix column dimension N.

           NNB

                     NNB is INTEGER
                     The number of values of NB contained in the vector NBVAL.

           NBVAL

                     NBVAL is INTEGER array, dimension (NNB)
                     The values of the blocksize NB.

           NNS

                     NNS is INTEGER
                     The number of values of NRHS contained in the vector NSVAL.

           NSVAL

                     NSVAL is INTEGER array, dimension (NNS)
                     The values of the number of right hand sides NRHS.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The leading dimension of the work arrays.
                     NMAX >= the maximum value of N in NVAL.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AINV

                     AINV is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NSMAX)
                     where NSMAX is the largest entry in NSVAL.

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NSMAX))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension
                                 (max(NMAX,2*NSMAX))

           IWORK

                     IWORK is INTEGER array, dimension (NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dchktz (logical, dimension( * ) DOTYPE, integer NM, integer, dimension( * ) MVAL,
       integer NN, integer, dimension( * ) NVAL, double precision THRESH, logical TSTERR, double
       precision, dimension( * ) A, double precision, dimension( * ) COPYA, double precision,
       dimension( * ) S, double precision, dimension( * ) TAU, double precision, dimension( * )
       WORK, integer NOUT)
       DCHKTZ

       Purpose:

            DCHKTZ tests DTZRZF.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NM

                     NM is INTEGER
                     The number of values of M contained in the vector MVAL.

           MVAL

                     MVAL is INTEGER array, dimension (NM)
                     The values of the matrix row dimension M.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix column dimension N.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           A

                     A is DOUBLE PRECISION array, dimension (MMAX*NMAX)
                     where MMAX is the maximum value of M in MVAL and NMAX is the
                     maximum value of N in NVAL.

           COPYA

                     COPYA is DOUBLE PRECISION array, dimension (MMAX*NMAX)

           S

                     S is DOUBLE PRECISION array, dimension
                                 (min(MMAX,NMAX))

           TAU

                     TAU is DOUBLE PRECISION array, dimension (MMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (MMAX*NMAX + 4*NMAX + MMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2015

   subroutine ddrvab (logical, dimension( * ) DOTYPE, integer NM, integer, dimension( * ) MVAL,
       integer NNS, integer, dimension( * ) NSVAL, double precision THRESH, integer NMAX, double
       precision, dimension( * ) A, double precision, dimension( * ) AFAC, double precision,
       dimension( * ) B, double precision, dimension( * ) X, double precision, dimension( * )
       WORK, double precision, dimension( * ) RWORK, real, dimension(*) SWORK, integer,
       dimension( * ) IWORK, integer NOUT)
       DDRVAB

       Purpose:

            DDRVAB tests DSGESV

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NM

                     NM is INTEGER
                     The number of values of M contained in the vector MVAL.

           MVAL

                     MVAL is INTEGER array, dimension (NM)
                     The values of the matrix row dimension M.

           NNS

                     NNS is INTEGER
                     The number of values of NRHS contained in the vector NSVAL.

           NSVAL

                     NSVAL is INTEGER array, dimension (NNS)
                     The values of the number of right hand sides NRHS.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for M or N, used in dimensioning
                     the work arrays.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NSMAX)
                     where NSMAX is the largest entry in NSVAL.

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NSMAX))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension
                                 (max(2*NMAX,2*NSMAX+NWORK))

           SWORK

                     SWORK is REAL array, dimension
                                 (NMAX*(NSMAX+NMAX))

           IWORK

                     IWORK is INTEGER array, dimension
                                 NMAX

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine ddrvac (logical, dimension( * ) DOTYPE, integer NM, integer, dimension( * ) MVAL,
       integer NNS, integer, dimension( * ) NSVAL, double precision THRESH, integer NMAX, double
       precision, dimension( * ) A, double precision, dimension( * ) AFAC, double precision,
       dimension( * ) B, double precision, dimension( * ) X, double precision, dimension( * )
       WORK, double precision, dimension( * ) RWORK, real, dimension(*) SWORK, integer NOUT)
       DDRVAC

       Purpose:

            DDRVAC tests DSPOSV.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NM

                     NM is INTEGER
                     The number of values of N contained in the vector MVAL.

           MVAL

                     MVAL is INTEGER array, dimension (NM)
                     The values of the matrix dimension N.

           NNS

                     NNS is INTEGER
                     The number of values of NRHS contained in the vector NSVAL.

           NSVAL

                     NSVAL is INTEGER array, dimension (NNS)
                     The values of the number of right hand sides NRHS.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for N, used in dimensioning the
                     work arrays.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NSMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NSMAX))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension
                                 (max(2*NMAX,2*NSMAX+NWORK))

           SWORK

                     SWORK is REAL array, dimension
                                 (NMAX*(NSMAX+NMAX))

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine ddrvgb (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, double precision THRESH, logical TSTERR, double precision, dimension( * ) A,
       integer LA, double precision, dimension( * ) AFB, integer LAFB, double precision,
       dimension( * ) ASAV, double precision, dimension( * ) B, double precision, dimension( * )
       BSAV, double precision, dimension( * ) X, double precision, dimension( * ) XACT, double
       precision, dimension( * ) S, double precision, dimension( * ) WORK, double precision,
       dimension( * ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       DDRVGB DDRVGBX

       Purpose:

            DDRVGB tests the driver routines DGBSV and -SVX.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix column dimension N.

           NRHS

                     NRHS is INTEGER
                     The number of right hand side vectors to be generated for
                     each linear system.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           A

                     A is DOUBLE PRECISION array, dimension (LA)

           LA

                     LA is INTEGER
                     The length of the array A.  LA >= (2*NMAX-1)*NMAX
                     where NMAX is the largest entry in NVAL.

           AFB

                     AFB is DOUBLE PRECISION array, dimension (LAFB)

           LAFB

                     LAFB is INTEGER
                     The length of the array AFB.  LAFB >= (3*NMAX-2)*NMAX
                     where NMAX is the largest entry in NVAL.

           ASAV

                     ASAV is DOUBLE PRECISION array, dimension (LA)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           S

                     S is DOUBLE PRECISION array, dimension (2*NMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NRHS,NMAX))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension
                                 (max(NMAX,2*NRHS))

           IWORK

                     IWORK is INTEGER array, dimension (2*NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2015

       Purpose:

            DDRVGB tests the driver routines DGBSV, -SVX, and -SVXX.

            Note that this file is used only when the XBLAS are available,
            otherwise ddrvgb.f defines this subroutine.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix column dimension N.

           NRHS

                     NRHS is INTEGER
                     The number of right hand side vectors to be generated for
                     each linear system.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           A

                     A is DOUBLE PRECISION array, dimension (LA)

           LA

                     LA is INTEGER
                     The length of the array A.  LA >= (2*NMAX-1)*NMAX
                     where NMAX is the largest entry in NVAL.

           AFB

                     AFB is DOUBLE PRECISION array, dimension (LAFB)

           LAFB

                     LAFB is INTEGER
                     The length of the array AFB.  LAFB >= (3*NMAX-2)*NMAX
                     where NMAX is the largest entry in NVAL.

           ASAV

                     ASAV is DOUBLE PRECISION array, dimension (LA)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           S

                     S is DOUBLE PRECISION array, dimension (2*NMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NRHS,NMAX))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension
                                 (max(NMAX,2*NRHS))

           IWORK

                     IWORK is INTEGER array, dimension (2*NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine ddrvge (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, double precision THRESH, logical TSTERR, integer NMAX, double precision,
       dimension( * ) A, double precision, dimension( * ) AFAC, double precision, dimension( * )
       ASAV, double precision, dimension( * ) B, double precision, dimension( * ) BSAV, double
       precision, dimension( * ) X, double precision, dimension( * ) XACT, double precision,
       dimension( * ) S, double precision, dimension( * ) WORK, double precision, dimension( * )
       RWORK, integer, dimension( * ) IWORK, integer NOUT)
       DDRVGE DDRVGEX

       Purpose:

            DDRVGE tests the driver routines DGESV and -SVX.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix column dimension N.

           NRHS

                     NRHS is INTEGER
                     The number of right hand side vectors to be generated for
                     each linear system.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for N, used in dimensioning the
                     work arrays.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           ASAV

                     ASAV is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           S

                     S is DOUBLE PRECISION array, dimension (2*NMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NRHS))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (2*NRHS+NMAX)

           IWORK

                     IWORK is INTEGER array, dimension (2*NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2015

       Purpose:

            DDRVGE tests the driver routines DGESV, -SVX, and -SVXX.

            Note that this file is used only when the XBLAS are available,
            otherwise ddrvge.f defines this subroutine.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix column dimension N.

           NRHS

                     NRHS is INTEGER
                     The number of right hand side vectors to be generated for
                     each linear system.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for N, used in dimensioning the
                     work arrays.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           ASAV

                     ASAV is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           S

                     S is DOUBLE PRECISION array, dimension (2*NMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NRHS))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (2*NRHS+NMAX)

           IWORK

                     IWORK is INTEGER array, dimension (2*NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           April 2012

   subroutine ddrvgt (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, double precision THRESH, logical TSTERR, double precision, dimension( * ) A,
       double precision, dimension( * ) AF, double precision, dimension( * ) B, double precision,
       dimension( * ) X, double precision, dimension( * ) XACT, double precision, dimension( * )
       WORK, double precision, dimension( * ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       DDRVGT

       Purpose:

            DDRVGT tests DGTSV and -SVX.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix dimension N.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides, NRHS >= 0.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*4)

           AF

                     AF is DOUBLE PRECISION array, dimension (NMAX*4)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NRHS))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension
                                 (max(NMAX,2*NRHS))

           IWORK

                     IWORK is INTEGER array, dimension (2*NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine ddrvls (logical, dimension( * ) DOTYPE, integer NM, integer, dimension( * ) MVAL,
       integer NN, integer, dimension( * ) NVAL, integer NNS, integer, dimension( * ) NSVAL,
       integer NNB, integer, dimension( * ) NBVAL, integer, dimension( * ) NXVAL, double
       precision THRESH, logical TSTERR, double precision, dimension( * ) A, double precision,
       dimension( * ) COPYA, double precision, dimension( * ) B, double precision, dimension( * )
       COPYB, double precision, dimension( * ) C, double precision, dimension( * ) S, double
       precision, dimension( * ) COPYS, double precision, dimension( * ) WORK, integer,
       dimension( * ) IWORK, integer NOUT)
       DDRVLS

       Purpose:

            DDRVLS tests the least squares driver routines DGELS, DGELSS, DGELSY,
            and DGELSD.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.
                     The matrix of type j is generated as follows:
                     j=1: A = U*D*V where U and V are random orthogonal matrices
                          and D has random entries (> 0.1) taken from a uniform
                          distribution (0,1). A is full rank.
                     j=2: The same of 1, but A is scaled up.
                     j=3: The same of 1, but A is scaled down.
                     j=4: A = U*D*V where U and V are random orthogonal matrices
                          and D has 3*min(M,N)/4 random entries (> 0.1) taken
                          from a uniform distribution (0,1) and the remaining
                          entries set to 0. A is rank-deficient.
                     j=5: The same of 4, but A is scaled up.
                     j=6: The same of 5, but A is scaled down.

           NM

                     NM is INTEGER
                     The number of values of M contained in the vector MVAL.

           MVAL

                     MVAL is INTEGER array, dimension (NM)
                     The values of the matrix row dimension M.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix column dimension N.

           NNS

                     NNS is INTEGER
                     The number of values of NRHS contained in the vector NSVAL.

           NSVAL

                     NSVAL is INTEGER array, dimension (NNS)
                     The values of the number of right hand sides NRHS.

           NNB

                     NNB is INTEGER
                     The number of values of NB and NX contained in the
                     vectors NBVAL and NXVAL.  The blocking parameters are used
                     in pairs (NB,NX).

           NBVAL

                     NBVAL is INTEGER array, dimension (NNB)
                     The values of the blocksize NB.

           NXVAL

                     NXVAL is INTEGER array, dimension (NNB)
                     The values of the crossover point NX.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           A

                     A is DOUBLE PRECISION array, dimension (MMAX*NMAX)
                     where MMAX is the maximum value of M in MVAL and NMAX is the
                     maximum value of N in NVAL.

           COPYA

                     COPYA is DOUBLE PRECISION array, dimension (MMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (MMAX*NSMAX)
                     where MMAX is the maximum value of M in MVAL and NSMAX is the
                     maximum value of NRHS in NSVAL.

           COPYB

                     COPYB is DOUBLE PRECISION array, dimension (MMAX*NSMAX)

           C

                     C is DOUBLE PRECISION array, dimension (MMAX*NSMAX)

           S

                     S is DOUBLE PRECISION array, dimension
                                 (min(MMAX,NMAX))

           COPYS

                     COPYS is DOUBLE PRECISION array, dimension
                                 (min(MMAX,NMAX))

           WORK

                     WORK is DOUBLE PRECISION array,
                                 dimension (MMAX*NMAX + 4*NMAX + MMAX).

           IWORK

                     IWORK is INTEGER array, dimension (15*NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2015

   subroutine ddrvpb (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, double precision THRESH, logical TSTERR, integer NMAX, double precision,
       dimension( * ) A, double precision, dimension( * ) AFAC, double precision, dimension( * )
       ASAV, double precision, dimension( * ) B, double precision, dimension( * ) BSAV, double
       precision, dimension( * ) X, double precision, dimension( * ) XACT, double precision,
       dimension( * ) S, double precision, dimension( * ) WORK, double precision, dimension( * )
       RWORK, integer, dimension( * ) IWORK, integer NOUT)
       DDRVPB

       Purpose:

            DDRVPB tests the driver routines DPBSV and -SVX.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix dimension N.

           NRHS

                     NRHS is INTEGER
                     The number of right hand side vectors to be generated for
                     each linear system.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for N, used in dimensioning the
                     work arrays.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           ASAV

                     ASAV is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           S

                     S is DOUBLE PRECISION array, dimension (NMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NRHS))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (NMAX+2*NRHS)

           IWORK

                     IWORK is INTEGER array, dimension (NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine ddrvpo (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, double precision THRESH, logical TSTERR, integer NMAX, double precision,
       dimension( * ) A, double precision, dimension( * ) AFAC, double precision, dimension( * )
       ASAV, double precision, dimension( * ) B, double precision, dimension( * ) BSAV, double
       precision, dimension( * ) X, double precision, dimension( * ) XACT, double precision,
       dimension( * ) S, double precision, dimension( * ) WORK, double precision, dimension( * )
       RWORK, integer, dimension( * ) IWORK, integer NOUT)
       DDRVPO DDRVPOX

       Purpose:

            DDRVPO tests the driver routines DPOSV and -SVX.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix dimension N.

           NRHS

                     NRHS is INTEGER
                     The number of right hand side vectors to be generated for
                     each linear system.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for N, used in dimensioning the
                     work arrays.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           ASAV

                     ASAV is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           S

                     S is DOUBLE PRECISION array, dimension (NMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NRHS))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (NMAX+2*NRHS)

           IWORK

                     IWORK is INTEGER array, dimension (NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

       Purpose:

            DDRVPO tests the driver routines DPOSV, -SVX, and -SVXX.

            Note that this file is used only when the XBLAS are available,
            otherwise ddrvpo.f defines this subroutine.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix dimension N.

           NRHS

                     NRHS is INTEGER
                     The number of right hand side vectors to be generated for
                     each linear system.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for N, used in dimensioning the
                     work arrays.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           ASAV

                     ASAV is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           S

                     S is DOUBLE PRECISION array, dimension (NMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NRHS))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (NMAX+2*NRHS)

           IWORK

                     IWORK is INTEGER array, dimension (NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2013

   subroutine ddrvpp (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, double precision THRESH, logical TSTERR, integer NMAX, double precision,
       dimension( * ) A, double precision, dimension( * ) AFAC, double precision, dimension( * )
       ASAV, double precision, dimension( * ) B, double precision, dimension( * ) BSAV, double
       precision, dimension( * ) X, double precision, dimension( * ) XACT, double precision,
       dimension( * ) S, double precision, dimension( * ) WORK, double precision, dimension( * )
       RWORK, integer, dimension( * ) IWORK, integer NOUT)
       DDRVPP

       Purpose:

            DDRVPP tests the driver routines DPPSV and -SVX.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix dimension N.

           NRHS

                     NRHS is INTEGER
                     The number of right hand side vectors to be generated for
                     each linear system.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for N, used in dimensioning the
                     work arrays.

           A

                     A is DOUBLE PRECISION array, dimension
                                 (NMAX*(NMAX+1)/2)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension
                                 (NMAX*(NMAX+1)/2)

           ASAV

                     ASAV is DOUBLE PRECISION array, dimension
                                 (NMAX*(NMAX+1)/2)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           S

                     S is DOUBLE PRECISION array, dimension (NMAX)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NRHS))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (NMAX+2*NRHS)

           IWORK

                     IWORK is INTEGER array, dimension (NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine ddrvpt (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, double precision THRESH, logical TSTERR, double precision, dimension( * ) A,
       double precision, dimension( * ) D, double precision, dimension( * ) E, double precision,
       dimension( * ) B, double precision, dimension( * ) X, double precision, dimension( * )
       XACT, double precision, dimension( * ) WORK, double precision, dimension( * ) RWORK,
       integer NOUT)
       DDRVPT

       Purpose:

            DDRVPT tests DPTSV and -SVX.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix dimension N.

           NRHS

                     NRHS is INTEGER
                     The number of right hand side vectors to be generated for
                     each linear system.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*2)

           D

                     D is DOUBLE PRECISION array, dimension (NMAX*2)

           E

                     E is DOUBLE PRECISION array, dimension (NMAX*2)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(3,NRHS))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension
                                 (max(NMAX,2*NRHS))

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine ddrvrf1 (integer NOUT, integer NN, integer, dimension( nn ) NVAL, double precision
       THRESH, double precision, dimension( lda, * ) A, integer LDA, double precision, dimension(
       * ) ARF, double precision, dimension( * ) WORK)
       DDRVRF1

       Purpose:

            DDRVRF1 tests the LAPACK RFP routines:
                DLANSF

       Parameters:
           NOUT

                     NOUT is INTEGER
                           The unit number for output.

           NN

                     NN is INTEGER
                           The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                           The values of the matrix dimension N.

           THRESH

                     THRESH is DOUBLE PRECISION
                           The threshold value for the test ratios.  A result is
                           included in the output file if RESULT >= THRESH.  To have
                           every test ratio printed, use THRESH = 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,NMAX)

           LDA

                     LDA is INTEGER
                           The leading dimension of the array A.  LDA >= max(1,NMAX).

           ARF

                     ARF is DOUBLE PRECISION array, dimension ((NMAX*(NMAX+1))/2).

           WORK

                     WORK is DOUBLE PRECISION array, dimension ( NMAX )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine ddrvrf2 (integer NOUT, integer NN, integer, dimension( nn ) NVAL, double precision,
       dimension( lda, * ) A, integer LDA, double precision, dimension( * ) ARF, double
       precision, dimension(*) AP, double precision, dimension( lda, * ) ASAV)
       DDRVRF2

       Purpose:

            DDRVRF2 tests the LAPACK RFP convertion routines.

       Parameters:
           NOUT

                     NOUT is INTEGER
                           The unit number for output.

           NN

                     NN is INTEGER
                           The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                           The values of the matrix dimension N.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,NMAX)

           LDA

                     LDA is INTEGER
                           The leading dimension of the array A.  LDA >= max(1,NMAX).

           ARF

                     ARF is DOUBLE PRECISION array, dimension ((NMAX*(NMAX+1))/2).

           AP

                     AP is DOUBLE PRECISION array, dimension ((NMAX*(NMAX+1))/2).

           ASAV

                     ASAV is DOUBLE PRECISION array, dimension (LDA,NMAX)

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine ddrvrf3 (integer NOUT, integer NN, integer, dimension( nn ) NVAL, double precision
       THRESH, double precision, dimension( lda, * ) A, integer LDA, double precision, dimension(
       * ) ARF, double precision, dimension( lda, * ) B1, double precision, dimension( lda, * )
       B2, double precision, dimension( * ) D_WORK_DLANGE, double precision, dimension( * )
       D_WORK_DGEQRF, double precision, dimension( * ) TAU)
       DDRVRF3

       Purpose:

            DDRVRF3 tests the LAPACK RFP routines:
                DTFSM

       Parameters:
           NOUT

                     NOUT is INTEGER
                           The unit number for output.

           NN

                     NN is INTEGER
                           The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                           The values of the matrix dimension N.

           THRESH

                     THRESH is DOUBLE PRECISION
                           The threshold value for the test ratios.  A result is
                           included in the output file if RESULT >= THRESH.  To have
                           every test ratio printed, use THRESH = 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,NMAX)

           LDA

                     LDA is INTEGER
                           The leading dimension of the array A.  LDA >= max(1,NMAX).

           ARF

                     ARF is DOUBLE PRECISION array, dimension ((NMAX*(NMAX+1))/2).

           B1

                     B1 is DOUBLE PRECISION array, dimension (LDA,NMAX)

           B2

                     B2 is DOUBLE PRECISION array, dimension (LDA,NMAX)

           D_WORK_DLANGE

                     D_WORK_DLANGE is DOUBLE PRECISION array, dimension (NMAX)

           D_WORK_DGEQRF

                     D_WORK_DGEQRF is DOUBLE PRECISION array, dimension (NMAX)

           TAU

                     TAU is DOUBLE PRECISION array, dimension (NMAX)

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine ddrvrf4 (integer NOUT, integer NN, integer, dimension( nn ) NVAL, double precision
       THRESH, double precision, dimension( ldc, * ) C1, double precision, dimension( ldc, *) C2,
       integer LDC, double precision, dimension( * ) CRF, double precision, dimension( lda, * )
       A, integer LDA, double precision, dimension( * ) D_WORK_DLANGE)
       DDRVRF4

       Purpose:

            DDRVRF4 tests the LAPACK RFP routines:
                DSFRK

       Parameters:
           NOUT

                     NOUT is INTEGER
                           The unit number for output.

           NN

                     NN is INTEGER
                           The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                           The values of the matrix dimension N.

           THRESH

                     THRESH is DOUBLE PRECISION
                           The threshold value for the test ratios.  A result is
                           included in the output file if RESULT >= THRESH.  To
                           have every test ratio printed, use THRESH = 0.

           C1

                     C1 is DOUBLE PRECISION array,
                           dimension (LDC,NMAX)

           C2

                     C2 is DOUBLE PRECISION array,
                           dimension (LDC,NMAX)

           LDC

                     LDC is INTEGER
                           The leading dimension of the array A.
                           LDA >= max(1,NMAX).

           CRF

                     CRF is DOUBLE PRECISION array,
                           dimension ((NMAX*(NMAX+1))/2).

           A

                     A is DOUBLE PRECISION array,
                           dimension (LDA,NMAX)

           LDA

                     LDA is INTEGER
                           The leading dimension of the array A.  LDA >= max(1,NMAX).

           D_WORK_DLANGE

                     D_WORK_DLANGE is DOUBLE PRECISION array, dimension (NMAX)

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine ddrvrfp (integer NOUT, integer NN, integer, dimension( nn ) NVAL, integer NNS,
       integer, dimension( nns ) NSVAL, integer NNT, integer, dimension( nnt ) NTVAL, double
       precision THRESH, double precision, dimension( * ) A, double precision, dimension( * )
       ASAV, double precision, dimension( * ) AFAC, double precision, dimension( * ) AINV, double
       precision, dimension( * ) B, double precision, dimension( * ) BSAV, double precision,
       dimension( * ) XACT, double precision, dimension( * ) X, double precision, dimension( * )
       ARF, double precision, dimension( * ) ARFINV, double precision, dimension( * )
       D_WORK_DLATMS, double precision, dimension( * ) D_WORK_DPOT01, double precision,
       dimension( * ) D_TEMP_DPOT02, double precision, dimension( * ) D_TEMP_DPOT03, double
       precision, dimension( * ) D_WORK_DLANSY, double precision, dimension( * ) D_WORK_DPOT02,
       double precision, dimension( * ) D_WORK_DPOT03)
       DDRVRFP

       Purpose:

            DDRVRFP tests the LAPACK RFP routines:
                DPFTRF, DPFTRS, and DPFTRI.

            This testing routine follow the same tests as DDRVPO (test for the full
            format Symmetric Positive Definite solver).

            The tests are performed in Full Format, convertion back and forth from
            full format to RFP format are performed using the routines DTRTTF and
            DTFTTR.

            First, a specific matrix A of size N is created. There is nine types of
            different matrixes possible.
             1. Diagonal                        6. Random, CNDNUM = sqrt(0.1/EPS)
             2. Random, CNDNUM = 2              7. Random, CNDNUM = 0.1/EPS
            *3. First row and column zero       8. Scaled near underflow
            *4. Last row and column zero        9. Scaled near overflow
            *5. Middle row and column zero
            (* - tests error exits from DPFTRF, no test ratios are computed)
            A solution XACT of size N-by-NRHS is created and the associated right
            hand side B as well. Then DPFTRF is called to compute L (or U), the
            Cholesky factor of A. Then L (or U) is used to solve the linear system
            of equations AX = B. This gives X. Then L (or U) is used to compute the
            inverse of A, AINV. The following four tests are then performed:
            (1) norm( L*L' - A ) / ( N * norm(A) * EPS ) or
                norm( U'*U - A ) / ( N * norm(A) * EPS ),
            (2) norm(B - A*X) / ( norm(A) * norm(X) * EPS ),
            (3) norm( I - A*AINV ) / ( N * norm(A) * norm(AINV) * EPS ),
            (4) ( norm(X-XACT) * RCOND ) / ( norm(XACT) * EPS ),
            where EPS is the machine precision, RCOND the condition number of A, and
            norm( . ) the 1-norm for (1,2,3) and the inf-norm for (4).
            Errors occur when INFO parameter is not as expected. Failures occur when
            a test ratios is greater than THRES.

       Parameters:
           NOUT

                     NOUT is INTEGER
                           The unit number for output.

           NN

                     NN is INTEGER
                           The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                           The values of the matrix dimension N.

           NNS

                     NNS is INTEGER
                           The number of values of NRHS contained in the vector NSVAL.

           NSVAL

                     NSVAL is INTEGER array, dimension (NNS)
                           The values of the number of right-hand sides NRHS.

           NNT

                     NNT is INTEGER
                           The number of values of MATRIX TYPE contained in the vector NTVAL.

           NTVAL

                     NTVAL is INTEGER array, dimension (NNT)
                           The values of matrix type (between 0 and 9 for PO/PP/PF matrices).

           THRESH

                     THRESH is DOUBLE PRECISION
                           The threshold value for the test ratios.  A result is
                           included in the output file if RESULT >= THRESH.  To have
                           every test ratio printed, use THRESH = 0.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           ASAV

                     ASAV is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AINV

                     AINV is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*MAXRHS)

           BSAV

                     BSAV is DOUBLE PRECISION array, dimension (NMAX*MAXRHS)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*MAXRHS)

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*MAXRHS)

           ARF

                     ARF is DOUBLE PRECISION array, dimension ((NMAX*(NMAX+1))/2)

           ARFINV

                     ARFINV is DOUBLE PRECISION array, dimension ((NMAX*(NMAX+1))/2)

           D_WORK_DLATMS

                     D_WORK_DLATMS is DOUBLE PRECISION array, dimension ( 3*NMAX )

           D_WORK_DPOT01

                     D_WORK_DPOT01 is DOUBLE PRECISION array, dimension ( NMAX )

           D_TEMP_DPOT02

                     D_TEMP_DPOT02 is DOUBLE PRECISION array, dimension ( NMAX*MAXRHS )

           D_TEMP_DPOT03

                     D_TEMP_DPOT03 is DOUBLE PRECISION array, dimension ( NMAX*NMAX )

           D_WORK_DLATMS

                     D_WORK_DLATMS is DOUBLE PRECISION array, dimension ( NMAX )

           D_WORK_DLANSY

                     D_WORK_DLANSY is DOUBLE PRECISION array, dimension ( NMAX )

           D_WORK_DPOT02

                     D_WORK_DPOT02 is DOUBLE PRECISION array, dimension ( NMAX )

           D_WORK_DPOT03

                     D_WORK_DPOT03 is DOUBLE PRECISION array, dimension ( NMAX )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2013

   subroutine ddrvsp (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, double precision THRESH, logical TSTERR, integer NMAX, double precision,
       dimension( * ) A, double precision, dimension( * ) AFAC, double precision, dimension( * )
       AINV, double precision, dimension( * ) B, double precision, dimension( * ) X, double
       precision, dimension( * ) XACT, double precision, dimension( * ) WORK, double precision,
       dimension( * ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       DDRVSP

       Purpose:

            DDRVSP tests the driver routines DSPSV and -SVX.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix dimension N.

           NRHS

                     NRHS is INTEGER
                     The number of right hand side vectors to be generated for
                     each linear system.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for N, used in dimensioning the
                     work arrays.

           A

                     A is DOUBLE PRECISION array, dimension
                                 (NMAX*(NMAX+1)/2)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension
                                 (NMAX*(NMAX+1)/2)

           AINV

                     AINV is DOUBLE PRECISION array, dimension
                                 (NMAX*(NMAX+1)/2)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(2,NRHS))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (NMAX+2*NRHS)

           IWORK

                     IWORK is INTEGER array, dimension (2*NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine ddrvsy (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, double precision THRESH, logical TSTERR, integer NMAX, double precision,
       dimension( * ) A, double precision, dimension( * ) AFAC, double precision, dimension( * )
       AINV, double precision, dimension( * ) B, double precision, dimension( * ) X, double
       precision, dimension( * ) XACT, double precision, dimension( * ) WORK, double precision,
       dimension( * ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       DDRVSY DDRVSYX

       Purpose:

            DDRVSY tests the driver routines DSYSV and -SVX.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix dimension N.

           NRHS

                     NRHS is INTEGER
                     The number of right hand side vectors to be generated for
                     each linear system.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for N, used in dimensioning the
                     work arrays.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AINV

                     AINV is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           WORK

                     WORK is DOUBLE PRECISION array, dimension (NMAX*max(2,NRHS))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (NMAX+2*NRHS)

           IWORK

                     IWORK is INTEGER array, dimension (2*NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2013

       Purpose:

            DDRVSY tests the driver routines DSYSV, -SVX, and -SVXX.

            Note that this file is used only when the XBLAS are available,
            otherwise ddrvsy.f defines this subroutine.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix dimension N.

           NRHS

                     NRHS is INTEGER
                     The number of right hand side vectors to be generated for
                     each linear system.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for N, used in dimensioning the
                     work arrays.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AINV

                     AINV is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           WORK

                     WORK is DOUBLE PRECISION array, dimension
                                 (NMAX*max(2,NRHS))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (NMAX+2*NRHS)

           IWORK

                     IWORK is INTEGER array, dimension (2*NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine ddrvsy_rook (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * )
       NVAL, integer NRHS, double precision THRESH, logical TSTERR, integer NMAX, double
       precision, dimension( * ) A, double precision, dimension( * ) AFAC, double precision,
       dimension( * ) AINV, double precision, dimension( * ) B, double precision, dimension( * )
       X, double precision, dimension( * ) XACT, double precision, dimension( * ) WORK, double
       precision, dimension( * ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       DDRVSY_ROOK

       Purpose:

            DDRVSY_ROOK tests the driver routines DSYSV_ROOK.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix dimension N.

           NRHS

                     NRHS is INTEGER
                     The number of right hand side vectors to be generated for
                     each linear system.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for N, used in dimensioning the
                     work arrays.

           A

                     A is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           AINV

                     AINV is DOUBLE PRECISION array, dimension (NMAX*NMAX)

           B

                     B is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           X

                     X is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           XACT

                     XACT is DOUBLE PRECISION array, dimension (NMAX*NRHS)

           WORK

                     WORK is DOUBLE PRECISION array, dimension (NMAX*max(2,NRHS))

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (NMAX+2*NRHS)

           IWORK

                     IWORK is INTEGER array, dimension (2*NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2013

   subroutine debchvxx (double precision THRESH, character*3 PATH)
       DEBCHVXX

       Purpose:

             DEBCHVXX will run D**SVXX on a series of Hilbert matrices and then
             compare the error bounds returned by D**SVXX to see if the returned
             answer indeed falls within those bounds.

             Eight test ratios will be computed.  The tests will pass if they are .LT.
             THRESH.  There are two cases that are determined by 1 / (SQRT( N ) * EPS).
             If that value is .LE. to the component wise reciprocal condition number,
             it uses the guaranteed case, other wise it uses the unguaranteed case.

             Test ratios:
                Let Xc be X_computed and Xt be X_truth.
                The norm used is the infinity norm.

                Let A be the guaranteed case and B be the unguaranteed case.

                  1. Normwise guaranteed forward error bound.
                  A: norm ( abs( Xc - Xt ) / norm ( Xt ) .LE. ERRBND( *, nwise_i, bnd_i ) and
                     ERRBND( *, nwise_i, bnd_i ) .LE. MAX(SQRT(N),10) * EPS.
                     If these conditions are met, the test ratio is set to be
                     ERRBND( *, nwise_i, bnd_i ) / MAX(SQRT(N), 10).  Otherwise it is 1/EPS.
                  B: For this case, CGESVXX should just return 1.  If it is less than
                     one, treat it the same as in 1A.  Otherwise it fails. (Set test
                     ratio to ERRBND( *, nwise_i, bnd_i ) * THRESH?)

                  2. Componentwise guaranteed forward error bound.
                  A: norm ( abs( Xc(j) - Xt(j) ) ) / norm (Xt(j)) .LE. ERRBND( *, cwise_i, bnd_i )
                     for all j .AND. ERRBND( *, cwise_i, bnd_i ) .LE. MAX(SQRT(N), 10) * EPS.
                     If these conditions are met, the test ratio is set to be
                     ERRBND( *, cwise_i, bnd_i ) / MAX(SQRT(N), 10).  Otherwise it is 1/EPS.
                  B: Same as normwise test ratio.

                  3. Backwards error.
                  A: The test ratio is set to BERR/EPS.
                  B: Same test ratio.

                  4. Reciprocal condition number.
                  A: A condition number is computed with Xt and compared with the one
                     returned from CGESVXX.  Let RCONDc be the RCOND returned by D**SVXX
                     and RCONDt be the RCOND from the truth value.  Test ratio is set to
                     MAX(RCONDc/RCONDt, RCONDt/RCONDc).
                  B: Test ratio is set to 1 / (EPS * RCONDc).

                  5. Reciprocal normwise condition number.
                  A: The test ratio is set to
                     MAX(ERRBND( *, nwise_i, cond_i ) / NCOND, NCOND / ERRBND( *, nwise_i, cond_i )).
                  B: Test ratio is set to 1 / (EPS * ERRBND( *, nwise_i, cond_i )).

                  6. Reciprocal componentwise condition number.
                  A: Test ratio is set to
                     MAX(ERRBND( *, cwise_i, cond_i ) / CCOND, CCOND / ERRBND( *, cwise_i, cond_i )).
                  B: Test ratio is set to 1 / (EPS * ERRBND( *, cwise_i, cond_i )).

                .. Parameters ..
                NMAX is determined by the largest number in the inverse of the hilbert
                matrix.  Precision is exhausted when the largest entry in it is greater
                than 2 to the power of the number of bits in the fraction of the data
                type used plus one, which is 24 for single precision.
                NMAX should be 6 for single and 11 for double.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine derrab (integer NUNIT)
       DERRAB

       Purpose:

            DERRAB tests the error exits for DSGESV.

       Parameters:
           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine derrac (integer NUNIT)
       DERRAC

       Purpose:

            DERRAC tests the error exits for DSPOSV.

       Parameters:
           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine derrge (character*3 PATH, integer NUNIT)
       DERRGE DERRGEX

       Purpose:

            DERRGE tests the error exits for the DOUBLE PRECISION routines
            for general matrices.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name for the routines to be tested.

           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

       Purpose:

            DERRGE tests the error exits for the DOUBLE PRECISION routines
            for general matrices.

            Note that this file is used only when the XBLAS are available,
            otherwise derrge.f defines this subroutine.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name for the routines to be tested.

           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine derrgt (character*3 PATH, integer NUNIT)
       DERRGT

       Purpose:

            DERRGT tests the error exits for the DOUBLE PRECISION tridiagonal
            routines.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name for the routines to be tested.

           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine derrlq (character*3 PATH, integer NUNIT)
       DERRLQ

       Purpose:

            DERRLQ tests the error exits for the DOUBLE PRECISION routines
            that use the LQ decomposition of a general matrix.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name for the routines to be tested.

           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine derrls (character*3 PATH, integer NUNIT)
       DERRLS

       Purpose:

            DERRLS tests the error exits for the DOUBLE PRECISION least squares
            driver routines (DGELS, SGELSS, SGELSY, SGELSD).

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name for the routines to be tested.

           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2015

   subroutine derrpo (character*3 PATH, integer NUNIT)
       DERRPO DERRPOX

       Purpose:

            DERRPO tests the error exits for the DOUBLE PRECISION routines
            for symmetric positive definite matrices.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name for the routines to be tested.

           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

       Purpose:

            DERRPO tests the error exits for the DOUBLE PRECISION routines
            for symmetric positive definite matrices.

            Note that this file is used only when the XBLAS are available,
            otherwise derrpo.f defines this subroutine.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name for the routines to be tested.

           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2015

   subroutine derrps (character*3 PATH, integer NUNIT)
       DERRPS

       Purpose:

            DERRPS tests the error exits for the DOUBLE PRECISION routines
            for DPSTRF.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name for the routines to be tested.

           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine derrql (character*3 PATH, integer NUNIT)
       DERRQL

       Purpose:

            DERRQL tests the error exits for the DOUBLE PRECISION routines
            that use the QL decomposition of a general matrix.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name for the routines to be tested.

           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine derrqp (character*3 PATH, integer NUNIT)
       DERRQP

       Purpose:

            DERRQP tests the error exits for DGEQP3.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name for the routines to be tested.

           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2015

   subroutine derrqr (character*3 PATH, integer NUNIT)
       DERRQR

       Purpose:

            DERRQR tests the error exits for the DOUBLE PRECISION routines
            that use the QR decomposition of a general matrix.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name for the routines to be tested.

           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine derrqrt (character*3 PATH, integer NUNIT)
       DERRQRT

       Purpose:

            DERRQRT tests the error exits for the DOUBLE PRECISION routines
            that use the QRT decomposition of a general matrix.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name for the routines to be tested.

           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine derrqrtp (character*3 PATH, integer NUNIT)
       DERRQRTP

       Purpose:

            DERRQRTP tests the error exits for the REAL routines
            that use the QRT decomposition of a triangular-pentagonal matrix.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name for the routines to be tested.

           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine derrrfp (integer NUNIT)
       DERRRFP

       Purpose:

            DERRRFP tests the error exits for the DOUBLE PRECISION driver routines
            for solving linear systems of equations.

            DDRVRFP tests the DOUBLE PRECISION LAPACK RFP routines:
                DTFSM, DTFTRI, DSFRK, DTFTTP, DTFTTR, DPFTRF, DPFTRS, DTPTTF,
                DTPTTR, DTRTTF, and DTRTTP

       Parameters:
           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine derrrq (character*3 PATH, integer NUNIT)
       DERRRQ

       Purpose:

            DERRRQ tests the error exits for the DOUBLE PRECISION routines
            that use the RQ decomposition of a general matrix.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name for the routines to be tested.

           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine derrsy (character*3 PATH, integer NUNIT)
       DERRSY DERRSYX

       Purpose:

            DERRSY tests the error exits for the DOUBLE PRECISION routines
            for symmetric indefinite matrices.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name for the routines to be tested.

           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2015

       Purpose:

            DERRSY tests the error exits for the DOUBLE PRECISION routines
            for symmetric indefinite matrices.

            Note that this file is used only when the XBLAS are available,
            otherwise derrsy.f defines this subroutine.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name for the routines to be tested.

           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2015

   subroutine derrtr (character*3 PATH, integer NUNIT)
       DERRTR

       Purpose:

            DERRTR tests the error exits for the DOUBLE PRECISION triangular
            routines.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name for the routines to be tested.

           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine derrtz (character*3 PATH, integer NUNIT)
       DERRTZ

       Purpose:

            DERRTZ tests the error exits for STZRZF.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name for the routines to be tested.

           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2015

   subroutine derrvx (character*3 PATH, integer NUNIT)
       DERRVX DERRVXX

       Purpose:

            DERRVX tests the error exits for the DOUBLE PRECISION driver routines
            for solving linear systems of equations.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name for the routines to be tested.

           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           April 2012

       Purpose:

            DERRVX tests the error exits for the DOUBLE PRECISION driver routines
            for solving linear systems of equations.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name for the routines to be tested.

           NUNIT

                     NUNIT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2015

   subroutine dgbt01 (integer M, integer N, integer KL, integer KU, double precision, dimension(
       lda, * ) A, integer LDA, double precision, dimension( ldafac, * ) AFAC, integer LDAFAC,
       integer, dimension( * ) IPIV, double precision, dimension( * ) WORK, double precision
       RESID)
       DGBT01

       Purpose:

            DGBT01 reconstructs a band matrix  A  from its L*U factorization and
            computes the residual:
               norm(L*U - A) / ( N * norm(A) * EPS ),
            where EPS is the machine epsilon.

            The expression L*U - A is computed one column at a time, so A and
            AFAC are not modified.

       Parameters:
           M

                     M is INTEGER
                     The number of rows of the matrix A.  M >= 0.

           N

                     N is INTEGER
                     The number of columns of the matrix A.  N >= 0.

           KL

                     KL is INTEGER
                     The number of subdiagonals within the band of A.  KL >= 0.

           KU

                     KU is INTEGER
                     The number of superdiagonals within the band of A.  KU >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The original matrix A in band storage, stored in rows 1 to
                     KL+KU+1.

           LDA

                     LDA is INTEGER.
                     The leading dimension of the array A.  LDA >= max(1,KL+KU+1).

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (LDAFAC,N)
                     The factored form of the matrix A.  AFAC contains the banded
                     factors L and U from the L*U factorization, as computed by
                     DGBTRF.  U is stored as an upper triangular band matrix with
                     KL+KU superdiagonals in rows 1 to KL+KU+1, and the
                     multipliers used during the factorization are stored in rows
                     KL+KU+2 to 2*KL+KU+1.  See DGBTRF for further details.

           LDAFAC

                     LDAFAC is INTEGER
                     The leading dimension of the array AFAC.
                     LDAFAC >= max(1,2*KL*KU+1).

           IPIV

                     IPIV is INTEGER array, dimension (min(M,N))
                     The pivot indices from DGBTRF.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (2*KL+KU+1)

           RESID

                     RESID is DOUBLE PRECISION
                     norm(L*U - A) / ( N * norm(A) * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dgbt02 (character TRANS, integer M, integer N, integer KL, integer KU, integer
       NRHS, double precision, dimension( lda, * ) A, integer LDA, double precision, dimension(
       ldx, * ) X, integer LDX, double precision, dimension( ldb, * ) B, integer LDB, double
       precision RESID)
       DGBT02

       Purpose:

            DGBT02 computes the residual for a solution of a banded system of
            equations  A*x = b  or  A'*x = b:
               RESID = norm( B - A*X ) / ( norm(A) * norm(X) * EPS).
            where EPS is the machine precision.

       Parameters:
           TRANS

                     TRANS is CHARACTER*1
                     Specifies the form of the system of equations:
                     = 'N':  A *x = b
                     = 'T':  A'*x = b, where A' is the transpose of A
                     = 'C':  A'*x = b, where A' is the transpose of A

           M

                     M is INTEGER
                     The number of rows of the matrix A.  M >= 0.

           N

                     N is INTEGER
                     The number of columns of the matrix A.  N >= 0.

           KL

                     KL is INTEGER
                     The number of subdiagonals within the band of A.  KL >= 0.

           KU

                     KU is INTEGER
                     The number of superdiagonals within the band of A.  KU >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of B.  NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The original matrix A in band storage, stored in rows 1 to
                     KL+KU+1.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,KL+KU+1).

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors for the system of linear
                     equations.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  If TRANS = 'N',
                     LDX >= max(1,N); if TRANS = 'T' or 'C', LDX >= max(1,M).

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     On entry, the right hand side vectors for the system of
                     linear equations.
                     On exit, B is overwritten with the difference B - A*X.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  IF TRANS = 'N',
                     LDB >= max(1,M); if TRANS = 'T' or 'C', LDB >= max(1,N).

           RESID

                     RESID is DOUBLE PRECISION
                     The maximum over the number of right hand sides of
                     norm(B - A*X) / ( norm(A) * norm(X) * EPS ).

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dgbt05 (character TRANS, integer N, integer KL, integer KU, integer NRHS, double
       precision, dimension( ldab, * ) AB, integer LDAB, double precision, dimension( ldb, * ) B,
       integer LDB, double precision, dimension( ldx, * ) X, integer LDX, double precision,
       dimension( ldxact, * ) XACT, integer LDXACT, double precision, dimension( * ) FERR, double
       precision, dimension( * ) BERR, double precision, dimension( * ) RESLTS)
       DGBT05

       Purpose:

            DGBT05 tests the error bounds from iterative refinement for the
            computed solution to a system of equations op(A)*X = B, where A is a
            general band matrix of order n with kl subdiagonals and ku
            superdiagonals and op(A) = A or A**T, depending on TRANS.

            RESLTS(1) = test of the error bound
                      = norm(X - XACT) / ( norm(X) * FERR )

            A large value is returned if this ratio is not less than one.

            RESLTS(2) = residual from the iterative refinement routine
                      = the maximum of BERR / ( NZ*EPS + (*) ), where
                        (*) = NZ*UNFL / (min_i (abs(op(A))*abs(X) +abs(b))_i )
                        and NZ = max. number of nonzeros in any row of A, plus 1

       Parameters:
           TRANS

                     TRANS is CHARACTER*1
                     Specifies the form of the system of equations.
                     = 'N':  A * X = B     (No transpose)
                     = 'T':  A**T * X = B  (Transpose)
                     = 'C':  A**H * X = B  (Conjugate transpose = Transpose)

           N

                     N is INTEGER
                     The number of rows of the matrices X, B, and XACT, and the
                     order of the matrix A.  N >= 0.

           KL

                     KL is INTEGER
                     The number of subdiagonals within the band of A.  KL >= 0.

           KU

                     KU is INTEGER
                     The number of superdiagonals within the band of A.  KU >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of the matrices X, B, and XACT.
                     NRHS >= 0.

           AB

                     AB is DOUBLE PRECISION array, dimension (LDAB,N)
                     The original band matrix A, stored in rows 1 to KL+KU+1.
                     The j-th column of A is stored in the j-th column of the
                     array AB as follows:
                     AB(ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(n,j+kl).

           LDAB

                     LDAB is INTEGER
                     The leading dimension of the array AB.  LDAB >= KL+KU+1.

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     The right hand side vectors for the system of linear
                     equations.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors.  Each vector is stored as a
                     column of the matrix X.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= max(1,N).

           XACT

                     XACT is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The exact solution vectors.  Each vector is stored as a
                     column of the matrix XACT.

           LDXACT

                     LDXACT is INTEGER
                     The leading dimension of the array XACT.  LDXACT >= max(1,N).

           FERR

                     FERR is DOUBLE PRECISION array, dimension (NRHS)
                     The estimated forward error bounds for each solution vector
                     X.  If XTRUE is the true solution, FERR bounds the magnitude
                     of the largest entry in (X - XTRUE) divided by the magnitude
                     of the largest entry in X.

           BERR

                     BERR is DOUBLE PRECISION array, dimension (NRHS)
                     The componentwise relative backward error of each solution
                     vector (i.e., the smallest relative change in any entry of A
                     or B that makes X an exact solution).

           RESLTS

                     RESLTS is DOUBLE PRECISION array, dimension (2)
                     The maximum over the NRHS solution vectors of the ratios:
                     RESLTS(1) = norm(X - XACT) / ( norm(X) * FERR )
                     RESLTS(2) = BERR / ( NZ*EPS + (*) )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dgelqs (integer M, integer N, integer NRHS, double precision, dimension( lda, * )
       A, integer LDA, double precision, dimension( * ) TAU, double precision, dimension( ldb, *
       ) B, integer LDB, double precision, dimension( lwork ) WORK, integer LWORK, integer INFO)
       DGELQS

       Purpose:

            Compute a minimum-norm solution
                min || A*X - B ||
            using the LQ factorization
                A = L*Q
            computed by DGELQF.

       Parameters:
           M

                     M is INTEGER
                     The number of rows of the matrix A.  M >= 0.

           N

                     N is INTEGER
                     The number of columns of the matrix A.  N >= M >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of B.  NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     Details of the LQ factorization of the original matrix A as
                     returned by DGELQF.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= M.

           TAU

                     TAU is DOUBLE PRECISION array, dimension (M)
                     Details of the orthogonal matrix Q.

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     On entry, the m-by-nrhs right hand side matrix B.
                     On exit, the n-by-nrhs solution matrix X.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B. LDB >= N.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The length of the array WORK.  LWORK must be at least NRHS,
                     and should be at least NRHS*NB, where NB is the block size
                     for this environment.

           INFO

                     INFO is INTEGER
                     = 0: successful exit
                     < 0: if INFO = -i, the i-th argument had an illegal value

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   logical function dgennd (integer M, integer N, double precision, dimension( lda, * ) A,
       integer LDA)
       DGENND

       Purpose:

               DGENND tests that its argument has a non-negative diagonal.

       Parameters:
           M

                     M is INTEGER
                     The number of rows in A.

           N

                     N is INTEGER
                     The number of columns in A.

           A

                     A is DOUBLE PRECISION array, dimension (LDA, N)
                     The matrix.

           LDA

                     LDA is INTEGER
                     Leading dimension of A.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dgeqls (integer M, integer N, integer NRHS, double precision, dimension( lda, * )
       A, integer LDA, double precision, dimension( * ) TAU, double precision, dimension( ldb, *
       ) B, integer LDB, double precision, dimension( lwork ) WORK, integer LWORK, integer INFO)
       DGEQLS

       Purpose:

            Solve the least squares problem
                min || A*X - B ||
            using the QL factorization
                A = Q*L
            computed by DGEQLF.

       Parameters:
           M

                     M is INTEGER
                     The number of rows of the matrix A.  M >= 0.

           N

                     N is INTEGER
                     The number of columns of the matrix A.  M >= N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of B.  NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     Details of the QL factorization of the original matrix A as
                     returned by DGEQLF.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= M.

           TAU

                     TAU is DOUBLE PRECISION array, dimension (N)
                     Details of the orthogonal matrix Q.

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     On entry, the m-by-nrhs right hand side matrix B.
                     On exit, the n-by-nrhs solution matrix X, stored in rows
                     m-n+1:m.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B. LDB >= M.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The length of the array WORK.  LWORK must be at least NRHS,
                     and should be at least NRHS*NB, where NB is the block size
                     for this environment.

           INFO

                     INFO is INTEGER
                     = 0: successful exit
                     < 0: if INFO = -i, the i-th argument had an illegal value

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dgeqrs (integer M, integer N, integer NRHS, double precision, dimension( lda, * )
       A, integer LDA, double precision, dimension( * ) TAU, double precision, dimension( ldb, *
       ) B, integer LDB, double precision, dimension( lwork ) WORK, integer LWORK, integer INFO)
       DGEQRS

       Purpose:

            Solve the least squares problem
                min || A*X - B ||
            using the QR factorization
                A = Q*R
            computed by DGEQRF.

       Parameters:
           M

                     M is INTEGER
                     The number of rows of the matrix A.  M >= 0.

           N

                     N is INTEGER
                     The number of columns of the matrix A.  M >= N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of B.  NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     Details of the QR factorization of the original matrix A as
                     returned by DGEQRF.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= M.

           TAU

                     TAU is DOUBLE PRECISION array, dimension (N)
                     Details of the orthogonal matrix Q.

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     On entry, the m-by-nrhs right hand side matrix B.
                     On exit, the n-by-nrhs solution matrix X.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B. LDB >= M.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The length of the array WORK.  LWORK must be at least NRHS,
                     and should be at least NRHS*NB, where NB is the block size
                     for this environment.

           INFO

                     INFO is INTEGER
                     = 0: successful exit
                     < 0: if INFO = -i, the i-th argument had an illegal value

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dgerqs (integer M, integer N, integer NRHS, double precision, dimension( lda, * )
       A, integer LDA, double precision, dimension( * ) TAU, double precision, dimension( ldb, *
       ) B, integer LDB, double precision, dimension( lwork ) WORK, integer LWORK, integer INFO)
       DGERQS

       Purpose:

            Compute a minimum-norm solution
                min || A*X - B ||
            using the RQ factorization
                A = R*Q
            computed by DGERQF.

       Parameters:
           M

                     M is INTEGER
                     The number of rows of the matrix A.  M >= 0.

           N

                     N is INTEGER
                     The number of columns of the matrix A.  N >= M >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of B.  NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     Details of the RQ factorization of the original matrix A as
                     returned by DGERQF.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= M.

           TAU

                     TAU is DOUBLE PRECISION array, dimension (M)
                     Details of the orthogonal matrix Q.

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     On entry, the right hand side vectors for the linear system.
                     On exit, the solution vectors X.  Each solution vector
                     is contained in rows 1:N of a column of B.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B. LDB >= max(1,N).

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The length of the array WORK.  LWORK must be at least NRHS,
                     and should be at least NRHS*NB, where NB is the block size
                     for this environment.

           INFO

                     INFO is INTEGER
                     = 0: successful exit
                     < 0: if INFO = -i, the i-th argument had an illegal value

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dget01 (integer M, integer N, double precision, dimension( lda, * ) A, integer LDA,
       double precision, dimension( ldafac, * ) AFAC, integer LDAFAC, integer, dimension( * )
       IPIV, double precision, dimension( * ) RWORK, double precision RESID)
       DGET01

       Purpose:

            DGET01 reconstructs a matrix A from its L*U factorization and
            computes the residual
               norm(L*U - A) / ( N * norm(A) * EPS ),
            where EPS is the machine epsilon.

       Parameters:
           M

                     M is INTEGER
                     The number of rows of the matrix A.  M >= 0.

           N

                     N is INTEGER
                     The number of columns of the matrix A.  N >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The original M x N matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,M).

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (LDAFAC,N)
                     The factored form of the matrix A.  AFAC contains the factors
                     L and U from the L*U factorization as computed by DGETRF.
                     Overwritten with the reconstructed matrix, and then with the
                     difference L*U - A.

           LDAFAC

                     LDAFAC is INTEGER
                     The leading dimension of the array AFAC.  LDAFAC >= max(1,M).

           IPIV

                     IPIV is INTEGER array, dimension (N)
                     The pivot indices from DGETRF.

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (M)

           RESID

                     RESID is DOUBLE PRECISION
                     norm(L*U - A) / ( N * norm(A) * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dget02 (character TRANS, integer M, integer N, integer NRHS, double precision,
       dimension( lda, * ) A, integer LDA, double precision, dimension( ldx, * ) X, integer LDX,
       double precision, dimension( ldb, * ) B, integer LDB, double precision, dimension( * )
       RWORK, double precision RESID)
       DGET02

       Purpose:

            DGET02 computes the residual for a solution of a system of linear
            equations  A*x = b  or  A'*x = b:
               RESID = norm(B - A*X) / ( norm(A) * norm(X) * EPS ),
            where EPS is the machine epsilon.

       Parameters:
           TRANS

                     TRANS is CHARACTER*1
                     Specifies the form of the system of equations:
                     = 'N':  A *x = b
                     = 'T':  A'*x = b, where A' is the transpose of A
                     = 'C':  A'*x = b, where A' is the transpose of A

           M

                     M is INTEGER
                     The number of rows of the matrix A.  M >= 0.

           N

                     N is INTEGER
                     The number of columns of the matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of B, the matrix of right hand sides.
                     NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The original M x N matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,M).

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors for the system of linear
                     equations.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  If TRANS = 'N',
                     LDX >= max(1,N); if TRANS = 'T' or 'C', LDX >= max(1,M).

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     On entry, the right hand side vectors for the system of
                     linear equations.
                     On exit, B is overwritten with the difference B - A*X.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  IF TRANS = 'N',
                     LDB >= max(1,M); if TRANS = 'T' or 'C', LDB >= max(1,N).

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (M)

           RESID

                     RESID is DOUBLE PRECISION
                     The maximum over the number of right hand sides of
                     norm(B - A*X) / ( norm(A) * norm(X) * EPS ).

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2015

   subroutine dget03 (integer N, double precision, dimension( lda, * ) A, integer LDA, double
       precision, dimension( ldainv, * ) AINV, integer LDAINV, double precision, dimension(
       ldwork, * ) WORK, integer LDWORK, double precision, dimension( * ) RWORK, double precision
       RCOND, double precision RESID)
       DGET03

       Purpose:

            DGET03 computes the residual for a general matrix times its inverse:
               norm( I - AINV*A ) / ( N * norm(A) * norm(AINV) * EPS ),
            where EPS is the machine epsilon.

       Parameters:
           N

                     N is INTEGER
                     The number of rows and columns of the matrix A.  N >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The original N x N matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,N).

           AINV

                     AINV is DOUBLE PRECISION array, dimension (LDAINV,N)
                     The inverse of the matrix A.

           LDAINV

                     LDAINV is INTEGER
                     The leading dimension of the array AINV.  LDAINV >= max(1,N).

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LDWORK,N)

           LDWORK

                     LDWORK is INTEGER
                     The leading dimension of the array WORK.  LDWORK >= max(1,N).

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (N)

           RCOND

                     RCOND is DOUBLE PRECISION
                     The reciprocal of the condition number of A, computed as
                     ( 1/norm(A) ) / norm(AINV).

           RESID

                     RESID is DOUBLE PRECISION
                     norm(I - AINV*A) / ( N * norm(A) * norm(AINV) * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dget04 (integer N, integer NRHS, double precision, dimension( ldx, * ) X, integer
       LDX, double precision, dimension( ldxact, * ) XACT, integer LDXACT, double precision
       RCOND, double precision RESID)
       DGET04

       Purpose:

            DGET04 computes the difference between a computed solution and the
            true solution to a system of linear equations.

            RESID =  ( norm(X-XACT) * RCOND ) / ( norm(XACT) * EPS ),
            where RCOND is the reciprocal of the condition number and EPS is the
            machine epsilon.

       Parameters:
           N

                     N is INTEGER
                     The number of rows of the matrices X and XACT.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of the matrices X and XACT.  NRHS >= 0.

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors.  Each vector is stored as a
                     column of the matrix X.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= max(1,N).

           XACT

                     XACT is DOUBLE PRECISION array, dimension( LDX, NRHS )
                     The exact solution vectors.  Each vector is stored as a
                     column of the matrix XACT.

           LDXACT

                     LDXACT is INTEGER
                     The leading dimension of the array XACT.  LDXACT >= max(1,N).

           RCOND

                     RCOND is DOUBLE PRECISION
                     The reciprocal of the condition number of the coefficient
                     matrix in the system of equations.

           RESID

                     RESID is DOUBLE PRECISION
                     The maximum over the NRHS solution vectors of
                     ( norm(X-XACT) * RCOND ) / ( norm(XACT) * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   double precision function dget06 (double precision RCOND, double precision RCONDC)
       DGET06

       Purpose:

            DGET06 computes a test ratio to compare two values for RCOND.

       Parameters:
           RCOND

                     RCOND is DOUBLE PRECISION
                     The estimate of the reciprocal of the condition number of A,
                     as computed by DGECON.

           RCONDC

                     RCONDC is DOUBLE PRECISION
                     The reciprocal of the condition number of A, computed as
                     ( 1/norm(A) ) / norm(inv(A)).

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dget07 (character TRANS, integer N, integer NRHS, double precision, dimension( lda,
       * ) A, integer LDA, double precision, dimension( ldb, * ) B, integer LDB, double
       precision, dimension( ldx, * ) X, integer LDX, double precision, dimension( ldxact, * )
       XACT, integer LDXACT, double precision, dimension( * ) FERR, logical CHKFERR, double
       precision, dimension( * ) BERR, double precision, dimension( * ) RESLTS)
       DGET07

       Purpose:

            DGET07 tests the error bounds from iterative refinement for the
            computed solution to a system of equations op(A)*X = B, where A is a
            general n by n matrix and op(A) = A or A**T, depending on TRANS.

            RESLTS(1) = test of the error bound
                      = norm(X - XACT) / ( norm(X) * FERR )

            A large value is returned if this ratio is not less than one.

            RESLTS(2) = residual from the iterative refinement routine
                      = the maximum of BERR / ( (n+1)*EPS + (*) ), where
                        (*) = (n+1)*UNFL / (min_i (abs(op(A))*abs(X) +abs(b))_i )

       Parameters:
           TRANS

                     TRANS is CHARACTER*1
                     Specifies the form of the system of equations.
                     = 'N':  A * X = B     (No transpose)
                     = 'T':  A**T * X = B  (Transpose)
                     = 'C':  A**H * X = B  (Conjugate transpose = Transpose)

           N

                     N is INTEGER
                     The number of rows of the matrices X and XACT.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of the matrices X and XACT.  NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The original n by n matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,N).

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     The right hand side vectors for the system of linear
                     equations.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors.  Each vector is stored as a
                     column of the matrix X.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= max(1,N).

           XACT

                     XACT is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The exact solution vectors.  Each vector is stored as a
                     column of the matrix XACT.

           LDXACT

                     LDXACT is INTEGER
                     The leading dimension of the array XACT.  LDXACT >= max(1,N).

           FERR

                     FERR is DOUBLE PRECISION array, dimension (NRHS)
                     The estimated forward error bounds for each solution vector
                     X.  If XTRUE is the true solution, FERR bounds the magnitude
                     of the largest entry in (X - XTRUE) divided by the magnitude
                     of the largest entry in X.

           CHKFERR

                     CHKFERR is LOGICAL
                     Set to .TRUE. to check FERR, .FALSE. not to check FERR.
                     When the test system is ill-conditioned, the "true"
                     solution in XACT may be incorrect.

           BERR

                     BERR is DOUBLE PRECISION array, dimension (NRHS)
                     The componentwise relative backward error of each solution
                     vector (i.e., the smallest relative change in any entry of A
                     or B that makes X an exact solution).

           RESLTS

                     RESLTS is DOUBLE PRECISION array, dimension (2)
                     The maximum over the NRHS solution vectors of the ratios:
                     RESLTS(1) = norm(X - XACT) / ( norm(X) * FERR )
                     RESLTS(2) = BERR / ( (n+1)*EPS + (*) )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dget08 (character TRANS, integer M, integer N, integer NRHS, double precision,
       dimension( lda, * ) A, integer LDA, double precision, dimension( ldx, * ) X, integer LDX,
       double precision, dimension( ldb, * ) B, integer LDB, double precision, dimension( * )
       RWORK, double precision RESID)
       DGET08

       Purpose:

            DGET08 computes the residual for a solution of a system of linear
            equations  A*x = b  or  A'*x = b:
               RESID = norm(B - A*X,inf) / ( norm(A,inf) * norm(X,inf) * EPS ),
            where EPS is the machine epsilon.

       Parameters:
           TRANS

                     TRANS is CHARACTER*1
                     Specifies the form of the system of equations:
                     = 'N':  A *x = b
                     = 'T':  A'*x = b, where A' is the transpose of A
                     = 'C':  A'*x = b, where A' is the transpose of A

           M

                     M is INTEGER
                     The number of rows of the matrix A.  M >= 0.

           N

                     N is INTEGER
                     The number of columns of the matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of B, the matrix of right hand sides.
                     NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The original M x N matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,M).

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors for the system of linear
                     equations.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  If TRANS = 'N',
                     LDX >= max(1,N); if TRANS = 'T' or 'C', LDX >= max(1,M).

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     On entry, the right hand side vectors for the system of
                     linear equations.
                     On exit, B is overwritten with the difference B - A*X.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  IF TRANS = 'N',
                     LDB >= max(1,M); if TRANS = 'T' or 'C', LDB >= max(1,N).

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (M)

           RESID

                     RESID is DOUBLE PRECISION
                     The maximum over the number of right hand sides of
                     norm(B - A*X) / ( norm(A) * norm(X) * EPS ).

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dgtt01 (integer N, double precision, dimension( * ) DL, double precision,
       dimension( * ) D, double precision, dimension( * ) DU, double precision, dimension( * )
       DLF, double precision, dimension( * ) DF, double precision, dimension( * ) DUF, double
       precision, dimension( * ) DU2, integer, dimension( * ) IPIV, double precision, dimension(
       ldwork, * ) WORK, integer LDWORK, double precision, dimension( * ) RWORK, double precision
       RESID)
       DGTT01

       Purpose:

            DGTT01 reconstructs a tridiagonal matrix A from its LU factorization
            and computes the residual
               norm(L*U - A) / ( norm(A) * EPS ),
            where EPS is the machine epsilon.

       Parameters:
           N

                     N is INTEGTER
                     The order of the matrix A.  N >= 0.

           DL

                     DL is DOUBLE PRECISION array, dimension (N-1)
                     The (n-1) sub-diagonal elements of A.

           D

                     D is DOUBLE PRECISION array, dimension (N)
                     The diagonal elements of A.

           DU

                     DU is DOUBLE PRECISION array, dimension (N-1)
                     The (n-1) super-diagonal elements of A.

           DLF

                     DLF is DOUBLE PRECISION array, dimension (N-1)
                     The (n-1) multipliers that define the matrix L from the
                     LU factorization of A.

           DF

                     DF is DOUBLE PRECISION array, dimension (N)
                     The n diagonal elements of the upper triangular matrix U from
                     the LU factorization of A.

           DUF

                     DUF is DOUBLE PRECISION array, dimension (N-1)
                     The (n-1) elements of the first super-diagonal of U.

           DU2

                     DU2 is DOUBLE PRECISION array, dimension (N-2)
                     The (n-2) elements of the second super-diagonal of U.

           IPIV

                     IPIV is INTEGER array, dimension (N)
                     The pivot indices; for 1 <= i <= n, row i of the matrix was
                     interchanged with row IPIV(i).  IPIV(i) will always be either
                     i or i+1; IPIV(i) = i indicates a row interchange was not
                     required.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LDWORK,N)

           LDWORK

                     LDWORK is INTEGER
                     The leading dimension of the array WORK.  LDWORK >= max(1,N).

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (N)

           RESID

                     RESID is DOUBLE PRECISION
                     The scaled residual:  norm(L*U - A) / (norm(A) * EPS)

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dgtt02 (character TRANS, integer N, integer NRHS, double precision, dimension( * )
       DL, double precision, dimension( * ) D, double precision, dimension( * ) DU, double
       precision, dimension( ldx, * ) X, integer LDX, double precision, dimension( ldb, * ) B,
       integer LDB, double precision RESID)
       DGTT02

       Purpose:

            DGTT02 computes the residual for the solution to a tridiagonal
            system of equations:
               RESID = norm(B - op(A)*X) / (norm(A) * norm(X) * EPS),
            where EPS is the machine epsilon.

       Parameters:
           TRANS

                     TRANS is CHARACTER
                     Specifies the form of the residual.
                     = 'N':  B - A * X  (No transpose)
                     = 'T':  B - A'* X  (Transpose)
                     = 'C':  B - A'* X  (Conjugate transpose = Transpose)

           N

                     N is INTEGTER
                     The order of the matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides, i.e., the number of columns
                     of the matrices B and X.  NRHS >= 0.

           DL

                     DL is DOUBLE PRECISION array, dimension (N-1)
                     The (n-1) sub-diagonal elements of A.

           D

                     D is DOUBLE PRECISION array, dimension (N)
                     The diagonal elements of A.

           DU

                     DU is DOUBLE PRECISION array, dimension (N-1)
                     The (n-1) super-diagonal elements of A.

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors X.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= max(1,N).

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     On entry, the right hand side vectors for the system of
                     linear equations.
                     On exit, B is overwritten with the difference B - op(A)*X.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           RESID

                     RESID is DOUBLE PRECISION
                     norm(B - op(A)*X) / (norm(A) * norm(X) * EPS)

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dgtt05 (character TRANS, integer N, integer NRHS, double precision, dimension( * )
       DL, double precision, dimension( * ) D, double precision, dimension( * ) DU, double
       precision, dimension( ldb, * ) B, integer LDB, double precision, dimension( ldx, * ) X,
       integer LDX, double precision, dimension( ldxact, * ) XACT, integer LDXACT, double
       precision, dimension( * ) FERR, double precision, dimension( * ) BERR, double precision,
       dimension( * ) RESLTS)
       DGTT05

       Purpose:

            DGTT05 tests the error bounds from iterative refinement for the
            computed solution to a system of equations A*X = B, where A is a
            general tridiagonal matrix of order n and op(A) = A or A**T,
            depending on TRANS.

            RESLTS(1) = test of the error bound
                      = norm(X - XACT) / ( norm(X) * FERR )

            A large value is returned if this ratio is not less than one.

            RESLTS(2) = residual from the iterative refinement routine
                      = the maximum of BERR / ( NZ*EPS + (*) ), where
                        (*) = NZ*UNFL / (min_i (abs(op(A))*abs(X) +abs(b))_i )
                        and NZ = max. number of nonzeros in any row of A, plus 1

       Parameters:
           TRANS

                     TRANS is CHARACTER*1
                     Specifies the form of the system of equations.
                     = 'N':  A * X = B     (No transpose)
                     = 'T':  A**T * X = B  (Transpose)
                     = 'C':  A**H * X = B  (Conjugate transpose = Transpose)

           N

                     N is INTEGER
                     The number of rows of the matrices X and XACT.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of the matrices X and XACT.  NRHS >= 0.

           DL

                     DL is DOUBLE PRECISION array, dimension (N-1)
                     The (n-1) sub-diagonal elements of A.

           D

                     D is DOUBLE PRECISION array, dimension (N)
                     The diagonal elements of A.

           DU

                     DU is DOUBLE PRECISION array, dimension (N-1)
                     The (n-1) super-diagonal elements of A.

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     The right hand side vectors for the system of linear
                     equations.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors.  Each vector is stored as a
                     column of the matrix X.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= max(1,N).

           XACT

                     XACT is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The exact solution vectors.  Each vector is stored as a
                     column of the matrix XACT.

           LDXACT

                     LDXACT is INTEGER
                     The leading dimension of the array XACT.  LDXACT >= max(1,N).

           FERR

                     FERR is DOUBLE PRECISION array, dimension (NRHS)
                     The estimated forward error bounds for each solution vector
                     X.  If XTRUE is the true solution, FERR bounds the magnitude
                     of the largest entry in (X - XTRUE) divided by the magnitude
                     of the largest entry in X.

           BERR

                     BERR is DOUBLE PRECISION array, dimension (NRHS)
                     The componentwise relative backward error of each solution
                     vector (i.e., the smallest relative change in any entry of A
                     or B that makes X an exact solution).

           RESLTS

                     RESLTS is DOUBLE PRECISION array, dimension (2)
                     The maximum over the NRHS solution vectors of the ratios:
                     RESLTS(1) = norm(X - XACT) / ( norm(X) * FERR )
                     RESLTS(2) = BERR / ( NZ*EPS + (*) )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dlahilb (integer N, integer NRHS, double precision, dimension(lda, n) A, integer
       LDA, double precision, dimension(ldx, nrhs) X, integer LDX, double precision,
       dimension(ldb, nrhs) B, integer LDB, double precision, dimension(n) WORK, integer INFO)
       DLAHILB

       Purpose:

            DLAHILB generates an N by N scaled Hilbert matrix in A along with
            NRHS right-hand sides in B and solutions in X such that A*X=B.

            The Hilbert matrix is scaled by M = LCM(1, 2, ..., 2*N-1) so that all
            entries are integers.  The right-hand sides are the first NRHS
            columns of M * the identity matrix, and the solutions are the
            first NRHS columns of the inverse Hilbert matrix.

            The condition number of the Hilbert matrix grows exponentially with
            its size, roughly as O(e ** (3.5*N)).  Additionally, the inverse
            Hilbert matrices beyond a relatively small dimension cannot be
            generated exactly without extra precision.  Precision is exhausted
            when the largest entry in the inverse Hilbert matrix is greater than
            2 to the power of the number of bits in the fraction of the data type
            used plus one, which is 24 for single precision.

            In single, the generated solution is exact for N <= 6 and has
            small componentwise error for 7 <= N <= 11.

       Parameters:
           N

                     N is INTEGER
                     The dimension of the matrix A.

           NRHS

                     NRHS is NRHS
                     The requested number of right-hand sides.

           A

                     A is DOUBLE PRECISION array, dimension (LDA, N)
                     The generated scaled Hilbert matrix.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= N.

           X

                     X is DOUBLE PRECISION array, dimension (LDX, NRHS)
                     The generated exact solutions.  Currently, the first NRHS
                     columns of the inverse Hilbert matrix.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= N.

           B

                     B is DOUBLE PRECISION array, dimension (LDB, NRHS)
                     The generated right-hand sides.  Currently, the first NRHS
                     columns of LCM(1, 2, ..., 2*N-1) * the identity matrix.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= N.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (N)

           INFO

                     INFO is INTEGER
                     = 0: successful exit
                     = 1: N is too large; the data is still generated but may not
                          be not exact.
                     < 0: if INFO = -i, the i-th argument had an illegal value

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dlaord (character JOB, integer N, double precision, dimension( * ) X, integer INCX)
       DLAORD

       Purpose:

            DLAORD sorts the elements of a vector x in increasing or decreasing
            order.

       Parameters:
           JOB

                     JOB is CHARACTER
                     = 'I':  Sort in increasing order
                     = 'D':  Sort in decreasing order

           N

                     N is INTEGER
                     The length of the vector X.

           X

                     X is DOUBLE PRECISION array, dimension
                                    (1+(N-1)*INCX)
                     On entry, the vector of length n to be sorted.
                     On exit, the vector x is sorted in the prescribed order.

           INCX

                     INCX is INTEGER
                     The spacing between successive elements of X.  INCX >= 0.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dlaptm (integer N, integer NRHS, double precision ALPHA, double precision,
       dimension( * ) D, double precision, dimension( * ) E, double precision, dimension( ldx, *
       ) X, integer LDX, double precision BETA, double precision, dimension( ldb, * ) B, integer
       LDB)
       DLAPTM

       Purpose:

            DLAPTM multiplies an N by NRHS matrix X by a symmetric tridiagonal
            matrix A and stores the result in a matrix B.  The operation has the
            form

               B := alpha * A * X + beta * B

            where alpha may be either 1. or -1. and beta may be 0., 1., or -1.

       Parameters:
           N

                     N is INTEGER
                     The order of the matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides, i.e., the number of columns
                     of the matrices X and B.

           ALPHA

                     ALPHA is DOUBLE PRECISION
                     The scalar alpha.  ALPHA must be 1. or -1.; otherwise,
                     it is assumed to be 0.

           D

                     D is DOUBLE PRECISION array, dimension (N)
                     The n diagonal elements of the tridiagonal matrix A.

           E

                     E is DOUBLE PRECISION array, dimension (N-1)
                     The (n-1) subdiagonal or superdiagonal elements of A.

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The N by NRHS matrix X.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= max(N,1).

           BETA

                     BETA is DOUBLE PRECISION
                     The scalar beta.  BETA must be 0., 1., or -1.; otherwise,
                     it is assumed to be 1.

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     On entry, the N by NRHS matrix B.
                     On exit, B is overwritten by the matrix expression
                     B := alpha * A * X + beta * B.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(N,1).

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dlarhs (character*3 PATH, character XTYPE, character UPLO, character TRANS, integer
       M, integer N, integer KL, integer KU, integer NRHS, double precision, dimension( lda, * )
       A, integer LDA, double precision, dimension( ldx, * ) X, integer LDX, double precision,
       dimension( ldb, * ) B, integer LDB, integer, dimension( 4 ) ISEED, integer INFO)
       DLARHS

       Purpose:

            DLARHS chooses a set of NRHS random solution vectors and sets
            up the right hand sides for the linear system
               op( A ) * X = B,
            where op( A ) may be A or A' (transpose of A).

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The type of the real matrix A.  PATH may be given in any
                     combination of upper and lower case.  Valid types include
                        xGE:  General m x n matrix
                        xGB:  General banded matrix
                        xPO:  Symmetric positive definite, 2-D storage
                        xPP:  Symmetric positive definite packed
                        xPB:  Symmetric positive definite banded
                        xSY:  Symmetric indefinite, 2-D storage
                        xSP:  Symmetric indefinite packed
                        xSB:  Symmetric indefinite banded
                        xTR:  Triangular
                        xTP:  Triangular packed
                        xTB:  Triangular banded
                        xQR:  General m x n matrix
                        xLQ:  General m x n matrix
                        xQL:  General m x n matrix
                        xRQ:  General m x n matrix
                     where the leading character indicates the precision.

           XTYPE

                     XTYPE is CHARACTER*1
                     Specifies how the exact solution X will be determined:
                     = 'N':  New solution; generate a random X.
                     = 'C':  Computed; use value of X on entry.

           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     matrix A is stored, if A is symmetric.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           TRANS

                     TRANS is CHARACTER*1
                     Specifies the operation applied to the matrix A.
                     = 'N':  System is  A * x = b
                     = 'T':  System is  A'* x = b
                     = 'C':  System is  A'* x = b

           M

                     M is INTEGER
                     The number or rows of the matrix A.  M >= 0.

           N

                     N is INTEGER
                     The number of columns of the matrix A.  N >= 0.

           KL

                     KL is INTEGER
                     Used only if A is a band matrix; specifies the number of
                     subdiagonals of A if A is a general band matrix or if A is
                     symmetric or triangular and UPLO = 'L'; specifies the number
                     of superdiagonals of A if A is symmetric or triangular and
                     UPLO = 'U'.  0 <= KL <= M-1.

           KU

                     KU is INTEGER
                     Used only if A is a general band matrix or if A is
                     triangular.

                     If PATH = xGB, specifies the number of superdiagonals of A,
                     and 0 <= KU <= N-1.

                     If PATH = xTR, xTP, or xTB, specifies whether or not the
                     matrix has unit diagonal:
                     = 1:  matrix has non-unit diagonal (default)
                     = 2:  matrix has unit diagonal

           NRHS

                     NRHS is INTEGER
                     The number of right hand side vectors in the system A*X = B.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The test matrix whose type is given by PATH.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.
                     If PATH = xGB, LDA >= KL+KU+1.
                     If PATH = xPB, xSB, xHB, or xTB, LDA >= KL+1.
                     Otherwise, LDA >= max(1,M).

           X

                     X is or output) DOUBLE PRECISION array, dimension(LDX,NRHS)
                     On entry, if XTYPE = 'C' (for 'Computed'), then X contains
                     the exact solution to the system of linear equations.
                     On exit, if XTYPE = 'N' (for 'New'), then X is initialized
                     with random values.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  If TRANS = 'N',
                     LDX >= max(1,N); if TRANS = 'T', LDX >= max(1,M).

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     The right hand side vector(s) for the system of equations,
                     computed from B = op(A) * X, where op(A) is determined by
                     TRANS.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  If TRANS = 'N',
                     LDB >= max(1,M); if TRANS = 'T', LDB >= max(1,N).

           ISEED

                     ISEED is INTEGER array, dimension (4)
                     The seed vector for the random number generator (used in
                     DLATMS).  Modified on exit.

           INFO

                     INFO is INTEGER
                     = 0: successful exit
                     < 0: if INFO = -i, the i-th argument had an illegal value

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dlatb4 (character*3 PATH, integer IMAT, integer M, integer N, character TYPE,
       integer KL, integer KU, double precision ANORM, integer MODE, double precision CNDNUM,
       character DIST)
       DLATB4

       Purpose:

            DLATB4 sets parameters for the matrix generator based on the type of
            matrix to be generated.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name.

           IMAT

                     IMAT is INTEGER
                     An integer key describing which matrix to generate for this
                     path.

           M

                     M is INTEGER
                     The number of rows in the matrix to be generated.

           N

                     N is INTEGER
                     The number of columns in the matrix to be generated.

           TYPE

                     TYPE is CHARACTER*1
                     The type of the matrix to be generated:
                     = 'S':  symmetric matrix
                     = 'P':  symmetric positive (semi)definite matrix
                     = 'N':  nonsymmetric matrix

           KL

                     KL is INTEGER
                     The lower band width of the matrix to be generated.

           KU

                     KU is INTEGER
                     The upper band width of the matrix to be generated.

           ANORM

                     ANORM is DOUBLE PRECISION
                     The desired norm of the matrix to be generated.  The diagonal
                     matrix of singular values or eigenvalues is scaled by this
                     value.

           MODE

                     MODE is INTEGER
                     A key indicating how to choose the vector of eigenvalues.

           CNDNUM

                     CNDNUM is DOUBLE PRECISION
                     The desired condition number.

           DIST

                     DIST is CHARACTER*1
                     The type of distribution to be used by the random number
                     generator.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dlatb5 (character*3 PATH, integer IMAT, integer N, character TYPE, integer KL,
       integer KU, double precision ANORM, integer MODE, double precision CNDNUM, character DIST)
       DLATB5

       Purpose:

            DLATB5 sets parameters for the matrix generator based on the type
            of matrix to be generated.

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name.

           IMAT

                     IMAT is INTEGER
                     An integer key describing which matrix to generate for this
                     path.

           N

                     N is INTEGER
                     The number of rows and columns in the matrix to be generated.

           TYPE

                     TYPE is CHARACTER*1
                     The type of the matrix to be generated:
                     = 'S':  symmetric matrix
                     = 'P':  symmetric positive (semi)definite matrix
                     = 'N':  nonsymmetric matrix

           KL

                     KL is INTEGER
                     The lower band width of the matrix to be generated.

           KU

                     KU is INTEGER
                     The upper band width of the matrix to be generated.

           ANORM

                     ANORM is DOUBLE PRECISION
                     The desired norm of the matrix to be generated.  The diagonal
                     matrix of singular values or eigenvalues is scaled by this
                     value.

           MODE

                     MODE is INTEGER
                     A key indicating how to choose the vector of eigenvalues.

           CNDNUM

                     CNDNUM is DOUBLE PRECISION
                     The desired condition number.

           DIST

                     DIST is CHARACTER*1
                     The type of distribution to be used by the random number
                     generator.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dlattb (integer IMAT, character UPLO, character TRANS, character DIAG, integer,
       dimension( 4 ) ISEED, integer N, integer KD, double precision, dimension( ldab, * ) AB,
       integer LDAB, double precision, dimension( * ) B, double precision, dimension( * ) WORK,
       integer INFO)
       DLATTB

       Purpose:

            DLATTB generates a triangular test matrix in 2-dimensional storage.
            IMAT and UPLO uniquely specify the properties of the test matrix,
            which is returned in the array A.

       Parameters:
           IMAT

                     IMAT is INTEGER
                     An integer key describing which matrix to generate for this
                     path.

           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the matrix A will be upper or lower
                     triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           TRANS

                     TRANS is CHARACTER*1
                     Specifies whether the matrix or its transpose will be used.
                     = 'N':  No transpose
                     = 'T':  Transpose
                     = 'C':  Conjugate transpose (= transpose)

           DIAG

                     DIAG is CHARACTER*1
                     Specifies whether or not the matrix A is unit triangular.
                     = 'N':  Non-unit triangular
                     = 'U':  Unit triangular

           ISEED

                     ISEED is INTEGER array, dimension (4)
                     The seed vector for the random number generator (used in
                     DLATMS).  Modified on exit.

           N

                     N is INTEGER
                     The order of the matrix to be generated.

           KD

                     KD is INTEGER
                     The number of superdiagonals or subdiagonals of the banded
                     triangular matrix A.  KD >= 0.

           AB

                     AB is DOUBLE PRECISION array, dimension (LDAB,N)
                     The upper or lower triangular banded matrix A, stored in the
                     first KD+1 rows of AB.  Let j be a column of A, 1<=j<=n.
                     If UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j.
                     If UPLO = 'L', AB(1+i-j,j)    = A(i,j) for j<=i<=min(n,j+kd).

           LDAB

                     LDAB is INTEGER
                     The leading dimension of the array AB.  LDAB >= KD+1.

           B

                     B is DOUBLE PRECISION array, dimension (N)

           WORK

                     WORK is DOUBLE PRECISION array, dimension (2*N)

           INFO

                     INFO is INTEGER
                     = 0:  successful exit
                     < 0: if INFO = -k, the k-th argument had an illegal value

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dlattp (integer IMAT, character UPLO, character TRANS, character DIAG, integer,
       dimension( 4 ) ISEED, integer N, double precision, dimension( * ) A, double precision,
       dimension( * ) B, double precision, dimension( * ) WORK, integer INFO)
       DLATTP

       Purpose:

            DLATTP generates a triangular test matrix in packed storage.
            IMAT and UPLO uniquely specify the properties of the test
            matrix, which is returned in the array AP.

       Parameters:
           IMAT

                     IMAT is INTEGER
                     An integer key describing which matrix to generate for this
                     path.

           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the matrix A will be upper or lower
                     triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           TRANS

                     TRANS is CHARACTER*1
                     Specifies whether the matrix or its transpose will be used.
                     = 'N':  No transpose
                     = 'T':  Transpose
                     = 'C':  Conjugate transpose (= Transpose)

           DIAG

                     DIAG is CHARACTER*1
                     Specifies whether or not the matrix A is unit triangular.
                     = 'N':  Non-unit triangular
                     = 'U':  Unit triangular

           ISEED

                     ISEED is INTEGER array, dimension (4)
                     The seed vector for the random number generator (used in
                     DLATMS).  Modified on exit.

           N

                     N is INTEGER
                     The order of the matrix to be generated.

           A

                     A is DOUBLE PRECISION array, dimension (N*(N+1)/2)
                     The upper or lower triangular matrix A, packed columnwise in
                     a linear array.  The j-th column of A is stored in the array
                     AP as follows:
                     if UPLO = 'U', AP((j-1)*j/2 + i) = A(i,j) for 1<=i<=j;
                     if UPLO = 'L',
                        AP((j-1)*(n-j) + j*(j+1)/2 + i-j) = A(i,j) for j<=i<=n.

           B

                     B is DOUBLE PRECISION array, dimension (N)
                     The right hand side vector, if IMAT > 10.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (3*N)

           INFO

                     INFO is INTEGER
                     = 0:  successful exit
                     < 0: if INFO = -k, the k-th argument had an illegal value

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dlattr (integer IMAT, character UPLO, character TRANS, character DIAG, integer,
       dimension( 4 ) ISEED, integer N, double precision, dimension( lda, * ) A, integer LDA,
       double precision, dimension( * ) B, double precision, dimension( * ) WORK, integer INFO)
       DLATTR

       Purpose:

            DLATTR generates a triangular test matrix.
            IMAT and UPLO uniquely specify the properties of the test
            matrix, which is returned in the array A.

       Parameters:
           IMAT

                     IMAT is INTEGER
                     An integer key describing which matrix to generate for this
                     path.

           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the matrix A will be upper or lower
                     triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           TRANS

                     TRANS is CHARACTER*1
                     Specifies whether the matrix or its transpose will be used.
                     = 'N':  No transpose
                     = 'T':  Transpose
                     = 'C':  Conjugate transpose (= Transpose)

           DIAG

                     DIAG is CHARACTER*1
                     Specifies whether or not the matrix A is unit triangular.
                     = 'N':  Non-unit triangular
                     = 'U':  Unit triangular

           ISEED

                     ISEED is INTEGER array, dimension (4)
                     The seed vector for the random number generator (used in
                     DLATMS).  Modified on exit.

           N

                     N is INTEGER
                     The order of the matrix to be generated.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The triangular matrix A.  If UPLO = 'U', the leading n by n
                     upper triangular part of the array A contains the upper
                     triangular matrix, and the strictly lower triangular part of
                     A is not referenced.  If UPLO = 'L', the leading n by n lower
                     triangular part of the array A contains the lower triangular
                     matrix, and the strictly upper triangular part of A is not
                     referenced.  If DIAG = 'U', the diagonal elements of A are
                     set so that A(k,k) = k for 1 <= k <= n.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,N).

           B

                     B is DOUBLE PRECISION array, dimension (N)
                     The right hand side vector, if IMAT > 10.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (3*N)

           INFO

                     INFO is INTEGER
                     = 0:  successful exit
                     < 0: if INFO = -k, the k-th argument had an illegal value

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dlavsp (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       double precision, dimension( * ) A, integer, dimension( * ) IPIV, double precision,
       dimension( ldb, * ) B, integer LDB, integer INFO)
       DLAVSP

       Purpose:

            DLAVSP  performs one of the matrix-vector operations
               x := A*x  or  x := A'*x,
            where x is an N element vector and  A is one of the factors
            from the block U*D*U' or L*D*L' factorization computed by DSPTRF.

            If TRANS = 'N', multiplies by U  or U * D  (or L  or L * D)
            If TRANS = 'T', multiplies by U' or D * U' (or L' or D * L' )
            If TRANS = 'C', multiplies by U' or D * U' (or L' or D * L' )

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the factor stored in A is upper or lower
                     triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           TRANS

                     TRANS is CHARACTER*1
                     Specifies the operation to be performed:
                     = 'N':  x := A*x
                     = 'T':  x := A'*x
                     = 'C':  x := A'*x

           DIAG

                     DIAG is CHARACTER*1
                     Specifies whether or not the diagonal blocks are unit
                     matrices.  If the diagonal blocks are assumed to be unit,
                     then A = U or A = L, otherwise A = U*D or A = L*D.
                     = 'U':  Diagonal blocks are assumed to be unit matrices.
                     = 'N':  Diagonal blocks are assumed to be non-unit matrices.

           N

                     N is INTEGER
                     The number of rows and columns of the matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides, i.e., the number of vectors
                     x to be multiplied by A.  NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (N*(N+1)/2)
                     The block diagonal matrix D and the multipliers used to
                     obtain the factor U or L, stored as a packed triangular
                     matrix as computed by DSPTRF.

           IPIV

                     IPIV is INTEGER array, dimension (N)
                     The pivot indices from DSPTRF.

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     On entry, B contains NRHS vectors of length N.
                     On exit, B is overwritten with the product A * B.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           INFO

                     INFO is INTEGER
                     = 0: successful exit
                     < 0: if INFO = -k, the k-th argument had an illegal value

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dlavsy (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       double precision, dimension( lda, * ) A, integer LDA, integer, dimension( * ) IPIV, double
       precision, dimension( ldb, * ) B, integer LDB, integer INFO)
       DLAVSY

       Purpose:

            DLAVSY  performs one of the matrix-vector operations
               x := A*x  or  x := A'*x,
            where x is an N element vector and A is one of the factors
            from the block U*D*U' or L*D*L' factorization computed by DSYTRF.

            If TRANS = 'N', multiplies by U  or U * D  (or L  or L * D)
            If TRANS = 'T', multiplies by U' or D * U' (or L' or D * L')
            If TRANS = 'C', multiplies by U' or D * U' (or L' or D * L')

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the factor stored in A is upper or lower
                     triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           TRANS

                     TRANS is CHARACTER*1
                     Specifies the operation to be performed:
                     = 'N':  x := A*x
                     = 'T':  x := A'*x
                     = 'C':  x := A'*x

           DIAG

                     DIAG is CHARACTER*1
                     Specifies whether or not the diagonal blocks are unit
                     matrices.  If the diagonal blocks are assumed to be unit,
                     then A = U or A = L, otherwise A = U*D or A = L*D.
                     = 'U':  Diagonal blocks are assumed to be unit matrices.
                     = 'N':  Diagonal blocks are assumed to be non-unit matrices.

           N

                     N is INTEGER
                     The number of rows and columns of the matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides, i.e., the number of vectors
                     x to be multiplied by A.  NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The block diagonal matrix D and the multipliers used to
                     obtain the factor U or L as computed by DSYTRF.
                     Stored as a 2-D triangular matrix.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,N).

           IPIV

                     IPIV is INTEGER array, dimension (N)
                     Details of the interchanges and the block structure of D,
                     as determined by DSYTRF.

                     If UPLO = 'U':
                          If IPIV(k) > 0, then rows and columns k and IPIV(k)
                          were interchanged and D(k,k) is a 1-by-1 diagonal block.
                          (If IPIV( k ) = k, no interchange was done).

                          If IPIV(k) = IPIV(k-1) < 0, then rows and
                          columns k-1 and -IPIV(k) were interchanged,
                          D(k-1:k,k-1:k) is a 2-by-2 diagonal block.

                     If UPLO = 'L':
                          If IPIV(k) > 0, then rows and columns k and IPIV(k)
                          were interchanged and D(k,k) is a 1-by-1 diagonal block.
                          (If IPIV( k ) = k, no interchange was done).

                          If IPIV(k) = IPIV(k+1) < 0, then rows and
                          columns k+1 and -IPIV(k) were interchanged,
                          D(k:k+1,k:k+1) is a 2-by-2 diagonal block.

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     On entry, B contains NRHS vectors of length N.
                     On exit, B is overwritten with the product A * B.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           INFO

                     INFO is INTEGER
                     = 0: successful exit
                     < 0: if INFO = -k, the k-th argument had an illegal value

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2013

   subroutine dlavsy_rook (character UPLO, character TRANS, character DIAG, integer N, integer
       NRHS, double precision, dimension( lda, * ) A, integer LDA, integer, dimension( * ) IPIV,
       double precision, dimension( ldb, * ) B, integer LDB, integer INFO)
       DLAVSY_ROOK

       Purpose:

            DLAVSY_ROOK  performs one of the matrix-vector operations
               x := A*x  or  x := A'*x,
            where x is an N element vector and A is one of the factors
            from the block U*D*U' or L*D*L' factorization computed by DSYTRF_ROOK.

            If TRANS = 'N', multiplies by U  or U * D  (or L  or L * D)
            If TRANS = 'T', multiplies by U' or D * U' (or L' or D * L')
            If TRANS = 'C', multiplies by U' or D * U' (or L' or D * L')

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the factor stored in A is upper or lower
                     triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           TRANS

                     TRANS is CHARACTER*1
                     Specifies the operation to be performed:
                     = 'N':  x := A*x
                     = 'T':  x := A'*x
                     = 'C':  x := A'*x

           DIAG

                     DIAG is CHARACTER*1
                     Specifies whether or not the diagonal blocks are unit
                     matrices.  If the diagonal blocks are assumed to be unit,
                     then A = U or A = L, otherwise A = U*D or A = L*D.
                     = 'U':  Diagonal blocks are assumed to be unit matrices.
                     = 'N':  Diagonal blocks are assumed to be non-unit matrices.

           N

                     N is INTEGER
                     The number of rows and columns of the matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides, i.e., the number of vectors
                     x to be multiplied by A.  NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The block diagonal matrix D and the multipliers used to
                     obtain the factor U or L as computed by DSYTRF_ROOK.
                     Stored as a 2-D triangular matrix.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,N).

           IPIV

                     IPIV is INTEGER array, dimension (N)
                     Details of the interchanges and the block structure of D,
                     as determined by DSYTRF_ROOK.

                     If UPLO = 'U':
                          If IPIV(k) > 0, then rows and columns k and IPIV(k)
                          were interchanged and D(k,k) is a 1-by-1 diagonal block.
                          (If IPIV( k ) = k, no interchange was done).

                          If IPIV(k) < 0 and IPIV(k-1) < 0, then rows and
                          columns k and -IPIV(k) were interchanged and rows and
                          columns k-1 and -IPIV(k-1) were inerchaged,
                          D(k-1:k,k-1:k) is a 2-by-2 diagonal block.

                     If UPLO = 'L':
                          If IPIV(k) > 0, then rows and columns k and IPIV(k)
                          were interchanged and D(k,k) is a 1-by-1 diagonal block.
                          (If IPIV( k ) = k, no interchange was done).

                          If IPIV(k) < 0 and IPIV(k+1) < 0, then rows and
                          columns k and -IPIV(k) were interchanged and rows and
                          columns k+1 and -IPIV(k+1) were inerchaged,
                          D(k:k+1,k:k+1) is a 2-by-2 diagonal block.

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     On entry, B contains NRHS vectors of length N.
                     On exit, B is overwritten with the product A * B.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           INFO

                     INFO is INTEGER
                     = 0: successful exit
                     < 0: if INFO = -k, the k-th argument had an illegal value

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2013

   subroutine dlqt01 (integer M, integer N, double precision, dimension( lda, * ) A, double
       precision, dimension( lda, * ) AF, double precision, dimension( lda, * ) Q, double
       precision, dimension( lda, * ) L, integer LDA, double precision, dimension( * ) TAU,
       double precision, dimension( lwork ) WORK, integer LWORK, double precision, dimension( * )
       RWORK, double precision, dimension( * ) RESULT)
       DLQT01

       Purpose:

            DLQT01 tests DGELQF, which computes the LQ factorization of an m-by-n
            matrix A, and partially tests DORGLQ which forms the n-by-n
            orthogonal matrix Q.

            DLQT01 compares L with A*Q', and checks that Q is orthogonal.

       Parameters:
           M

                     M is INTEGER
                     The number of rows of the matrix A.  M >= 0.

           N

                     N is INTEGER
                     The number of columns of the matrix A.  N >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The m-by-n matrix A.

           AF

                     AF is DOUBLE PRECISION array, dimension (LDA,N)
                     Details of the LQ factorization of A, as returned by DGELQF.
                     See DGELQF for further details.

           Q

                     Q is DOUBLE PRECISION array, dimension (LDA,N)
                     The n-by-n orthogonal matrix Q.

           L

                     L is DOUBLE PRECISION array, dimension (LDA,max(M,N))

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays A, AF, Q and L.
                     LDA >= max(M,N).

           TAU

                     TAU is DOUBLE PRECISION array, dimension (min(M,N))
                     The scalar factors of the elementary reflectors, as returned
                     by DGELQF.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The dimension of the array WORK.

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (max(M,N))

           RESULT

                     RESULT is DOUBLE PRECISION array, dimension (2)
                     The test ratios:
                     RESULT(1) = norm( L - A*Q' ) / ( N * norm(A) * EPS )
                     RESULT(2) = norm( I - Q*Q' ) / ( N * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dlqt02 (integer M, integer N, integer K, double precision, dimension( lda, * ) A,
       double precision, dimension( lda, * ) AF, double precision, dimension( lda, * ) Q, double
       precision, dimension( lda, * ) L, integer LDA, double precision, dimension( * ) TAU,
       double precision, dimension( lwork ) WORK, integer LWORK, double precision, dimension( * )
       RWORK, double precision, dimension( * ) RESULT)
       DLQT02

       Purpose:

            DLQT02 tests DORGLQ, which generates an m-by-n matrix Q with
            orthonornmal rows that is defined as the product of k elementary
            reflectors.

            Given the LQ factorization of an m-by-n matrix A, DLQT02 generates
            the orthogonal matrix Q defined by the factorization of the first k
            rows of A; it compares L(1:k,1:m) with A(1:k,1:n)*Q(1:m,1:n)', and
            checks that the rows of Q are orthonormal.

       Parameters:
           M

                     M is INTEGER
                     The number of rows of the matrix Q to be generated.  M >= 0.

           N

                     N is INTEGER
                     The number of columns of the matrix Q to be generated.
                     N >= M >= 0.

           K

                     K is INTEGER
                     The number of elementary reflectors whose product defines the
                     matrix Q. M >= K >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The m-by-n matrix A which was factorized by DLQT01.

           AF

                     AF is DOUBLE PRECISION array, dimension (LDA,N)
                     Details of the LQ factorization of A, as returned by DGELQF.
                     See DGELQF for further details.

           Q

                     Q is DOUBLE PRECISION array, dimension (LDA,N)

           L

                     L is DOUBLE PRECISION array, dimension (LDA,M)

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays A, AF, Q and L. LDA >= N.

           TAU

                     TAU is DOUBLE PRECISION array, dimension (M)
                     The scalar factors of the elementary reflectors corresponding
                     to the LQ factorization in AF.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The dimension of the array WORK.

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (M)

           RESULT

                     RESULT is DOUBLE PRECISION array, dimension (2)
                     The test ratios:
                     RESULT(1) = norm( L - A*Q' ) / ( N * norm(A) * EPS )
                     RESULT(2) = norm( I - Q*Q' ) / ( N * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dlqt03 (integer M, integer N, integer K, double precision, dimension( lda, * ) AF,
       double precision, dimension( lda, * ) C, double precision, dimension( lda, * ) CC, double
       precision, dimension( lda, * ) Q, integer LDA, double precision, dimension( * ) TAU,
       double precision, dimension( lwork ) WORK, integer LWORK, double precision, dimension( * )
       RWORK, double precision, dimension( * ) RESULT)
       DLQT03

       Purpose:

            DLQT03 tests DORMLQ, which computes Q*C, Q'*C, C*Q or C*Q'.

            DLQT03 compares the results of a call to DORMLQ with the results of
            forming Q explicitly by a call to DORGLQ and then performing matrix
            multiplication by a call to DGEMM.

       Parameters:
           M

                     M is INTEGER
                     The number of rows or columns of the matrix C; C is n-by-m if
                     Q is applied from the left, or m-by-n if Q is applied from
                     the right.  M >= 0.

           N

                     N is INTEGER
                     The order of the orthogonal matrix Q.  N >= 0.

           K

                     K is INTEGER
                     The number of elementary reflectors whose product defines the
                     orthogonal matrix Q.  N >= K >= 0.

           AF

                     AF is DOUBLE PRECISION array, dimension (LDA,N)
                     Details of the LQ factorization of an m-by-n matrix, as
                     returned by DGELQF. See SGELQF for further details.

           C

                     C is DOUBLE PRECISION array, dimension (LDA,N)

           CC

                     CC is DOUBLE PRECISION array, dimension (LDA,N)

           Q

                     Q is DOUBLE PRECISION array, dimension (LDA,N)

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays AF, C, CC, and Q.

           TAU

                     TAU is DOUBLE PRECISION array, dimension (min(M,N))
                     The scalar factors of the elementary reflectors corresponding
                     to the LQ factorization in AF.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The length of WORK.  LWORK must be at least M, and should be
                     M*NB, where NB is the blocksize for this environment.

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (M)

           RESULT

                     RESULT is DOUBLE PRECISION array, dimension (4)
                     The test ratios compare two techniques for multiplying a
                     random matrix C by an n-by-n orthogonal matrix Q.
                     RESULT(1) = norm( Q*C - Q*C )  / ( N * norm(C) * EPS )
                     RESULT(2) = norm( C*Q - C*Q )  / ( N * norm(C) * EPS )
                     RESULT(3) = norm( Q'*C - Q'*C )/ ( N * norm(C) * EPS )
                     RESULT(4) = norm( C*Q' - C*Q' )/ ( N * norm(C) * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dpbt01 (character UPLO, integer N, integer KD, double precision, dimension( lda, *
       ) A, integer LDA, double precision, dimension( ldafac, * ) AFAC, integer LDAFAC, double
       precision, dimension( * ) RWORK, double precision RESID)
       DPBT01

       Purpose:

            DPBT01 reconstructs a symmetric positive definite band matrix A from
            its L*L' or U'*U factorization and computes the residual
               norm( L*L' - A ) / ( N * norm(A) * EPS ) or
               norm( U'*U - A ) / ( N * norm(A) * EPS ),
            where EPS is the machine epsilon, L' is the conjugate transpose of
            L, and U' is the conjugate transpose of U.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     symmetric matrix A is stored:
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           N

                     N is INTEGER
                     The number of rows and columns of the matrix A.  N >= 0.

           KD

                     KD is INTEGER
                     The number of super-diagonals of the matrix A if UPLO = 'U',
                     or the number of sub-diagonals if UPLO = 'L'.  KD >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The original symmetric band matrix A.  If UPLO = 'U', the
                     upper triangular part of A is stored as a band matrix; if
                     UPLO = 'L', the lower triangular part of A is stored.  The
                     columns of the appropriate triangle are stored in the columns
                     of A and the diagonals of the triangle are stored in the rows
                     of A.  See DPBTRF for further details.

           LDA

                     LDA is INTEGER.
                     The leading dimension of the array A.  LDA >= max(1,KD+1).

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (LDAFAC,N)
                     The factored form of the matrix A.  AFAC contains the factor
                     L or U from the L*L' or U'*U factorization in band storage
                     format, as computed by DPBTRF.

           LDAFAC

                     LDAFAC is INTEGER
                     The leading dimension of the array AFAC.
                     LDAFAC >= max(1,KD+1).

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (N)

           RESID

                     RESID is DOUBLE PRECISION
                     If UPLO = 'L', norm(L*L' - A) / ( N * norm(A) * EPS )
                     If UPLO = 'U', norm(U'*U - A) / ( N * norm(A) * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dpbt02 (character UPLO, integer N, integer KD, integer NRHS, double precision,
       dimension( lda, * ) A, integer LDA, double precision, dimension( ldx, * ) X, integer LDX,
       double precision, dimension( ldb, * ) B, integer LDB, double precision, dimension( * )
       RWORK, double precision RESID)
       DPBT02

       Purpose:

            DPBT02 computes the residual for a solution of a symmetric banded
            system of equations  A*x = b:
               RESID = norm( B - A*X ) / ( norm(A) * norm(X) * EPS)
            where EPS is the machine precision.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     symmetric matrix A is stored:
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           N

                     N is INTEGER
                     The number of rows and columns of the matrix A.  N >= 0.

           KD

                     KD is INTEGER
                     The number of super-diagonals of the matrix A if UPLO = 'U',
                     or the number of sub-diagonals if UPLO = 'L'.  KD >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides. NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The original symmetric band matrix A.  If UPLO = 'U', the
                     upper triangular part of A is stored as a band matrix; if
                     UPLO = 'L', the lower triangular part of A is stored.  The
                     columns of the appropriate triangle are stored in the columns
                     of A and the diagonals of the triangle are stored in the rows
                     of A.  See DPBTRF for further details.

           LDA

                     LDA is INTEGER.
                     The leading dimension of the array A.  LDA >= max(1,KD+1).

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors for the system of linear
                     equations.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.   LDX >= max(1,N).

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     On entry, the right hand side vectors for the system of
                     linear equations.
                     On exit, B is overwritten with the difference B - A*X.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (N)

           RESID

                     RESID is DOUBLE PRECISION
                     The maximum over the number of right hand sides of
                     norm(B - A*X) / ( norm(A) * norm(X) * EPS ).

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dpbt05 (character UPLO, integer N, integer KD, integer NRHS, double precision,
       dimension( ldab, * ) AB, integer LDAB, double precision, dimension( ldb, * ) B, integer
       LDB, double precision, dimension( ldx, * ) X, integer LDX, double precision, dimension(
       ldxact, * ) XACT, integer LDXACT, double precision, dimension( * ) FERR, double precision,
       dimension( * ) BERR, double precision, dimension( * ) RESLTS)
       DPBT05

       Purpose:

            DPBT05 tests the error bounds from iterative refinement for the
            computed solution to a system of equations A*X = B, where A is a
            symmetric band matrix.

            RESLTS(1) = test of the error bound
                      = norm(X - XACT) / ( norm(X) * FERR )

            A large value is returned if this ratio is not less than one.

            RESLTS(2) = residual from the iterative refinement routine
                      = the maximum of BERR / ( NZ*EPS + (*) ), where
                        (*) = NZ*UNFL / (min_i (abs(A)*abs(X) +abs(b))_i )
                        and NZ = max. number of nonzeros in any row of A, plus 1

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     symmetric matrix A is stored.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           N

                     N is INTEGER
                     The number of rows of the matrices X, B, and XACT, and the
                     order of the matrix A.  N >= 0.

           KD

                     KD is INTEGER
                     The number of super-diagonals of the matrix A if UPLO = 'U',
                     or the number of sub-diagonals if UPLO = 'L'.  KD >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of the matrices X, B, and XACT.
                     NRHS >= 0.

           AB

                     AB is DOUBLE PRECISION array, dimension (LDAB,N)
                     The upper or lower triangle of the symmetric band matrix A,
                     stored in the first KD+1 rows of the array.  The j-th column
                     of A is stored in the j-th column of the array AB as follows:
                     if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j;
                     if UPLO = 'L', AB(1+i-j,j)    = A(i,j) for j<=i<=min(n,j+kd).

           LDAB

                     LDAB is INTEGER
                     The leading dimension of the array AB.  LDAB >= KD+1.

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     The right hand side vectors for the system of linear
                     equations.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors.  Each vector is stored as a
                     column of the matrix X.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= max(1,N).

           XACT

                     XACT is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The exact solution vectors.  Each vector is stored as a
                     column of the matrix XACT.

           LDXACT

                     LDXACT is INTEGER
                     The leading dimension of the array XACT.  LDXACT >= max(1,N).

           FERR

                     FERR is DOUBLE PRECISION array, dimension (NRHS)
                     The estimated forward error bounds for each solution vector
                     X.  If XTRUE is the true solution, FERR bounds the magnitude
                     of the largest entry in (X - XTRUE) divided by the magnitude
                     of the largest entry in X.

           BERR

                     BERR is DOUBLE PRECISION array, dimension (NRHS)
                     The componentwise relative backward error of each solution
                     vector (i.e., the smallest relative change in any entry of A
                     or B that makes X an exact solution).

           RESLTS

                     RESLTS is DOUBLE PRECISION array, dimension (2)
                     The maximum over the NRHS solution vectors of the ratios:
                     RESLTS(1) = norm(X - XACT) / ( norm(X) * FERR )
                     RESLTS(2) = BERR / ( NZ*EPS + (*) )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dpot01 (character UPLO, integer N, double precision, dimension( lda, * ) A, integer
       LDA, double precision, dimension( ldafac, * ) AFAC, integer LDAFAC, double precision,
       dimension( * ) RWORK, double precision RESID)
       DPOT01

       Purpose:

            DPOT01 reconstructs a symmetric positive definite matrix  A  from
            its L*L' or U'*U factorization and computes the residual
               norm( L*L' - A ) / ( N * norm(A) * EPS ) or
               norm( U'*U - A ) / ( N * norm(A) * EPS ),
            where EPS is the machine epsilon.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     symmetric matrix A is stored:
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           N

                     N is INTEGER
                     The number of rows and columns of the matrix A.  N >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The original symmetric matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,N)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (LDAFAC,N)
                     On entry, the factor L or U from the L*L' or U'*U
                     factorization of A.
                     Overwritten with the reconstructed matrix, and then with the
                     difference L*L' - A (or U'*U - A).

           LDAFAC

                     LDAFAC is INTEGER
                     The leading dimension of the array AFAC.  LDAFAC >= max(1,N).

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (N)

           RESID

                     RESID is DOUBLE PRECISION
                     If UPLO = 'L', norm(L*L' - A) / ( N * norm(A) * EPS )
                     If UPLO = 'U', norm(U'*U - A) / ( N * norm(A) * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dpot02 (character UPLO, integer N, integer NRHS, double precision, dimension( lda,
       * ) A, integer LDA, double precision, dimension( ldx, * ) X, integer LDX, double
       precision, dimension( ldb, * ) B, integer LDB, double precision, dimension( * ) RWORK,
       double precision RESID)
       DPOT02

       Purpose:

            DPOT02 computes the residual for the solution of a symmetric system
            of linear equations  A*x = b:

               RESID = norm(B - A*X) / ( norm(A) * norm(X) * EPS ),

            where EPS is the machine epsilon.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     symmetric matrix A is stored:
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           N

                     N is INTEGER
                     The number of rows and columns of the matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of B, the matrix of right hand sides.
                     NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The original symmetric matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,N)

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors for the system of linear
                     equations.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.   LDX >= max(1,N).

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     On entry, the right hand side vectors for the system of
                     linear equations.
                     On exit, B is overwritten with the difference B - A*X.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (N)

           RESID

                     RESID is DOUBLE PRECISION
                     The maximum over the number of right hand sides of
                     norm(B - A*X) / ( norm(A) * norm(X) * EPS ).

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dpot03 (character UPLO, integer N, double precision, dimension( lda, * ) A, integer
       LDA, double precision, dimension( ldainv, * ) AINV, integer LDAINV, double precision,
       dimension( ldwork, * ) WORK, integer LDWORK, double precision, dimension( * ) RWORK,
       double precision RCOND, double precision RESID)
       DPOT03

       Purpose:

            DPOT03 computes the residual for a symmetric matrix times its
            inverse:
               norm( I - A*AINV ) / ( N * norm(A) * norm(AINV) * EPS ),
            where EPS is the machine epsilon.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     symmetric matrix A is stored:
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           N

                     N is INTEGER
                     The number of rows and columns of the matrix A.  N >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The original symmetric matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,N)

           AINV

                     AINV is DOUBLE PRECISION array, dimension (LDAINV,N)
                     On entry, the inverse of the matrix A, stored as a symmetric
                     matrix in the same format as A.
                     In this version, AINV is expanded into a full matrix and
                     multiplied by A, so the opposing triangle of AINV will be
                     changed; i.e., if the upper triangular part of AINV is
                     stored, the lower triangular part will be used as work space.

           LDAINV

                     LDAINV is INTEGER
                     The leading dimension of the array AINV.  LDAINV >= max(1,N).

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LDWORK,N)

           LDWORK

                     LDWORK is INTEGER
                     The leading dimension of the array WORK.  LDWORK >= max(1,N).

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (N)

           RCOND

                     RCOND is DOUBLE PRECISION
                     The reciprocal of the condition number of A, computed as
                     ( 1/norm(A) ) / norm(AINV).

           RESID

                     RESID is DOUBLE PRECISION
                     norm(I - A*AINV) / ( N * norm(A) * norm(AINV) * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dpot05 (character UPLO, integer N, integer NRHS, double precision, dimension( lda,
       * ) A, integer LDA, double precision, dimension( ldb, * ) B, integer LDB, double
       precision, dimension( ldx, * ) X, integer LDX, double precision, dimension( ldxact, * )
       XACT, integer LDXACT, double precision, dimension( * ) FERR, double precision, dimension(
       * ) BERR, double precision, dimension( * ) RESLTS)
       DPOT05

       Purpose:

            DPOT05 tests the error bounds from iterative refinement for the
            computed solution to a system of equations A*X = B, where A is a
            symmetric n by n matrix.

            RESLTS(1) = test of the error bound
                      = norm(X - XACT) / ( norm(X) * FERR )

            A large value is returned if this ratio is not less than one.

            RESLTS(2) = residual from the iterative refinement routine
                      = the maximum of BERR / ( (n+1)*EPS + (*) ), where
                        (*) = (n+1)*UNFL / (min_i (abs(A)*abs(X) +abs(b))_i )

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     symmetric matrix A is stored.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           N

                     N is INTEGER
                     The number of rows of the matrices X, B, and XACT, and the
                     order of the matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of the matrices X, B, and XACT.
                     NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The symmetric matrix A.  If UPLO = 'U', the leading n by n
                     upper triangular part of A contains the upper triangular part
                     of the matrix A, and the strictly lower triangular part of A
                     is not referenced.  If UPLO = 'L', the leading n by n lower
                     triangular part of A contains the lower triangular part of
                     the matrix A, and the strictly upper triangular part of A is
                     not referenced.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,N).

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     The right hand side vectors for the system of linear
                     equations.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors.  Each vector is stored as a
                     column of the matrix X.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= max(1,N).

           XACT

                     XACT is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The exact solution vectors.  Each vector is stored as a
                     column of the matrix XACT.

           LDXACT

                     LDXACT is INTEGER
                     The leading dimension of the array XACT.  LDXACT >= max(1,N).

           FERR

                     FERR is DOUBLE PRECISION array, dimension (NRHS)
                     The estimated forward error bounds for each solution vector
                     X.  If XTRUE is the true solution, FERR bounds the magnitude
                     of the largest entry in (X - XTRUE) divided by the magnitude
                     of the largest entry in X.

           BERR

                     BERR is DOUBLE PRECISION array, dimension (NRHS)
                     The componentwise relative backward error of each solution
                     vector (i.e., the smallest relative change in any entry of A
                     or B that makes X an exact solution).

           RESLTS

                     RESLTS is DOUBLE PRECISION array, dimension (2)
                     The maximum over the NRHS solution vectors of the ratios:
                     RESLTS(1) = norm(X - XACT) / ( norm(X) * FERR )
                     RESLTS(2) = BERR / ( (n+1)*EPS + (*) )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dpot06 (character UPLO, integer N, integer NRHS, double precision, dimension( lda,
       * ) A, integer LDA, double precision, dimension( ldx, * ) X, integer LDX, double
       precision, dimension( ldb, * ) B, integer LDB, double precision, dimension( * ) RWORK,
       double precision RESID)
       DPOT06

       Purpose:

            DPOT06 computes the residual for a solution of a system of linear
            equations  A*x = b :
               RESID = norm(B - A*X,inf) / ( norm(A,inf) * norm(X,inf) * EPS ),
            where EPS is the machine epsilon.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     symmetric matrix A is stored:
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           N

                     N is INTEGER
                     The number of rows and columns of the matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of B, the matrix of right hand sides.
                     NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The original M x N matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,N).

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors for the system of linear
                     equations.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  If TRANS = 'N',
                     LDX >= max(1,N); if TRANS = 'T' or 'C', LDX >= max(1,N).

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     On entry, the right hand side vectors for the system of
                     linear equations.
                     On exit, B is overwritten with the difference B - A*X.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  IF TRANS = 'N',
                     LDB >= max(1,M); if TRANS = 'T' or 'C', LDB >= max(1,N).

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (N)

           RESID

                     RESID is DOUBLE PRECISION
                     The maximum over the number of right hand sides of
                     norm(B - A*X) / ( norm(A) * norm(X) * EPS ).

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dppt01 (character UPLO, integer N, double precision, dimension( * ) A, double
       precision, dimension( * ) AFAC, double precision, dimension( * ) RWORK, double precision
       RESID)
       DPPT01

       Purpose:

            DPPT01 reconstructs a symmetric positive definite packed matrix A
            from its L*L' or U'*U factorization and computes the residual
               norm( L*L' - A ) / ( N * norm(A) * EPS ) or
               norm( U'*U - A ) / ( N * norm(A) * EPS ),
            where EPS is the machine epsilon.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     symmetric matrix A is stored:
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           N

                     N is INTEGER
                     The number of rows and columns of the matrix A.  N >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (N*(N+1)/2)
                     The original symmetric matrix A, stored as a packed
                     triangular matrix.

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (N*(N+1)/2)
                     On entry, the factor L or U from the L*L' or U'*U
                     factorization of A, stored as a packed triangular matrix.
                     Overwritten with the reconstructed matrix, and then with the
                     difference L*L' - A (or U'*U - A).

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (N)

           RESID

                     RESID is DOUBLE PRECISION
                     If UPLO = 'L', norm(L*L' - A) / ( N * norm(A) * EPS )
                     If UPLO = 'U', norm(U'*U - A) / ( N * norm(A) * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dppt02 (character UPLO, integer N, integer NRHS, double precision, dimension( * )
       A, double precision, dimension( ldx, * ) X, integer LDX, double precision, dimension( ldb,
       * ) B, integer LDB, double precision, dimension( * ) RWORK, double precision RESID)
       DPPT02

       Purpose:

            DPPT02 computes the residual in the solution of a symmetric system
            of linear equations  A*x = b  when packed storage is used for the
            coefficient matrix.  The ratio computed is

               RESID = norm(B - A*X) / ( norm(A) * norm(X) * EPS),

            where EPS is the machine precision.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     symmetric matrix A is stored:
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           N

                     N is INTEGER
                     The number of rows and columns of the matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of B, the matrix of right hand sides.
                     NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (N*(N+1)/2)
                     The original symmetric matrix A, stored as a packed
                     triangular matrix.

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors for the system of linear
                     equations.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.   LDX >= max(1,N).

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     On entry, the right hand side vectors for the system of
                     linear equations.
                     On exit, B is overwritten with the difference B - A*X.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (N)

           RESID

                     RESID is DOUBLE PRECISION
                     The maximum over the number of right hand sides of
                     norm(B - A*X) / ( norm(A) * norm(X) * EPS ).

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dppt03 (character UPLO, integer N, double precision, dimension( * ) A, double
       precision, dimension( * ) AINV, double precision, dimension( ldwork, * ) WORK, integer
       LDWORK, double precision, dimension( * ) RWORK, double precision RCOND, double precision
       RESID)
       DPPT03

       Purpose:

            DPPT03 computes the residual for a symmetric packed matrix times its
            inverse:
               norm( I - A*AINV ) / ( N * norm(A) * norm(AINV) * EPS ),
            where EPS is the machine epsilon.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     symmetric matrix A is stored:
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           N

                     N is INTEGER
                     The number of rows and columns of the matrix A.  N >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (N*(N+1)/2)
                     The original symmetric matrix A, stored as a packed
                     triangular matrix.

           AINV

                     AINV is DOUBLE PRECISION array, dimension (N*(N+1)/2)
                     The (symmetric) inverse of the matrix A, stored as a packed
                     triangular matrix.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LDWORK,N)

           LDWORK

                     LDWORK is INTEGER
                     The leading dimension of the array WORK.  LDWORK >= max(1,N).

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (N)

           RCOND

                     RCOND is DOUBLE PRECISION
                     The reciprocal of the condition number of A, computed as
                     ( 1/norm(A) ) / norm(AINV).

           RESID

                     RESID is DOUBLE PRECISION
                     norm(I - A*AINV) / ( N * norm(A) * norm(AINV) * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dppt05 (character UPLO, integer N, integer NRHS, double precision, dimension( * )
       AP, double precision, dimension( ldb, * ) B, integer LDB, double precision, dimension(
       ldx, * ) X, integer LDX, double precision, dimension( ldxact, * ) XACT, integer LDXACT,
       double precision, dimension( * ) FERR, double precision, dimension( * ) BERR, double
       precision, dimension( * ) RESLTS)
       DPPT05

       Purpose:

            DPPT05 tests the error bounds from iterative refinement for the
            computed solution to a system of equations A*X = B, where A is a
            symmetric matrix in packed storage format.

            RESLTS(1) = test of the error bound
                      = norm(X - XACT) / ( norm(X) * FERR )

            A large value is returned if this ratio is not less than one.

            RESLTS(2) = residual from the iterative refinement routine
                      = the maximum of BERR / ( (n+1)*EPS + (*) ), where
                        (*) = (n+1)*UNFL / (min_i (abs(A)*abs(X) +abs(b))_i )

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     symmetric matrix A is stored.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           N

                     N is INTEGER
                     The number of rows of the matrices X, B, and XACT, and the
                     order of the matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of the matrices X, B, and XACT.
                     NRHS >= 0.

           AP

                     AP is DOUBLE PRECISION array, dimension (N*(N+1)/2)
                     The upper or lower triangle of the symmetric matrix A, packed
                     columnwise in a linear array.  The j-th column of A is stored
                     in the array AP as follows:
                     if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
                     if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     The right hand side vectors for the system of linear
                     equations.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors.  Each vector is stored as a
                     column of the matrix X.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= max(1,N).

           XACT

                     XACT is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The exact solution vectors.  Each vector is stored as a
                     column of the matrix XACT.

           LDXACT

                     LDXACT is INTEGER
                     The leading dimension of the array XACT.  LDXACT >= max(1,N).

           FERR

                     FERR is DOUBLE PRECISION array, dimension (NRHS)
                     The estimated forward error bounds for each solution vector
                     X.  If XTRUE is the true solution, FERR bounds the magnitude
                     of the largest entry in (X - XTRUE) divided by the magnitude
                     of the largest entry in X.

           BERR

                     BERR is DOUBLE PRECISION array, dimension (NRHS)
                     The componentwise relative backward error of each solution
                     vector (i.e., the smallest relative change in any entry of A
                     or B that makes X an exact solution).

           RESLTS

                     RESLTS is DOUBLE PRECISION array, dimension (2)
                     The maximum over the NRHS solution vectors of the ratios:
                     RESLTS(1) = norm(X - XACT) / ( norm(X) * FERR )
                     RESLTS(2) = BERR / ( (n+1)*EPS + (*) )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dpst01 (character UPLO, integer N, double precision, dimension( lda, * ) A, integer
       LDA, double precision, dimension( ldafac, * ) AFAC, integer LDAFAC, double precision,
       dimension( ldperm, * ) PERM, integer LDPERM, integer, dimension( * ) PIV, double
       precision, dimension( * ) RWORK, double precision RESID, integer RANK)
       DPST01

       Purpose:

            DPST01 reconstructs a symmetric positive semidefinite matrix A
            from its L or U factors and the permutation matrix P and computes
            the residual
               norm( P*L*L'*P' - A ) / ( N * norm(A) * EPS ) or
               norm( P*U'*U*P' - A ) / ( N * norm(A) * EPS ),
            where EPS is the machine epsilon.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     symmetric matrix A is stored:
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           N

                     N is INTEGER
                     The number of rows and columns of the matrix A.  N >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The original symmetric matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,N)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (LDAFAC,N)
                     The factor L or U from the L*L' or U'*U
                     factorization of A.

           LDAFAC

                     LDAFAC is INTEGER
                     The leading dimension of the array AFAC.  LDAFAC >= max(1,N).

           PERM

                     PERM is DOUBLE PRECISION array, dimension (LDPERM,N)
                     Overwritten with the reconstructed matrix, and then with the
                     difference P*L*L'*P' - A (or P*U'*U*P' - A)

           LDPERM

                     LDPERM is INTEGER
                     The leading dimension of the array PERM.
                     LDAPERM >= max(1,N).

           PIV

                     PIV is INTEGER array, dimension (N)
                     PIV is such that the nonzero entries are
                     P( PIV( K ), K ) = 1.

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (N)

           RESID

                     RESID is DOUBLE PRECISION
                     If UPLO = 'L', norm(L*L' - A) / ( N * norm(A) * EPS )
                     If UPLO = 'U', norm(U'*U - A) / ( N * norm(A) * EPS )

           RANK

                     RANK is INTEGER
                     number of nonzero singular values of A.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dptt01 (integer N, double precision, dimension( * ) D, double precision, dimension(
       * ) E, double precision, dimension( * ) DF, double precision, dimension( * ) EF, double
       precision, dimension( * ) WORK, double precision RESID)
       DPTT01

       Purpose:

            DPTT01 reconstructs a tridiagonal matrix A from its L*D*L'
            factorization and computes the residual
               norm(L*D*L' - A) / ( n * norm(A) * EPS ),
            where EPS is the machine epsilon.

       Parameters:
           N

                     N is INTEGTER
                     The order of the matrix A.

           D

                     D is DOUBLE PRECISION array, dimension (N)
                     The n diagonal elements of the tridiagonal matrix A.

           E

                     E is DOUBLE PRECISION array, dimension (N-1)
                     The (n-1) subdiagonal elements of the tridiagonal matrix A.

           DF

                     DF is DOUBLE PRECISION array, dimension (N)
                     The n diagonal elements of the factor L from the L*D*L'
                     factorization of A.

           EF

                     EF is DOUBLE PRECISION array, dimension (N-1)
                     The (n-1) subdiagonal elements of the factor L from the
                     L*D*L' factorization of A.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (2*N)

           RESID

                     RESID is DOUBLE PRECISION
                     norm(L*D*L' - A) / (n * norm(A) * EPS)

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dptt02 (integer N, integer NRHS, double precision, dimension( * ) D, double
       precision, dimension( * ) E, double precision, dimension( ldx, * ) X, integer LDX, double
       precision, dimension( ldb, * ) B, integer LDB, double precision RESID)
       DPTT02

       Purpose:

            DPTT02 computes the residual for the solution to a symmetric
            tridiagonal system of equations:
               RESID = norm(B - A*X) / (norm(A) * norm(X) * EPS),
            where EPS is the machine epsilon.

       Parameters:
           N

                     N is INTEGTER
                     The order of the matrix A.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides, i.e., the number of columns
                     of the matrices B and X.  NRHS >= 0.

           D

                     D is DOUBLE PRECISION array, dimension (N)
                     The n diagonal elements of the tridiagonal matrix A.

           E

                     E is DOUBLE PRECISION array, dimension (N-1)
                     The (n-1) subdiagonal elements of the tridiagonal matrix A.

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The n by nrhs matrix of solution vectors X.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= max(1,N).

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     On entry, the n by nrhs matrix of right hand side vectors B.
                     On exit, B is overwritten with the difference B - A*X.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           RESID

                     RESID is DOUBLE PRECISION
                     norm(B - A*X) / (norm(A) * norm(X) * EPS)

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dptt05 (integer N, integer NRHS, double precision, dimension( * ) D, double
       precision, dimension( * ) E, double precision, dimension( ldb, * ) B, integer LDB, double
       precision, dimension( ldx, * ) X, integer LDX, double precision, dimension( ldxact, * )
       XACT, integer LDXACT, double precision, dimension( * ) FERR, double precision, dimension(
       * ) BERR, double precision, dimension( * ) RESLTS)
       DPTT05

       Purpose:

            DPTT05 tests the error bounds from iterative refinement for the
            computed solution to a system of equations A*X = B, where A is a
            symmetric tridiagonal matrix of order n.

            RESLTS(1) = test of the error bound
                      = norm(X - XACT) / ( norm(X) * FERR )

            A large value is returned if this ratio is not less than one.

            RESLTS(2) = residual from the iterative refinement routine
                      = the maximum of BERR / ( NZ*EPS + (*) ), where
                        (*) = NZ*UNFL / (min_i (abs(A)*abs(X) +abs(b))_i )
                        and NZ = max. number of nonzeros in any row of A, plus 1

       Parameters:
           N

                     N is INTEGER
                     The number of rows of the matrices X, B, and XACT, and the
                     order of the matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of the matrices X, B, and XACT.
                     NRHS >= 0.

           D

                     D is DOUBLE PRECISION array, dimension (N)
                     The n diagonal elements of the tridiagonal matrix A.

           E

                     E is DOUBLE PRECISION array, dimension (N-1)
                     The (n-1) subdiagonal elements of the tridiagonal matrix A.

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     The right hand side vectors for the system of linear
                     equations.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors.  Each vector is stored as a
                     column of the matrix X.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= max(1,N).

           XACT

                     XACT is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The exact solution vectors.  Each vector is stored as a
                     column of the matrix XACT.

           LDXACT

                     LDXACT is INTEGER
                     The leading dimension of the array XACT.  LDXACT >= max(1,N).

           FERR

                     FERR is DOUBLE PRECISION array, dimension (NRHS)
                     The estimated forward error bounds for each solution vector
                     X.  If XTRUE is the true solution, FERR bounds the magnitude
                     of the largest entry in (X - XTRUE) divided by the magnitude
                     of the largest entry in X.

           BERR

                     BERR is DOUBLE PRECISION array, dimension (NRHS)
                     The componentwise relative backward error of each solution
                     vector (i.e., the smallest relative change in any entry of A
                     or B that makes X an exact solution).

           RESLTS

                     RESLTS is DOUBLE PRECISION array, dimension (2)
                     The maximum over the NRHS solution vectors of the ratios:
                     RESLTS(1) = norm(X - XACT) / ( norm(X) * FERR )
                     RESLTS(2) = BERR / ( NZ*EPS + (*) )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dqlt01 (integer M, integer N, double precision, dimension( lda, * ) A, double
       precision, dimension( lda, * ) AF, double precision, dimension( lda, * ) Q, double
       precision, dimension( lda, * ) L, integer LDA, double precision, dimension( * ) TAU,
       double precision, dimension( lwork ) WORK, integer LWORK, double precision, dimension( * )
       RWORK, double precision, dimension( * ) RESULT)
       DQLT01

       Purpose:

            DQLT01 tests DGEQLF, which computes the QL factorization of an m-by-n
            matrix A, and partially tests DORGQL which forms the m-by-m
            orthogonal matrix Q.

            DQLT01 compares L with Q'*A, and checks that Q is orthogonal.

       Parameters:
           M

                     M is INTEGER
                     The number of rows of the matrix A.  M >= 0.

           N

                     N is INTEGER
                     The number of columns of the matrix A.  N >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The m-by-n matrix A.

           AF

                     AF is DOUBLE PRECISION array, dimension (LDA,N)
                     Details of the QL factorization of A, as returned by DGEQLF.
                     See DGEQLF for further details.

           Q

                     Q is DOUBLE PRECISION array, dimension (LDA,M)
                     The m-by-m orthogonal matrix Q.

           L

                     L is DOUBLE PRECISION array, dimension (LDA,max(M,N))

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays A, AF, Q and R.
                     LDA >= max(M,N).

           TAU

                     TAU is DOUBLE PRECISION array, dimension (min(M,N))
                     The scalar factors of the elementary reflectors, as returned
                     by DGEQLF.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The dimension of the array WORK.

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (M)

           RESULT

                     RESULT is DOUBLE PRECISION array, dimension (2)
                     The test ratios:
                     RESULT(1) = norm( L - Q'*A ) / ( M * norm(A) * EPS )
                     RESULT(2) = norm( I - Q'*Q ) / ( M * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dqlt02 (integer M, integer N, integer K, double precision, dimension( lda, * ) A,
       double precision, dimension( lda, * ) AF, double precision, dimension( lda, * ) Q, double
       precision, dimension( lda, * ) L, integer LDA, double precision, dimension( * ) TAU,
       double precision, dimension( lwork ) WORK, integer LWORK, double precision, dimension( * )
       RWORK, double precision, dimension( * ) RESULT)
       DQLT02

       Purpose:

            DQLT02 tests DORGQL, which generates an m-by-n matrix Q with
            orthonornmal columns that is defined as the product of k elementary
            reflectors.

            Given the QL factorization of an m-by-n matrix A, DQLT02 generates
            the orthogonal matrix Q defined by the factorization of the last k
            columns of A; it compares L(m-n+1:m,n-k+1:n) with
            Q(1:m,m-n+1:m)'*A(1:m,n-k+1:n), and checks that the columns of Q are
            orthonormal.

       Parameters:
           M

                     M is INTEGER
                     The number of rows of the matrix Q to be generated.  M >= 0.

           N

                     N is INTEGER
                     The number of columns of the matrix Q to be generated.
                     M >= N >= 0.

           K

                     K is INTEGER
                     The number of elementary reflectors whose product defines the
                     matrix Q. N >= K >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The m-by-n matrix A which was factorized by DQLT01.

           AF

                     AF is DOUBLE PRECISION array, dimension (LDA,N)
                     Details of the QL factorization of A, as returned by DGEQLF.
                     See DGEQLF for further details.

           Q

                     Q is DOUBLE PRECISION array, dimension (LDA,N)

           L

                     L is DOUBLE PRECISION array, dimension (LDA,N)

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays A, AF, Q and L. LDA >= M.

           TAU

                     TAU is DOUBLE PRECISION array, dimension (N)
                     The scalar factors of the elementary reflectors corresponding
                     to the QL factorization in AF.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The dimension of the array WORK.

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (M)

           RESULT

                     RESULT is DOUBLE PRECISION array, dimension (2)
                     The test ratios:
                     RESULT(1) = norm( L - Q'*A ) / ( M * norm(A) * EPS )
                     RESULT(2) = norm( I - Q'*Q ) / ( M * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dqlt03 (integer M, integer N, integer K, double precision, dimension( lda, * ) AF,
       double precision, dimension( lda, * ) C, double precision, dimension( lda, * ) CC, double
       precision, dimension( lda, * ) Q, integer LDA, double precision, dimension( * ) TAU,
       double precision, dimension( lwork ) WORK, integer LWORK, double precision, dimension( * )
       RWORK, double precision, dimension( * ) RESULT)
       DQLT03

       Purpose:

            DQLT03 tests DORMQL, which computes Q*C, Q'*C, C*Q or C*Q'.

            DQLT03 compares the results of a call to DORMQL with the results of
            forming Q explicitly by a call to DORGQL and then performing matrix
            multiplication by a call to DGEMM.

       Parameters:
           M

                     M is INTEGER
                     The order of the orthogonal matrix Q.  M >= 0.

           N

                     N is INTEGER
                     The number of rows or columns of the matrix C; C is m-by-n if
                     Q is applied from the left, or n-by-m if Q is applied from
                     the right.  N >= 0.

           K

                     K is INTEGER
                     The number of elementary reflectors whose product defines the
                     orthogonal matrix Q.  M >= K >= 0.

           AF

                     AF is DOUBLE PRECISION array, dimension (LDA,N)
                     Details of the QL factorization of an m-by-n matrix, as
                     returned by DGEQLF. See SGEQLF for further details.

           C

                     C is DOUBLE PRECISION array, dimension (LDA,N)

           CC

                     CC is DOUBLE PRECISION array, dimension (LDA,N)

           Q

                     Q is DOUBLE PRECISION array, dimension (LDA,M)

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays AF, C, CC, and Q.

           TAU

                     TAU is DOUBLE PRECISION array, dimension (min(M,N))
                     The scalar factors of the elementary reflectors corresponding
                     to the QL factorization in AF.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The length of WORK.  LWORK must be at least M, and should be
                     M*NB, where NB is the blocksize for this environment.

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (M)

           RESULT

                     RESULT is DOUBLE PRECISION array, dimension (4)
                     The test ratios compare two techniques for multiplying a
                     random matrix C by an m-by-m orthogonal matrix Q.
                     RESULT(1) = norm( Q*C - Q*C )  / ( M * norm(C) * EPS )
                     RESULT(2) = norm( C*Q - C*Q )  / ( M * norm(C) * EPS )
                     RESULT(3) = norm( Q'*C - Q'*C )/ ( M * norm(C) * EPS )
                     RESULT(4) = norm( C*Q' - C*Q' )/ ( M * norm(C) * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   double precision function dqpt01 (integer M, integer N, integer K, double precision,
       dimension( lda, * ) A, double precision, dimension( lda, * ) AF, integer LDA, double
       precision, dimension( * ) TAU, integer, dimension( * ) JPVT, double precision, dimension(
       lwork ) WORK, integer LWORK)
       DQPT01

       Purpose:

            DQPT01 tests the QR-factorization with pivoting of a matrix A.  The
            array AF contains the (possibly partial) QR-factorization of A, where
            the upper triangle of AF(1:k,1:k) is a partial triangular factor,
            the entries below the diagonal in the first k columns are the
            Householder vectors, and the rest of AF contains a partially updated
            matrix.

            This function returns ||A*P - Q*R||/(||norm(A)||*eps*M)

       Parameters:
           M

                     M is INTEGER
                     The number of rows of the matrices A and AF.

           N

                     N is INTEGER
                     The number of columns of the matrices A and AF.

           K

                     K is INTEGER
                     The number of columns of AF that have been reduced
                     to upper triangular form.

           A

                     A is DOUBLE PRECISION array, dimension (LDA, N)
                     The original matrix A.

           AF

                     AF is DOUBLE PRECISION array, dimension (LDA,N)
                     The (possibly partial) output of DGEQPF.  The upper triangle
                     of AF(1:k,1:k) is a partial triangular factor, the entries
                     below the diagonal in the first k columns are the Householder
                     vectors, and the rest of AF contains a partially updated
                     matrix.

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays A and AF.

           TAU

                     TAU is DOUBLE PRECISION array, dimension (K)
                     Details of the Householder transformations as returned by
                     DGEQPF.

           JPVT

                     JPVT is INTEGER array, dimension (N)
                     Pivot information as returned by DGEQPF.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The length of the array WORK.  LWORK >= M*N+N.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dqrt01 (integer M, integer N, double precision, dimension( lda, * ) A, double
       precision, dimension( lda, * ) AF, double precision, dimension( lda, * ) Q, double
       precision, dimension( lda, * ) R, integer LDA, double precision, dimension( * ) TAU,
       double precision, dimension( lwork ) WORK, integer LWORK, double precision, dimension( * )
       RWORK, double precision, dimension( * ) RESULT)
       DQRT01

       Purpose:

            DQRT01 tests DGEQRF, which computes the QR factorization of an m-by-n
            matrix A, and partially tests DORGQR which forms the m-by-m
            orthogonal matrix Q.

            DQRT01 compares R with Q'*A, and checks that Q is orthogonal.

       Parameters:
           M

                     M is INTEGER
                     The number of rows of the matrix A.  M >= 0.

           N

                     N is INTEGER
                     The number of columns of the matrix A.  N >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The m-by-n matrix A.

           AF

                     AF is DOUBLE PRECISION array, dimension (LDA,N)
                     Details of the QR factorization of A, as returned by DGEQRF.
                     See DGEQRF for further details.

           Q

                     Q is DOUBLE PRECISION array, dimension (LDA,M)
                     The m-by-m orthogonal matrix Q.

           R

                     R is DOUBLE PRECISION array, dimension (LDA,max(M,N))

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays A, AF, Q and R.
                     LDA >= max(M,N).

           TAU

                     TAU is DOUBLE PRECISION array, dimension (min(M,N))
                     The scalar factors of the elementary reflectors, as returned
                     by DGEQRF.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The dimension of the array WORK.

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (M)

           RESULT

                     RESULT is DOUBLE PRECISION array, dimension (2)
                     The test ratios:
                     RESULT(1) = norm( R - Q'*A ) / ( M * norm(A) * EPS )
                     RESULT(2) = norm( I - Q'*Q ) / ( M * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dqrt01p (integer M, integer N, double precision, dimension( lda, * ) A, double
       precision, dimension( lda, * ) AF, double precision, dimension( lda, * ) Q, double
       precision, dimension( lda, * ) R, integer LDA, double precision, dimension( * ) TAU,
       double precision, dimension( lwork ) WORK, integer LWORK, double precision, dimension( * )
       RWORK, double precision, dimension( * ) RESULT)
       DQRT01P

       Purpose:

            DQRT01P tests DGEQRFP, which computes the QR factorization of an m-by-n
            matrix A, and partially tests DORGQR which forms the m-by-m
            orthogonal matrix Q.

            DQRT01P compares R with Q'*A, and checks that Q is orthogonal.

       Parameters:
           M

                     M is INTEGER
                     The number of rows of the matrix A.  M >= 0.

           N

                     N is INTEGER
                     The number of columns of the matrix A.  N >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The m-by-n matrix A.

           AF

                     AF is DOUBLE PRECISION array, dimension (LDA,N)
                     Details of the QR factorization of A, as returned by DGEQRFP.
                     See DGEQRFP for further details.

           Q

                     Q is DOUBLE PRECISION array, dimension (LDA,M)
                     The m-by-m orthogonal matrix Q.

           R

                     R is DOUBLE PRECISION array, dimension (LDA,max(M,N))

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays A, AF, Q and R.
                     LDA >= max(M,N).

           TAU

                     TAU is DOUBLE PRECISION array, dimension (min(M,N))
                     The scalar factors of the elementary reflectors, as returned
                     by DGEQRFP.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The dimension of the array WORK.

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (M)

           RESULT

                     RESULT is DOUBLE PRECISION array, dimension (2)
                     The test ratios:
                     RESULT(1) = norm( R - Q'*A ) / ( M * norm(A) * EPS )
                     RESULT(2) = norm( I - Q'*Q ) / ( M * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dqrt02 (integer M, integer N, integer K, double precision, dimension( lda, * ) A,
       double precision, dimension( lda, * ) AF, double precision, dimension( lda, * ) Q, double
       precision, dimension( lda, * ) R, integer LDA, double precision, dimension( * ) TAU,
       double precision, dimension( lwork ) WORK, integer LWORK, double precision, dimension( * )
       RWORK, double precision, dimension( * ) RESULT)
       DQRT02

       Purpose:

            DQRT02 tests DORGQR, which generates an m-by-n matrix Q with
            orthonornmal columns that is defined as the product of k elementary
            reflectors.

            Given the QR factorization of an m-by-n matrix A, DQRT02 generates
            the orthogonal matrix Q defined by the factorization of the first k
            columns of A; it compares R(1:n,1:k) with Q(1:m,1:n)'*A(1:m,1:k),
            and checks that the columns of Q are orthonormal.

       Parameters:
           M

                     M is INTEGER
                     The number of rows of the matrix Q to be generated.  M >= 0.

           N

                     N is INTEGER
                     The number of columns of the matrix Q to be generated.
                     M >= N >= 0.

           K

                     K is INTEGER
                     The number of elementary reflectors whose product defines the
                     matrix Q. N >= K >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The m-by-n matrix A which was factorized by DQRT01.

           AF

                     AF is DOUBLE PRECISION array, dimension (LDA,N)
                     Details of the QR factorization of A, as returned by DGEQRF.
                     See DGEQRF for further details.

           Q

                     Q is DOUBLE PRECISION array, dimension (LDA,N)

           R

                     R is DOUBLE PRECISION array, dimension (LDA,N)

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays A, AF, Q and R. LDA >= M.

           TAU

                     TAU is DOUBLE PRECISION array, dimension (N)
                     The scalar factors of the elementary reflectors corresponding
                     to the QR factorization in AF.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The dimension of the array WORK.

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (M)

           RESULT

                     RESULT is DOUBLE PRECISION array, dimension (2)
                     The test ratios:
                     RESULT(1) = norm( R - Q'*A ) / ( M * norm(A) * EPS )
                     RESULT(2) = norm( I - Q'*Q ) / ( M * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dqrt03 (integer M, integer N, integer K, double precision, dimension( lda, * ) AF,
       double precision, dimension( lda, * ) C, double precision, dimension( lda, * ) CC, double
       precision, dimension( lda, * ) Q, integer LDA, double precision, dimension( * ) TAU,
       double precision, dimension( lwork ) WORK, integer LWORK, double precision, dimension( * )
       RWORK, double precision, dimension( * ) RESULT)
       DQRT03

       Purpose:

            DQRT03 tests DORMQR, which computes Q*C, Q'*C, C*Q or C*Q'.

            DQRT03 compares the results of a call to DORMQR with the results of
            forming Q explicitly by a call to DORGQR and then performing matrix
            multiplication by a call to DGEMM.

       Parameters:
           M

                     M is INTEGER
                     The order of the orthogonal matrix Q.  M >= 0.

           N

                     N is INTEGER
                     The number of rows or columns of the matrix C; C is m-by-n if
                     Q is applied from the left, or n-by-m if Q is applied from
                     the right.  N >= 0.

           K

                     K is INTEGER
                     The number of elementary reflectors whose product defines the
                     orthogonal matrix Q.  M >= K >= 0.

           AF

                     AF is DOUBLE PRECISION array, dimension (LDA,N)
                     Details of the QR factorization of an m-by-n matrix, as
                     returned by DGEQRF. See DGEQRF for further details.

           C

                     C is DOUBLE PRECISION array, dimension (LDA,N)

           CC

                     CC is DOUBLE PRECISION array, dimension (LDA,N)

           Q

                     Q is DOUBLE PRECISION array, dimension (LDA,M)

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays AF, C, CC, and Q.

           TAU

                     TAU is DOUBLE PRECISION array, dimension (min(M,N))
                     The scalar factors of the elementary reflectors corresponding
                     to the QR factorization in AF.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The length of WORK.  LWORK must be at least M, and should be
                     M*NB, where NB is the blocksize for this environment.

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (M)

           RESULT

                     RESULT is DOUBLE PRECISION array, dimension (4)
                     The test ratios compare two techniques for multiplying a
                     random matrix C by an m-by-m orthogonal matrix Q.
                     RESULT(1) = norm( Q*C - Q*C )  / ( M * norm(C) * EPS )
                     RESULT(2) = norm( C*Q - C*Q )  / ( M * norm(C) * EPS )
                     RESULT(3) = norm( Q'*C - Q'*C )/ ( M * norm(C) * EPS )
                     RESULT(4) = norm( C*Q' - C*Q' )/ ( M * norm(C) * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2015

   subroutine dqrt04 (integer M, integer N, integer NB, double precision, dimension(6) RESULT)
       DQRT04

       Purpose:

            DQRT04 tests DGEQRT and DGEMQRT.

       Parameters:
           M

                     M is INTEGER
                     Number of rows in test matrix.

           N

                     N is INTEGER
                     Number of columns in test matrix.

           NB

                     NB is INTEGER
                     Block size of test matrix.  NB <= Min(M,N).

           RESULT

                     RESULT is DOUBLE PRECISION array, dimension (6)
                     Results of each of the six tests below.

                     RESULT(1) = | A - Q R |
                     RESULT(2) = | I - Q^H Q |
                     RESULT(3) = | Q C - Q C |
                     RESULT(4) = | Q^H C - Q^H C |
                     RESULT(5) = | C Q - C Q |
                     RESULT(6) = | C Q^H - C Q^H |

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           April 2012

   subroutine dqrt05 (integer M, integer N, integer L, integer NB, double precision, dimension(6)
       RESULT)
       DQRT05

       Purpose:

            DQRT05 tests DTPQRT and DTPMQRT.

       Parameters:
           M

                     M is INTEGER
                     Number of rows in lower part of the test matrix.

           N

                     N is INTEGER
                     Number of columns in test matrix.

           L

                     L is INTEGER
                     The number of rows of the upper trapezoidal part the
                     lower test matrix.  0 <= L <= M.

           NB

                     NB is INTEGER
                     Block size of test matrix.  NB <= N.

           RESULT

                     RESULT is DOUBLE PRECISION array, dimension (6)
                     Results of each of the six tests below.

                     RESULT(1) = | A - Q R |
                     RESULT(2) = | I - Q^H Q |
                     RESULT(3) = | Q C - Q C |
                     RESULT(4) = | Q^H C - Q^H C |
                     RESULT(5) = | C Q - C Q |
                     RESULT(6) = | C Q^H - C Q^H |

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           April 2012

   double precision function dqrt11 (integer M, integer K, double precision, dimension( lda, * )
       A, integer LDA, double precision, dimension( * ) TAU, double precision, dimension( lwork )
       WORK, integer LWORK)
       DQRT11

       Purpose:

            DQRT11 computes the test ratio

                  || Q'*Q - I || / (eps * m)

            where the orthogonal matrix Q is represented as a product of
            elementary transformations.  Each transformation has the form

               H(k) = I - tau(k) v(k) v(k)'

            where tau(k) is stored in TAU(k) and v(k) is an m-vector of the form
            [ 0 ... 0 1 x(k) ]', where x(k) is a vector of length m-k stored
            in A(k+1:m,k).

       Parameters:
           M

                     M is INTEGER
                     The number of rows of the matrix A.

           K

                     K is INTEGER
                     The number of columns of A whose subdiagonal entries
                     contain information about orthogonal transformations.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,K)
                     The (possibly partial) output of a QR reduction routine.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.

           TAU

                     TAU is DOUBLE PRECISION array, dimension (K)
                     The scaling factors tau for the elementary transformations as
                     computed by the QR factorization routine.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The length of the array WORK.  LWORK >= M*M + M.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   double precision function dqrt12 (integer M, integer N, double precision, dimension( lda, * )
       A, integer LDA, double precision, dimension( * ) S, double precision, dimension( lwork )
       WORK, integer LWORK)
       DQRT12

       Purpose:

            DQRT12 computes the singular values `svlues' of the upper trapezoid
            of A(1:M,1:N) and returns the ratio

                 || s - svlues||/(||svlues||*eps*max(M,N))

       Parameters:
           M

                     M is INTEGER
                     The number of rows of the matrix A.

           N

                     N is INTEGER
                     The number of columns of the matrix A.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The M-by-N matrix A. Only the upper trapezoid is referenced.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.

           S

                     S is DOUBLE PRECISION array, dimension (min(M,N))
                     The singular values of the matrix A.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The length of the array WORK. LWORK >= max(M*N + 4*min(M,N) +
                     max(M,N), M*N+2*MIN( M, N )+4*N).

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dqrt13 (integer SCALE, integer M, integer N, double precision, dimension( lda, * )
       A, integer LDA, double precision NORMA, integer, dimension( 4 ) ISEED)
       DQRT13

       Purpose:

            DQRT13 generates a full-rank matrix that may be scaled to have large
            or small norm.

       Parameters:
           SCALE

                     SCALE is INTEGER
                     SCALE = 1: normally scaled matrix
                     SCALE = 2: matrix scaled up
                     SCALE = 3: matrix scaled down

           M

                     M is INTEGER
                     The number of rows of the matrix A.

           N

                     N is INTEGER
                     The number of columns of A.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The M-by-N matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.

           NORMA

                     NORMA is DOUBLE PRECISION
                     The one-norm of A.

           ISEED

                     ISEED is integer array, dimension (4)
                     Seed for random number generator

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   double precision function dqrt14 (character TRANS, integer M, integer N, integer NRHS, double
       precision, dimension( lda, * ) A, integer LDA, double precision, dimension( ldx, * ) X,
       integer LDX, double precision, dimension( lwork ) WORK, integer LWORK)
       DQRT14

       Purpose:

            DQRT14 checks whether X is in the row space of A or A'.  It does so
            by scaling both X and A such that their norms are in the range
            [sqrt(eps), 1/sqrt(eps)], then computing a QR factorization of [A,X]
            (if TRANS = 'T') or an LQ factorization of [A',X]' (if TRANS = 'N'),
            and returning the norm of the trailing triangle, scaled by
            MAX(M,N,NRHS)*eps.

       Parameters:
           TRANS

                     TRANS is CHARACTER*1
                     = 'N':  No transpose, check for X in the row space of A
                     = 'T':  Transpose, check for X in the row space of A'.

           M

                     M is INTEGER
                     The number of rows of the matrix A.

           N

                     N is INTEGER
                     The number of columns of the matrix A.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides, i.e., the number of columns
                     of X.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The M-by-N matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     If TRANS = 'N', the N-by-NRHS matrix X.
                     IF TRANS = 'T', the M-by-NRHS matrix X.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.

           WORK

                     WORK is DOUBLE PRECISION array dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     length of workspace array required
                     If TRANS = 'N', LWORK >= (M+NRHS)*(N+2);
                     if TRANS = 'T', LWORK >= (N+NRHS)*(M+2).

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dqrt15 (integer SCALE, integer RKSEL, integer M, integer N, integer NRHS, double
       precision, dimension( lda, * ) A, integer LDA, double precision, dimension( ldb, * ) B,
       integer LDB, double precision, dimension( * ) S, integer RANK, double precision NORMA,
       double precision NORMB, integer, dimension( 4 ) ISEED, double precision, dimension( lwork
       ) WORK, integer LWORK)
       DQRT15

       Purpose:

            DQRT15 generates a matrix with full or deficient rank and of various
            norms.

       Parameters:
           SCALE

                     SCALE is INTEGER
                     SCALE = 1: normally scaled matrix
                     SCALE = 2: matrix scaled up
                     SCALE = 3: matrix scaled down

           RKSEL

                     RKSEL is INTEGER
                     RKSEL = 1: full rank matrix
                     RKSEL = 2: rank-deficient matrix

           M

                     M is INTEGER
                     The number of rows of the matrix A.

           N

                     N is INTEGER
                     The number of columns of A.

           NRHS

                     NRHS is INTEGER
                     The number of columns of B.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The M-by-N matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.

           B

                     B is DOUBLE PRECISION array, dimension (LDB, NRHS)
                     A matrix that is in the range space of matrix A.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.

           S

                     S is DOUBLE PRECISION array, dimension MIN(M,N)
                     Singular values of A.

           RANK

                     RANK is INTEGER
                     number of nonzero singular values of A.

           NORMA

                     NORMA is DOUBLE PRECISION
                     one-norm of A.

           NORMB

                     NORMB is DOUBLE PRECISION
                     one-norm of B.

           ISEED

                     ISEED is integer array, dimension (4)
                     seed for random number generator.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     length of work space required.
                     LWORK >= MAX(M+MIN(M,N),NRHS*MIN(M,N),2*N+M)

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dqrt16 (character TRANS, integer M, integer N, integer NRHS, double precision,
       dimension( lda, * ) A, integer LDA, double precision, dimension( ldx, * ) X, integer LDX,
       double precision, dimension( ldb, * ) B, integer LDB, double precision, dimension( * )
       RWORK, double precision RESID)
       DQRT16

       Purpose:

            DQRT16 computes the residual for a solution of a system of linear
            equations  A*x = b  or  A'*x = b:
               RESID = norm(B - A*X) / ( max(m,n) * norm(A) * norm(X) * EPS ),
            where EPS is the machine epsilon.

       Parameters:
           TRANS

                     TRANS is CHARACTER*1
                     Specifies the form of the system of equations:
                     = 'N':  A *x = b
                     = 'T':  A'*x = b, where A' is the transpose of A
                     = 'C':  A'*x = b, where A' is the transpose of A

           M

                     M is INTEGER
                     The number of rows of the matrix A.  M >= 0.

           N

                     N is INTEGER
                     The number of columns of the matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of B, the matrix of right hand sides.
                     NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The original M x N matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,M).

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors for the system of linear
                     equations.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  If TRANS = 'N',
                     LDX >= max(1,N); if TRANS = 'T' or 'C', LDX >= max(1,M).

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     On entry, the right hand side vectors for the system of
                     linear equations.
                     On exit, B is overwritten with the difference B - A*X.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  IF TRANS = 'N',
                     LDB >= max(1,M); if TRANS = 'T' or 'C', LDB >= max(1,N).

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (M)

           RESID

                     RESID is DOUBLE PRECISION
                     The maximum over the number of right hand sides of
                     norm(B - A*X) / ( max(m,n) * norm(A) * norm(X) * EPS ).

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   double precision function dqrt17 (character TRANS, integer IRESID, integer M, integer N,
       integer NRHS, double precision, dimension( lda, * ) A, integer LDA, double precision,
       dimension( ldx, * ) X, integer LDX, double precision, dimension( ldb, * ) B, integer LDB,
       double precision, dimension( ldb, * ) C, double precision, dimension( lwork ) WORK,
       integer LWORK)
       DQRT17

       Purpose:

            DQRT17 computes the ratio

               || R'*op(A) ||/(||A||*alpha*max(M,N,NRHS)*eps)

            where R = op(A)*X - B, op(A) is A or A', and

               alpha = ||B|| if IRESID = 1 (zero-residual problem)
               alpha = ||R|| if IRESID = 2 (otherwise).

       Parameters:
           TRANS

                     TRANS is CHARACTER*1
                     Specifies whether or not the transpose of A is used.
                     = 'N':  No transpose, op(A) = A.
                     = 'T':  Transpose, op(A) = A'.

           IRESID

                     IRESID is INTEGER
                     IRESID = 1 indicates zero-residual problem.
                     IRESID = 2 indicates non-zero residual.

           M

                     M is INTEGER
                     The number of rows of the matrix A.
                     If TRANS = 'N', the number of rows of the matrix B.
                     If TRANS = 'T', the number of rows of the matrix X.

           N

                     N is INTEGER
                     The number of columns of the matrix  A.
                     If TRANS = 'N', the number of rows of the matrix X.
                     If TRANS = 'T', the number of rows of the matrix B.

           NRHS

                     NRHS is INTEGER
                     The number of columns of the matrices X and B.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The m-by-n matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A. LDA >= M.

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     If TRANS = 'N', the n-by-nrhs matrix X.
                     If TRANS = 'T', the m-by-nrhs matrix X.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.
                     If TRANS = 'N', LDX >= N.
                     If TRANS = 'T', LDX >= M.

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     If TRANS = 'N', the m-by-nrhs matrix B.
                     If TRANS = 'T', the n-by-nrhs matrix B.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.
                     If TRANS = 'N', LDB >= M.
                     If TRANS = 'T', LDB >= N.

           C

                     C is DOUBLE PRECISION array, dimension (LDB,NRHS)

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The length of the array WORK.  LWORK >= NRHS*(M+N).

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2015

   subroutine drqt01 (integer M, integer N, double precision, dimension( lda, * ) A, double
       precision, dimension( lda, * ) AF, double precision, dimension( lda, * ) Q, double
       precision, dimension( lda, * ) R, integer LDA, double precision, dimension( * ) TAU,
       double precision, dimension( lwork ) WORK, integer LWORK, double precision, dimension( * )
       RWORK, double precision, dimension( * ) RESULT)
       DRQT01

       Purpose:

            DRQT01 tests DGERQF, which computes the RQ factorization of an m-by-n
            matrix A, and partially tests DORGRQ which forms the n-by-n
            orthogonal matrix Q.

            DRQT01 compares R with A*Q', and checks that Q is orthogonal.

       Parameters:
           M

                     M is INTEGER
                     The number of rows of the matrix A.  M >= 0.

           N

                     N is INTEGER
                     The number of columns of the matrix A.  N >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The m-by-n matrix A.

           AF

                     AF is DOUBLE PRECISION array, dimension (LDA,N)
                     Details of the RQ factorization of A, as returned by DGERQF.
                     See DGERQF for further details.

           Q

                     Q is DOUBLE PRECISION array, dimension (LDA,N)
                     The n-by-n orthogonal matrix Q.

           R

                     R is DOUBLE PRECISION array, dimension (LDA,max(M,N))

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays A, AF, Q and L.
                     LDA >= max(M,N).

           TAU

                     TAU is DOUBLE PRECISION array, dimension (min(M,N))
                     The scalar factors of the elementary reflectors, as returned
                     by DGERQF.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The dimension of the array WORK.

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (max(M,N))

           RESULT

                     RESULT is DOUBLE PRECISION array, dimension (2)
                     The test ratios:
                     RESULT(1) = norm( R - A*Q' ) / ( N * norm(A) * EPS )
                     RESULT(2) = norm( I - Q*Q' ) / ( N * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine drqt02 (integer M, integer N, integer K, double precision, dimension( lda, * ) A,
       double precision, dimension( lda, * ) AF, double precision, dimension( lda, * ) Q, double
       precision, dimension( lda, * ) R, integer LDA, double precision, dimension( * ) TAU,
       double precision, dimension( lwork ) WORK, integer LWORK, double precision, dimension( * )
       RWORK, double precision, dimension( * ) RESULT)
       DRQT02

       Purpose:

            DRQT02 tests DORGRQ, which generates an m-by-n matrix Q with
            orthonornmal rows that is defined as the product of k elementary
            reflectors.

            Given the RQ factorization of an m-by-n matrix A, DRQT02 generates
            the orthogonal matrix Q defined by the factorization of the last k
            rows of A; it compares R(m-k+1:m,n-m+1:n) with
            A(m-k+1:m,1:n)*Q(n-m+1:n,1:n)', and checks that the rows of Q are
            orthonormal.

       Parameters:
           M

                     M is INTEGER
                     The number of rows of the matrix Q to be generated.  M >= 0.

           N

                     N is INTEGER
                     The number of columns of the matrix Q to be generated.
                     N >= M >= 0.

           K

                     K is INTEGER
                     The number of elementary reflectors whose product defines the
                     matrix Q. M >= K >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The m-by-n matrix A which was factorized by DRQT01.

           AF

                     AF is DOUBLE PRECISION array, dimension (LDA,N)
                     Details of the RQ factorization of A, as returned by DGERQF.
                     See DGERQF for further details.

           Q

                     Q is DOUBLE PRECISION array, dimension (LDA,N)

           R

                     R is DOUBLE PRECISION array, dimension (LDA,M)

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays A, AF, Q and L. LDA >= N.

           TAU

                     TAU is DOUBLE PRECISION array, dimension (M)
                     The scalar factors of the elementary reflectors corresponding
                     to the RQ factorization in AF.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The dimension of the array WORK.

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (M)

           RESULT

                     RESULT is DOUBLE PRECISION array, dimension (2)
                     The test ratios:
                     RESULT(1) = norm( R - A*Q' ) / ( N * norm(A) * EPS )
                     RESULT(2) = norm( I - Q*Q' ) / ( N * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine drqt03 (integer M, integer N, integer K, double precision, dimension( lda, * ) AF,
       double precision, dimension( lda, * ) C, double precision, dimension( lda, * ) CC, double
       precision, dimension( lda, * ) Q, integer LDA, double precision, dimension( * ) TAU,
       double precision, dimension( lwork ) WORK, integer LWORK, double precision, dimension( * )
       RWORK, double precision, dimension( * ) RESULT)
       DRQT03

       Purpose:

            DRQT03 tests DORMRQ, which computes Q*C, Q'*C, C*Q or C*Q'.

            DRQT03 compares the results of a call to DORMRQ with the results of
            forming Q explicitly by a call to DORGRQ and then performing matrix
            multiplication by a call to DGEMM.

       Parameters:
           M

                     M is INTEGER
                     The number of rows or columns of the matrix C; C is n-by-m if
                     Q is applied from the left, or m-by-n if Q is applied from
                     the right.  M >= 0.

           N

                     N is INTEGER
                     The order of the orthogonal matrix Q.  N >= 0.

           K

                     K is INTEGER
                     The number of elementary reflectors whose product defines the
                     orthogonal matrix Q.  N >= K >= 0.

           AF

                     AF is DOUBLE PRECISION array, dimension (LDA,N)
                     Details of the RQ factorization of an m-by-n matrix, as
                     returned by DGERQF. See SGERQF for further details.

           C

                     C is DOUBLE PRECISION array, dimension (LDA,N)

           CC

                     CC is DOUBLE PRECISION array, dimension (LDA,N)

           Q

                     Q is DOUBLE PRECISION array, dimension (LDA,N)

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays AF, C, CC, and Q.

           TAU

                     TAU is DOUBLE PRECISION array, dimension (min(M,N))
                     The scalar factors of the elementary reflectors corresponding
                     to the RQ factorization in AF.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The length of WORK.  LWORK must be at least M, and should be
                     M*NB, where NB is the blocksize for this environment.

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (M)

           RESULT

                     RESULT is DOUBLE PRECISION array, dimension (4)
                     The test ratios compare two techniques for multiplying a
                     random matrix C by an n-by-n orthogonal matrix Q.
                     RESULT(1) = norm( Q*C - Q*C )  / ( N * norm(C) * EPS )
                     RESULT(2) = norm( C*Q - C*Q )  / ( N * norm(C) * EPS )
                     RESULT(3) = norm( Q'*C - Q'*C )/ ( N * norm(C) * EPS )
                     RESULT(4) = norm( C*Q' - C*Q' )/ ( N * norm(C) * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   double precision function drzt01 (integer M, integer N, double precision, dimension( lda, * )
       A, double precision, dimension( lda, * ) AF, integer LDA, double precision, dimension( * )
       TAU, double precision, dimension( lwork ) WORK, integer LWORK)
       DRZT01

       Purpose:

            DRZT01 returns
                 || A - R*Q || / ( M * eps * ||A|| )
            for an upper trapezoidal A that was factored with DTZRZF.

       Parameters:
           M

                     M is INTEGER
                     The number of rows of the matrices A and AF.

           N

                     N is INTEGER
                     The number of columns of the matrices A and AF.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The original upper trapezoidal M by N matrix A.

           AF

                     AF is DOUBLE PRECISION array, dimension (LDA,N)
                     The output of DTZRZF for input matrix A.
                     The lower triangle is not referenced.

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays A and AF.

           TAU

                     TAU is DOUBLE PRECISION array, dimension (M)
                     Details of the Householder transformations as returned by
                     DTZRZF.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The length of the array WORK.  LWORK >= m*n + m*nb.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   double precision function drzt02 (integer M, integer N, double precision, dimension( lda, * )
       AF, integer LDA, double precision, dimension( * ) TAU, double precision, dimension( lwork
       ) WORK, integer LWORK)
       DRZT02

       Purpose:

            DRZT02 returns
                 || I - Q'*Q || / ( M * eps)
            where the matrix Q is defined by the Householder transformations
            generated by DTZRZF.

       Parameters:
           M

                     M is INTEGER
                     The number of rows of the matrix AF.

           N

                     N is INTEGER
                     The number of columns of the matrix AF.

           AF

                     AF is DOUBLE PRECISION array, dimension (LDA,N)
                     The output of DTZRZF.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array AF.

           TAU

                     TAU is DOUBLE PRECISION array, dimension (M)
                     Details of the Householder transformations as returned by
                     DTZRZF.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     length of WORK array. LWORK >= N*N+N*NB.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dspt01 (character UPLO, integer N, double precision, dimension( * ) A, double
       precision, dimension( * ) AFAC, integer, dimension( * ) IPIV, double precision, dimension(
       ldc, * ) C, integer LDC, double precision, dimension( * ) RWORK, double precision RESID)
       DSPT01

       Purpose:

            DSPT01 reconstructs a symmetric indefinite packed matrix A from its
            block L*D*L' or U*D*U' factorization and computes the residual
                 norm( C - A ) / ( N * norm(A) * EPS ),
            where C is the reconstructed matrix and EPS is the machine epsilon.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     symmetric matrix A is stored:
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           N

                     N is INTEGER
                     The number of rows and columns of the matrix A.  N >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (N*(N+1)/2)
                     The original symmetric matrix A, stored as a packed
                     triangular matrix.

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (N*(N+1)/2)
                     The factored form of the matrix A, stored as a packed
                     triangular matrix.  AFAC contains the block diagonal matrix D
                     and the multipliers used to obtain the factor L or U from the
                     block L*D*L' or U*D*U' factorization as computed by DSPTRF.

           IPIV

                     IPIV is INTEGER array, dimension (N)
                     The pivot indices from DSPTRF.

           C

                     C is DOUBLE PRECISION array, dimension (LDC,N)

           LDC

                     LDC is INTEGER
                     The leading dimension of the array C.  LDC >= max(1,N).

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (N)

           RESID

                     RESID is DOUBLE PRECISION
                     If UPLO = 'L', norm(L*D*L' - A) / ( N * norm(A) * EPS )
                     If UPLO = 'U', norm(U*D*U' - A) / ( N * norm(A) * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dsyt01 (character UPLO, integer N, double precision, dimension( lda, * ) A, integer
       LDA, double precision, dimension( ldafac, * ) AFAC, integer LDAFAC, integer, dimension( *
       ) IPIV, double precision, dimension( ldc, * ) C, integer LDC, double precision, dimension(
       * ) RWORK, double precision RESID)
       DSYT01

       Purpose:

            DSYT01 reconstructs a symmetric indefinite matrix A from its
            block L*D*L' or U*D*U' factorization and computes the residual
               norm( C - A ) / ( N * norm(A) * EPS ),
            where C is the reconstructed matrix and EPS is the machine epsilon.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     symmetric matrix A is stored:
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           N

                     N is INTEGER
                     The number of rows and columns of the matrix A.  N >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The original symmetric matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,N)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (LDAFAC,N)
                     The factored form of the matrix A.  AFAC contains the block
                     diagonal matrix D and the multipliers used to obtain the
                     factor L or U from the block L*D*L' or U*D*U' factorization
                     as computed by DSYTRF.

           LDAFAC

                     LDAFAC is INTEGER
                     The leading dimension of the array AFAC.  LDAFAC >= max(1,N).

           IPIV

                     IPIV is INTEGER array, dimension (N)
                     The pivot indices from DSYTRF.

           C

                     C is DOUBLE PRECISION array, dimension (LDC,N)

           LDC

                     LDC is INTEGER
                     The leading dimension of the array C.  LDC >= max(1,N).

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (N)

           RESID

                     RESID is DOUBLE PRECISION
                     If UPLO = 'L', norm(L*D*L' - A) / ( N * norm(A) * EPS )
                     If UPLO = 'U', norm(U*D*U' - A) / ( N * norm(A) * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2013

   subroutine dsyt01_rook (character UPLO, integer N, double precision, dimension( lda, * ) A,
       integer LDA, double precision, dimension( ldafac, * ) AFAC, integer LDAFAC, integer,
       dimension( * ) IPIV, double precision, dimension( ldc, * ) C, integer LDC, double
       precision, dimension( * ) RWORK, double precision RESID)
       DSYT01_ROOK

       Purpose:

            DSYT01_ROOK reconstructs a symmetric indefinite matrix A from its
            block L*D*L' or U*D*U' factorization and computes the residual
               norm( C - A ) / ( N * norm(A) * EPS ),
            where C is the reconstructed matrix and EPS is the machine epsilon.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     symmetric matrix A is stored:
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           N

                     N is INTEGER
                     The number of rows and columns of the matrix A.  N >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The original symmetric matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,N)

           AFAC

                     AFAC is DOUBLE PRECISION array, dimension (LDAFAC,N)
                     The factored form of the matrix A.  AFAC contains the block
                     diagonal matrix D and the multipliers used to obtain the
                     factor L or U from the block L*D*L' or U*D*U' factorization
                     as computed by DSYTRF_ROOK.

           LDAFAC

                     LDAFAC is INTEGER
                     The leading dimension of the array AFAC.  LDAFAC >= max(1,N).

           IPIV

                     IPIV is INTEGER array, dimension (N)
                     The pivot indices from DSYTRF_ROOK.

           C

                     C is DOUBLE PRECISION array, dimension (LDC,N)

           LDC

                     LDC is INTEGER
                     The leading dimension of the array C.  LDC >= max(1,N).

           RWORK

                     RWORK is DOUBLE PRECISION array, dimension (N)

           RESID

                     RESID is DOUBLE PRECISION
                     If UPLO = 'L', norm(L*D*L' - A) / ( N * norm(A) * EPS )
                     If UPLO = 'U', norm(U*D*U' - A) / ( N * norm(A) * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2013

   subroutine dtbt02 (character UPLO, character TRANS, character DIAG, integer N, integer KD,
       integer NRHS, double precision, dimension( ldab, * ) AB, integer LDAB, double precision,
       dimension( ldx, * ) X, integer LDX, double precision, dimension( ldb, * ) B, integer LDB,
       double precision, dimension( * ) WORK, double precision RESID)
       DTBT02

       Purpose:

            DTBT02 computes the residual for the computed solution to a
            triangular system of linear equations  A*x = b  or  A' *x = b when
            A is a triangular band matrix.  Here A' is the transpose of A and
            x and b are N by NRHS matrices.  The test ratio is the maximum over
            the number of right hand sides of
               norm(b - op(A)*x) / ( norm(op(A)) * norm(x) * EPS ),
            where op(A) denotes A or A' and EPS is the machine epsilon.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the matrix A is upper or lower triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           TRANS

                     TRANS is CHARACTER*1
                     Specifies the operation applied to A.
                     = 'N':  A *x = b  (No transpose)
                     = 'T':  A'*x = b  (Transpose)
                     = 'C':  A'*x = b  (Conjugate transpose = Transpose)

           DIAG

                     DIAG is CHARACTER*1
                     Specifies whether or not the matrix A is unit triangular.
                     = 'N':  Non-unit triangular
                     = 'U':  Unit triangular

           N

                     N is INTEGER
                     The order of the matrix A.  N >= 0.

           KD

                     KD is INTEGER
                     The number of superdiagonals or subdiagonals of the
                     triangular band matrix A.  KD >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides, i.e., the number of columns
                     of the matrices X and B.  NRHS >= 0.

           AB

                     AB is DOUBLE PRECISION array, dimension (LDAB,N)
                     The upper or lower triangular band matrix A, stored in the
                     first kd+1 rows of the array. The j-th column of A is stored
                     in the j-th column of the array AB as follows:
                     if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j;
                     if UPLO = 'L', AB(1+i-j,j)    = A(i,j) for j<=i<=min(n,j+kd).

           LDAB

                     LDAB is INTEGER
                     The leading dimension of the array AB.  LDAB >= KD+1.

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors for the system of linear
                     equations.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= max(1,N).

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     The right hand side vectors for the system of linear
                     equations.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           WORK

                     WORK is DOUBLE PRECISION array, dimension (N)

           RESID

                     RESID is DOUBLE PRECISION
                     The maximum over the number of right hand sides of
                     norm(op(A)*x - b) / ( norm(op(A)) * norm(x) * EPS ).

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dtbt03 (character UPLO, character TRANS, character DIAG, integer N, integer KD,
       integer NRHS, double precision, dimension( ldab, * ) AB, integer LDAB, double precision
       SCALE, double precision, dimension( * ) CNORM, double precision TSCAL, double precision,
       dimension( ldx, * ) X, integer LDX, double precision, dimension( ldb, * ) B, integer LDB,
       double precision, dimension( * ) WORK, double precision RESID)
       DTBT03

       Purpose:

            DTBT03 computes the residual for the solution to a scaled triangular
            system of equations  A*x = s*b  or  A'*x = s*b  when A is a
            triangular band matrix. Here A' is the transpose of A, s is a scalar,
            and x and b are N by NRHS matrices.  The test ratio is the maximum
            over the number of right hand sides of
               norm(s*b - op(A)*x) / ( norm(op(A)) * norm(x) * EPS ),
            where op(A) denotes A or A' and EPS is the machine epsilon.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the matrix A is upper or lower triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           TRANS

                     TRANS is CHARACTER*1
                     Specifies the operation applied to A.
                     = 'N':  A *x = b  (No transpose)
                     = 'T':  A'*x = b  (Transpose)
                     = 'C':  A'*x = b  (Conjugate transpose = Transpose)

           DIAG

                     DIAG is CHARACTER*1
                     Specifies whether or not the matrix A is unit triangular.
                     = 'N':  Non-unit triangular
                     = 'U':  Unit triangular

           N

                     N is INTEGER
                     The order of the matrix A.  N >= 0.

           KD

                     KD is INTEGER
                     The number of superdiagonals or subdiagonals of the
                     triangular band matrix A.  KD >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides, i.e., the number of columns
                     of the matrices X and B.  NRHS >= 0.

           AB

                     AB is DOUBLE PRECISION array, dimension (LDAB,N)
                     The upper or lower triangular band matrix A, stored in the
                     first kd+1 rows of the array. The j-th column of A is stored
                     in the j-th column of the array AB as follows:
                     if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j;
                     if UPLO = 'L', AB(1+i-j,j)    = A(i,j) for j<=i<=min(n,j+kd).

           LDAB

                     LDAB is INTEGER
                     The leading dimension of the array AB.  LDAB >= KD+1.

           SCALE

                     SCALE is DOUBLE PRECISION
                     The scaling factor s used in solving the triangular system.

           CNORM

                     CNORM is DOUBLE PRECISION array, dimension (N)
                     The 1-norms of the columns of A, not counting the diagonal.

           TSCAL

                     TSCAL is DOUBLE PRECISION
                     The scaling factor used in computing the 1-norms in CNORM.
                     CNORM actually contains the column norms of TSCAL*A.

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors for the system of linear
                     equations.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= max(1,N).

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     The right hand side vectors for the system of linear
                     equations.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           WORK

                     WORK is DOUBLE PRECISION array, dimension (N)

           RESID

                     RESID is DOUBLE PRECISION
                     The maximum over the number of right hand sides of
                     norm(op(A)*x - s*b) / ( norm(op(A)) * norm(x) * EPS ).

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dtbt05 (character UPLO, character TRANS, character DIAG, integer N, integer KD,
       integer NRHS, double precision, dimension( ldab, * ) AB, integer LDAB, double precision,
       dimension( ldb, * ) B, integer LDB, double precision, dimension( ldx, * ) X, integer LDX,
       double precision, dimension( ldxact, * ) XACT, integer LDXACT, double precision,
       dimension( * ) FERR, double precision, dimension( * ) BERR, double precision, dimension( *
       ) RESLTS)
       DTBT05

       Purpose:

            DTBT05 tests the error bounds from iterative refinement for the
            computed solution to a system of equations A*X = B, where A is a
            triangular band matrix.

            RESLTS(1) = test of the error bound
                      = norm(X - XACT) / ( norm(X) * FERR )

            A large value is returned if this ratio is not less than one.

            RESLTS(2) = residual from the iterative refinement routine
                      = the maximum of BERR / ( NZ*EPS + (*) ), where
                        (*) = NZ*UNFL / (min_i (abs(A)*abs(X) +abs(b))_i )
                        and NZ = max. number of nonzeros in any row of A, plus 1

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the matrix A is upper or lower triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           TRANS

                     TRANS is CHARACTER*1
                     Specifies the form of the system of equations.
                     = 'N':  A * X = B  (No transpose)
                     = 'T':  A'* X = B  (Transpose)
                     = 'C':  A'* X = B  (Conjugate transpose = Transpose)

           DIAG

                     DIAG is CHARACTER*1
                     Specifies whether or not the matrix A is unit triangular.
                     = 'N':  Non-unit triangular
                     = 'U':  Unit triangular

           N

                     N is INTEGER
                     The number of rows of the matrices X, B, and XACT, and the
                     order of the matrix A.  N >= 0.

           KD

                     KD is INTEGER
                     The number of super-diagonals of the matrix A if UPLO = 'U',
                     or the number of sub-diagonals if UPLO = 'L'.  KD >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of the matrices X, B, and XACT.
                     NRHS >= 0.

           AB

                     AB is DOUBLE PRECISION array, dimension (LDAB,N)
                     The upper or lower triangular band matrix A, stored in the
                     first kd+1 rows of the array. The j-th column of A is stored
                     in the j-th column of the array AB as follows:
                     if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j;
                     if UPLO = 'L', AB(1+i-j,j)    = A(i,j) for j<=i<=min(n,j+kd).
                     If DIAG = 'U', the diagonal elements of A are not referenced
                     and are assumed to be 1.

           LDAB

                     LDAB is INTEGER
                     The leading dimension of the array AB.  LDAB >= KD+1.

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     The right hand side vectors for the system of linear
                     equations.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors.  Each vector is stored as a
                     column of the matrix X.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= max(1,N).

           XACT

                     XACT is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The exact solution vectors.  Each vector is stored as a
                     column of the matrix XACT.

           LDXACT

                     LDXACT is INTEGER
                     The leading dimension of the array XACT.  LDXACT >= max(1,N).

           FERR

                     FERR is DOUBLE PRECISION array, dimension (NRHS)
                     The estimated forward error bounds for each solution vector
                     X.  If XTRUE is the true solution, FERR bounds the magnitude
                     of the largest entry in (X - XTRUE) divided by the magnitude
                     of the largest entry in X.

           BERR

                     BERR is DOUBLE PRECISION array, dimension (NRHS)
                     The componentwise relative backward error of each solution
                     vector (i.e., the smallest relative change in any entry of A
                     or B that makes X an exact solution).

           RESLTS

                     RESLTS is DOUBLE PRECISION array, dimension (2)
                     The maximum over the NRHS solution vectors of the ratios:
                     RESLTS(1) = norm(X - XACT) / ( norm(X) * FERR )
                     RESLTS(2) = BERR / ( NZ*EPS + (*) )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dtbt06 (double precision RCOND, double precision RCONDC, character UPLO, character
       DIAG, integer N, integer KD, double precision, dimension( ldab, * ) AB, integer LDAB,
       double precision, dimension( * ) WORK, double precision RAT)
       DTBT06

       Purpose:

            DTBT06 computes a test ratio comparing RCOND (the reciprocal
            condition number of a triangular matrix A) and RCONDC, the estimate
            computed by DTBCON.  Information about the triangular matrix A is
            used if one estimate is zero and the other is non-zero to decide if
            underflow in the estimate is justified.

       Parameters:
           RCOND

                     RCOND is DOUBLE PRECISION
                     The estimate of the reciprocal condition number obtained by
                     forming the explicit inverse of the matrix A and computing
                     RCOND = 1/( norm(A) * norm(inv(A)) ).

           RCONDC

                     RCONDC is DOUBLE PRECISION
                     The estimate of the reciprocal condition number computed by
                     DTBCON.

           UPLO

                     UPLO is CHARACTER
                     Specifies whether the matrix A is upper or lower triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           DIAG

                     DIAG is CHARACTER
                     Specifies whether or not the matrix A is unit triangular.
                     = 'N':  Non-unit triangular
                     = 'U':  Unit triangular

           N

                     N is INTEGER
                     The order of the matrix A.  N >= 0.

           KD

                     KD is INTEGER
                     The number of superdiagonals or subdiagonals of the
                     triangular band matrix A.  KD >= 0.

           AB

                     AB is DOUBLE PRECISION array, dimension (LDAB,N)
                     The upper or lower triangular band matrix A, stored in the
                     first kd+1 rows of the array. The j-th column of A is stored
                     in the j-th column of the array AB as follows:
                     if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j;
                     if UPLO = 'L', AB(1+i-j,j)    = A(i,j) for j<=i<=min(n,j+kd).

           LDAB

                     LDAB is INTEGER
                     The leading dimension of the array AB.  LDAB >= KD+1.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (N)

           RAT

                     RAT is DOUBLE PRECISION
                     The test ratio.  If both RCOND and RCONDC are nonzero,
                        RAT = MAX( RCOND, RCONDC )/MIN( RCOND, RCONDC ) - 1.
                     If RAT = 0, the two estimates are exactly the same.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dtpt01 (character UPLO, character DIAG, integer N, double precision, dimension( * )
       AP, double precision, dimension( * ) AINVP, double precision RCOND, double precision,
       dimension( * ) WORK, double precision RESID)
       DTPT01

       Purpose:

            DTPT01 computes the residual for a triangular matrix A times its
            inverse when A is stored in packed format:
               RESID = norm(A*AINV - I) / ( N * norm(A) * norm(AINV) * EPS ),
            where EPS is the machine epsilon.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the matrix A is upper or lower triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           DIAG

                     DIAG is CHARACTER*1
                     Specifies whether or not the matrix A is unit triangular.
                     = 'N':  Non-unit triangular
                     = 'U':  Unit triangular

           N

                     N is INTEGER
                     The order of the matrix A.  N >= 0.

           AP

                     AP is DOUBLE PRECISION array, dimension (N*(N+1)/2)
                     The original upper or lower triangular matrix A, packed
                     columnwise in a linear array.  The j-th column of A is stored
                     in the array AP as follows:
                     if UPLO = 'U', AP((j-1)*j/2 + i) = A(i,j) for 1<=i<=j;
                     if UPLO = 'L',
                        AP((j-1)*(n-j) + j*(j+1)/2 + i-j) = A(i,j) for j<=i<=n.

           AINVP

                     AINVP is DOUBLE PRECISION array, dimension (N*(N+1)/2)
                     On entry, the (triangular) inverse of the matrix A, packed
                     columnwise in a linear array as in AP.
                     On exit, the contents of AINVP are destroyed.

           RCOND

                     RCOND is DOUBLE PRECISION
                     The reciprocal condition number of A, computed as
                     1/(norm(A) * norm(AINV)).

           WORK

                     WORK is DOUBLE PRECISION array, dimension (N)

           RESID

                     RESID is DOUBLE PRECISION
                     norm(A*AINV - I) / ( N * norm(A) * norm(AINV) * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dtpt02 (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       double precision, dimension( * ) AP, double precision, dimension( ldx, * ) X, integer LDX,
       double precision, dimension( ldb, * ) B, integer LDB, double precision, dimension( * )
       WORK, double precision RESID)
       DTPT02

       Purpose:

            DTPT02 computes the residual for the computed solution to a
            triangular system of linear equations  A*x = b  or  A'*x = b  when
            the triangular matrix A is stored in packed format.  Here A' is the
            transpose of A and x and b are N by NRHS matrices.  The test ratio is
            the maximum over the number of right hand sides of
               norm(b - op(A)*x) / ( norm(op(A)) * norm(x) * EPS ),
            where op(A) denotes A or A' and EPS is the machine epsilon.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the matrix A is upper or lower triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           TRANS

                     TRANS is CHARACTER*1
                     Specifies the operation applied to A.
                     = 'N':  A *x = b  (No transpose)
                     = 'T':  A'*x = b  (Transpose)
                     = 'C':  A'*x = b  (Conjugate transpose = Transpose)

           DIAG

                     DIAG is CHARACTER*1
                     Specifies whether or not the matrix A is unit triangular.
                     = 'N':  Non-unit triangular
                     = 'U':  Unit triangular

           N

                     N is INTEGER
                     The order of the matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides, i.e., the number of columns
                     of the matrices X and B.  NRHS >= 0.

           AP

                     AP is DOUBLE PRECISION array, dimension (N*(N+1)/2)
                     The upper or lower triangular matrix A, packed columnwise in
                     a linear array.  The j-th column of A is stored in the array
                     AP as follows:
                     if UPLO = 'U', AP((j-1)*j/2 + i) = A(i,j) for 1<=i<=j;
                     if UPLO = 'L',
                        AP((j-1)*(n-j) + j*(j+1)/2 + i-j) = A(i,j) for j<=i<=n.

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors for the system of linear
                     equations.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= max(1,N).

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     The right hand side vectors for the system of linear
                     equations.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           WORK

                     WORK is DOUBLE PRECISION array, dimension (N)

           RESID

                     RESID is DOUBLE PRECISION
                     The maximum over the number of right hand sides of
                     norm(op(A)*x - b) / ( norm(op(A)) * norm(x) * EPS ).

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dtpt03 (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       double precision, dimension( * ) AP, double precision SCALE, double precision, dimension(
       * ) CNORM, double precision TSCAL, double precision, dimension( ldx, * ) X, integer LDX,
       double precision, dimension( ldb, * ) B, integer LDB, double precision, dimension( * )
       WORK, double precision RESID)
       DTPT03

       Purpose:

            DTPT03 computes the residual for the solution to a scaled triangular
            system of equations A*x = s*b  or  A'*x = s*b  when the triangular
            matrix A is stored in packed format.  Here A' is the transpose of A,
            s is a scalar, and x and b are N by NRHS matrices.  The test ratio is
            the maximum over the number of right hand sides of
               norm(s*b - op(A)*x) / ( norm(op(A)) * norm(x) * EPS ),
            where op(A) denotes A or A' and EPS is the machine epsilon.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the matrix A is upper or lower triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           TRANS

                     TRANS is CHARACTER*1
                     Specifies the operation applied to A.
                     = 'N':  A *x = s*b  (No transpose)
                     = 'T':  A'*x = s*b  (Transpose)
                     = 'C':  A'*x = s*b  (Conjugate transpose = Transpose)

           DIAG

                     DIAG is CHARACTER*1
                     Specifies whether or not the matrix A is unit triangular.
                     = 'N':  Non-unit triangular
                     = 'U':  Unit triangular

           N

                     N is INTEGER
                     The order of the matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides, i.e., the number of columns
                     of the matrices X and B.  NRHS >= 0.

           AP

                     AP is DOUBLE PRECISION array, dimension (N*(N+1)/2)
                     The upper or lower triangular matrix A, packed columnwise in
                     a linear array.  The j-th column of A is stored in the array
                     AP as follows:
                     if UPLO = 'U', AP((j-1)*j/2 + i) = A(i,j) for 1<=i<=j;
                     if UPLO = 'L',
                        AP((j-1)*(n-j) + j*(j+1)/2 + i-j) = A(i,j) for j<=i<=n.

           SCALE

                     SCALE is DOUBLE PRECISION
                     The scaling factor s used in solving the triangular system.

           CNORM

                     CNORM is DOUBLE PRECISION array, dimension (N)
                     The 1-norms of the columns of A, not counting the diagonal.

           TSCAL

                     TSCAL is DOUBLE PRECISION
                     The scaling factor used in computing the 1-norms in CNORM.
                     CNORM actually contains the column norms of TSCAL*A.

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors for the system of linear
                     equations.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= max(1,N).

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     The right hand side vectors for the system of linear
                     equations.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           WORK

                     WORK is DOUBLE PRECISION array, dimension (N)

           RESID

                     RESID is DOUBLE PRECISION
                     The maximum over the number of right hand sides of
                     norm(op(A)*x - s*b) / ( norm(op(A)) * norm(x) * EPS ).

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dtpt05 (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       double precision, dimension( * ) AP, double precision, dimension( ldb, * ) B, integer LDB,
       double precision, dimension( ldx, * ) X, integer LDX, double precision, dimension( ldxact,
       * ) XACT, integer LDXACT, double precision, dimension( * ) FERR, double precision,
       dimension( * ) BERR, double precision, dimension( * ) RESLTS)
       DTPT05

       Purpose:

            DTPT05 tests the error bounds from iterative refinement for the
            computed solution to a system of equations A*X = B, where A is a
            triangular matrix in packed storage format.

            RESLTS(1) = test of the error bound
                      = norm(X - XACT) / ( norm(X) * FERR )

            A large value is returned if this ratio is not less than one.

            RESLTS(2) = residual from the iterative refinement routine
                      = the maximum of BERR / ( (n+1)*EPS + (*) ), where
                        (*) = (n+1)*UNFL / (min_i (abs(A)*abs(X) +abs(b))_i )

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the matrix A is upper or lower triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           TRANS

                     TRANS is CHARACTER*1
                     Specifies the form of the system of equations.
                     = 'N':  A * X = B  (No transpose)
                     = 'T':  A'* X = B  (Transpose)
                     = 'C':  A'* X = B  (Conjugate transpose = Transpose)

           DIAG

                     DIAG is CHARACTER*1
                     Specifies whether or not the matrix A is unit triangular.
                     = 'N':  Non-unit triangular
                     = 'U':  Unit triangular

           N

                     N is INTEGER
                     The number of rows of the matrices X, B, and XACT, and the
                     order of the matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of the matrices X, B, and XACT.
                     NRHS >= 0.

           AP

                     AP is DOUBLE PRECISION array, dimension (N*(N+1)/2)
                     The upper or lower triangular matrix A, packed columnwise in
                     a linear array.  The j-th column of A is stored in the array
                     AP as follows:
                     if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
                     if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
                     If DIAG = 'U', the diagonal elements of A are not referenced
                     and are assumed to be 1.

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     The right hand side vectors for the system of linear
                     equations.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors.  Each vector is stored as a
                     column of the matrix X.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= max(1,N).

           XACT

                     XACT is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The exact solution vectors.  Each vector is stored as a
                     column of the matrix XACT.

           LDXACT

                     LDXACT is INTEGER
                     The leading dimension of the array XACT.  LDXACT >= max(1,N).

           FERR

                     FERR is DOUBLE PRECISION array, dimension (NRHS)
                     The estimated forward error bounds for each solution vector
                     X.  If XTRUE is the true solution, FERR bounds the magnitude
                     of the largest entry in (X - XTRUE) divided by the magnitude
                     of the largest entry in X.

           BERR

                     BERR is DOUBLE PRECISION array, dimension (NRHS)
                     The componentwise relative backward error of each solution
                     vector (i.e., the smallest relative change in any entry of A
                     or B that makes X an exact solution).

           RESLTS

                     RESLTS is DOUBLE PRECISION array, dimension (2)
                     The maximum over the NRHS solution vectors of the ratios:
                     RESLTS(1) = norm(X - XACT) / ( norm(X) * FERR )
                     RESLTS(2) = BERR / ( (n+1)*EPS + (*) )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dtpt06 (double precision RCOND, double precision RCONDC, character UPLO, character
       DIAG, integer N, double precision, dimension( * ) AP, double precision, dimension( * )
       WORK, double precision RAT)
       DTPT06

       Purpose:

            DTPT06 computes a test ratio comparing RCOND (the reciprocal
            condition number of a triangular matrix A) and RCONDC, the estimate
            computed by DTPCON.  Information about the triangular matrix A is
            used if one estimate is zero and the other is non-zero to decide if
            underflow in the estimate is justified.

       Parameters:
           RCOND

                     RCOND is DOUBLE PRECISION
                     The estimate of the reciprocal condition number obtained by
                     forming the explicit inverse of the matrix A and computing
                     RCOND = 1/( norm(A) * norm(inv(A)) ).

           RCONDC

                     RCONDC is DOUBLE PRECISION
                     The estimate of the reciprocal condition number computed by
                     DTPCON.

           UPLO

                     UPLO is CHARACTER
                     Specifies whether the matrix A is upper or lower triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           DIAG

                     DIAG is CHARACTER
                     Specifies whether or not the matrix A is unit triangular.
                     = 'N':  Non-unit triangular
                     = 'U':  Unit triangular

           N

                     N is INTEGER
                     The order of the matrix A.  N >= 0.

           AP

                     AP is DOUBLE PRECISION array, dimension (N*(N+1)/2)
                     The upper or lower triangular matrix A, packed columnwise in
                     a linear array.  The j-th column of A is stored in the array
                     AP as follows:
                     if UPLO = 'U', AP((j-1)*j/2 + i) = A(i,j) for 1<=i<=j;
                     if UPLO = 'L',
                        AP((j-1)*(n-j) + j*(j+1)/2 + i-j) = A(i,j) for j<=i<=n.

           WORK

                     WORK is DOUBLE PRECISION array, dimension (N)

           RAT

                     RAT is DOUBLE PRECISION
                     The test ratio.  If both RCOND and RCONDC are nonzero,
                        RAT = MAX( RCOND, RCONDC )/MIN( RCOND, RCONDC ) - 1.
                     If RAT = 0, the two estimates are exactly the same.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dtrt01 (character UPLO, character DIAG, integer N, double precision, dimension(
       lda, * ) A, integer LDA, double precision, dimension( ldainv, * ) AINV, integer LDAINV,
       double precision RCOND, double precision, dimension( * ) WORK, double precision RESID)
       DTRT01

       Purpose:

            DTRT01 computes the residual for a triangular matrix A times its
            inverse:
               RESID = norm( A*AINV - I ) / ( N * norm(A) * norm(AINV) * EPS ),
            where EPS is the machine epsilon.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the matrix A is upper or lower triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           DIAG

                     DIAG is CHARACTER*1
                     Specifies whether or not the matrix A is unit triangular.
                     = 'N':  Non-unit triangular
                     = 'U':  Unit triangular

           N

                     N is INTEGER
                     The order of the matrix A.  N >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The triangular matrix A.  If UPLO = 'U', the leading n by n
                     upper triangular part of the array A contains the upper
                     triangular matrix, and the strictly lower triangular part of
                     A is not referenced.  If UPLO = 'L', the leading n by n lower
                     triangular part of the array A contains the lower triangular
                     matrix, and the strictly upper triangular part of A is not
                     referenced.  If DIAG = 'U', the diagonal elements of A are
                     also not referenced and are assumed to be 1.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,N).

           AINV

                     AINV is DOUBLE PRECISION array, dimension (LDAINV,N)
                     On entry, the (triangular) inverse of the matrix A, in the
                     same storage format as A.
                     On exit, the contents of AINV are destroyed.

           LDAINV

                     LDAINV is INTEGER
                     The leading dimension of the array AINV.  LDAINV >= max(1,N).

           RCOND

                     RCOND is DOUBLE PRECISION
                     The reciprocal condition number of A, computed as
                     1/(norm(A) * norm(AINV)).

           WORK

                     WORK is DOUBLE PRECISION array, dimension (N)

           RESID

                     RESID is DOUBLE PRECISION
                     norm(A*AINV - I) / ( N * norm(A) * norm(AINV) * EPS )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dtrt02 (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       double precision, dimension( lda, * ) A, integer LDA, double precision, dimension( ldx, *
       ) X, integer LDX, double precision, dimension( ldb, * ) B, integer LDB, double precision,
       dimension( * ) WORK, double precision RESID)
       DTRT02

       Purpose:

            DTRT02 computes the residual for the computed solution to a
            triangular system of linear equations  A*x = b  or  A'*x = b.
            Here A is a triangular matrix, A' is the transpose of A, and x and b
            are N by NRHS matrices.  The test ratio is the maximum over the
            number of right hand sides of
               norm(b - op(A)*x) / ( norm(op(A)) * norm(x) * EPS ),
            where op(A) denotes A or A' and EPS is the machine epsilon.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the matrix A is upper or lower triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           TRANS

                     TRANS is CHARACTER*1
                     Specifies the operation applied to A.
                     = 'N':  A *x = b  (No transpose)
                     = 'T':  A'*x = b  (Transpose)
                     = 'C':  A'*x = b  (Conjugate transpose = Transpose)

           DIAG

                     DIAG is CHARACTER*1
                     Specifies whether or not the matrix A is unit triangular.
                     = 'N':  Non-unit triangular
                     = 'U':  Unit triangular

           N

                     N is INTEGER
                     The order of the matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides, i.e., the number of columns
                     of the matrices X and B.  NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The triangular matrix A.  If UPLO = 'U', the leading n by n
                     upper triangular part of the array A contains the upper
                     triangular matrix, and the strictly lower triangular part of
                     A is not referenced.  If UPLO = 'L', the leading n by n lower
                     triangular part of the array A contains the lower triangular
                     matrix, and the strictly upper triangular part of A is not
                     referenced.  If DIAG = 'U', the diagonal elements of A are
                     also not referenced and are assumed to be 1.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,N).

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors for the system of linear
                     equations.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= max(1,N).

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     The right hand side vectors for the system of linear
                     equations.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           WORK

                     WORK is DOUBLE PRECISION array, dimension (N)

           RESID

                     RESID is DOUBLE PRECISION
                     The maximum over the number of right hand sides of
                     norm(op(A)*x - b) / ( norm(op(A)) * norm(x) * EPS ).

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dtrt03 (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       double precision, dimension( lda, * ) A, integer LDA, double precision SCALE, double
       precision, dimension( * ) CNORM, double precision TSCAL, double precision, dimension( ldx,
       * ) X, integer LDX, double precision, dimension( ldb, * ) B, integer LDB, double
       precision, dimension( * ) WORK, double precision RESID)
       DTRT03

       Purpose:

            DTRT03 computes the residual for the solution to a scaled triangular
            system of equations A*x = s*b  or  A'*x = s*b.
            Here A is a triangular matrix, A' is the transpose of A, s is a
            scalar, and x and b are N by NRHS matrices.  The test ratio is the
            maximum over the number of right hand sides of
               norm(s*b - op(A)*x) / ( norm(op(A)) * norm(x) * EPS ),
            where op(A) denotes A or A' and EPS is the machine epsilon.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the matrix A is upper or lower triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           TRANS

                     TRANS is CHARACTER*1
                     Specifies the operation applied to A.
                     = 'N':  A *x = s*b  (No transpose)
                     = 'T':  A'*x = s*b  (Transpose)
                     = 'C':  A'*x = s*b  (Conjugate transpose = Transpose)

           DIAG

                     DIAG is CHARACTER*1
                     Specifies whether or not the matrix A is unit triangular.
                     = 'N':  Non-unit triangular
                     = 'U':  Unit triangular

           N

                     N is INTEGER
                     The order of the matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of right hand sides, i.e., the number of columns
                     of the matrices X and B.  NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The triangular matrix A.  If UPLO = 'U', the leading n by n
                     upper triangular part of the array A contains the upper
                     triangular matrix, and the strictly lower triangular part of
                     A is not referenced.  If UPLO = 'L', the leading n by n lower
                     triangular part of the array A contains the lower triangular
                     matrix, and the strictly upper triangular part of A is not
                     referenced.  If DIAG = 'U', the diagonal elements of A are
                     also not referenced and are assumed to be 1.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,N).

           SCALE

                     SCALE is DOUBLE PRECISION
                     The scaling factor s used in solving the triangular system.

           CNORM

                     CNORM is DOUBLE PRECISION array, dimension (N)
                     The 1-norms of the columns of A, not counting the diagonal.

           TSCAL

                     TSCAL is DOUBLE PRECISION
                     The scaling factor used in computing the 1-norms in CNORM.
                     CNORM actually contains the column norms of TSCAL*A.

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors for the system of linear
                     equations.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= max(1,N).

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     The right hand side vectors for the system of linear
                     equations.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           WORK

                     WORK is DOUBLE PRECISION array, dimension (N)

           RESID

                     RESID is DOUBLE PRECISION
                     The maximum over the number of right hand sides of
                     norm(op(A)*x - s*b) / ( norm(op(A)) * norm(x) * EPS ).

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dtrt05 (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       double precision, dimension( lda, * ) A, integer LDA, double precision, dimension( ldb, *
       ) B, integer LDB, double precision, dimension( ldx, * ) X, integer LDX, double precision,
       dimension( ldxact, * ) XACT, integer LDXACT, double precision, dimension( * ) FERR, double
       precision, dimension( * ) BERR, double precision, dimension( * ) RESLTS)
       DTRT05

       Purpose:

            DTRT05 tests the error bounds from iterative refinement for the
            computed solution to a system of equations A*X = B, where A is a
            triangular n by n matrix.

            RESLTS(1) = test of the error bound
                      = norm(X - XACT) / ( norm(X) * FERR )

            A large value is returned if this ratio is not less than one.

            RESLTS(2) = residual from the iterative refinement routine
                      = the maximum of BERR / ( (n+1)*EPS + (*) ), where
                        (*) = (n+1)*UNFL / (min_i (abs(A)*abs(X) +abs(b))_i )

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the matrix A is upper or lower triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           TRANS

                     TRANS is CHARACTER*1
                     Specifies the form of the system of equations.
                     = 'N':  A * X = B  (No transpose)
                     = 'T':  A'* X = B  (Transpose)
                     = 'C':  A'* X = B  (Conjugate transpose = Transpose)

           DIAG

                     DIAG is CHARACTER*1
                     Specifies whether or not the matrix A is unit triangular.
                     = 'N':  Non-unit triangular
                     = 'U':  Unit triangular

           N

                     N is INTEGER
                     The number of rows of the matrices X, B, and XACT, and the
                     order of the matrix A.  N >= 0.

           NRHS

                     NRHS is INTEGER
                     The number of columns of the matrices X, B, and XACT.
                     NRHS >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The triangular matrix A.  If UPLO = 'U', the leading n by n
                     upper triangular part of the array A contains the upper
                     triangular matrix, and the strictly lower triangular part of
                     A is not referenced.  If UPLO = 'L', the leading n by n lower
                     triangular part of the array A contains the lower triangular
                     matrix, and the strictly upper triangular part of A is not
                     referenced.  If DIAG = 'U', the diagonal elements of A are
                     also not referenced and are assumed to be 1.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,N).

           B

                     B is DOUBLE PRECISION array, dimension (LDB,NRHS)
                     The right hand side vectors for the system of linear
                     equations.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.  LDB >= max(1,N).

           X

                     X is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The computed solution vectors.  Each vector is stored as a
                     column of the matrix X.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.  LDX >= max(1,N).

           XACT

                     XACT is DOUBLE PRECISION array, dimension (LDX,NRHS)
                     The exact solution vectors.  Each vector is stored as a
                     column of the matrix XACT.

           LDXACT

                     LDXACT is INTEGER
                     The leading dimension of the array XACT.  LDXACT >= max(1,N).

           FERR

                     FERR is DOUBLE PRECISION array, dimension (NRHS)
                     The estimated forward error bounds for each solution vector
                     X.  If XTRUE is the true solution, FERR bounds the magnitude
                     of the largest entry in (X - XTRUE) divided by the magnitude
                     of the largest entry in X.

           BERR

                     BERR is DOUBLE PRECISION array, dimension (NRHS)
                     The componentwise relative backward error of each solution
                     vector (i.e., the smallest relative change in any entry of A
                     or B that makes X an exact solution).

           RESLTS

                     RESLTS is DOUBLE PRECISION array, dimension (2)
                     The maximum over the NRHS solution vectors of the ratios:
                     RESLTS(1) = norm(X - XACT) / ( norm(X) * FERR )
                     RESLTS(2) = BERR / ( (n+1)*EPS + (*) )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine dtrt06 (double precision RCOND, double precision RCONDC, character UPLO, character
       DIAG, integer N, double precision, dimension( lda, * ) A, integer LDA, double precision,
       dimension( * ) WORK, double precision RAT)
       DTRT06

       Purpose:

            DTRT06 computes a test ratio comparing RCOND (the reciprocal
            condition number of a triangular matrix A) and RCONDC, the estimate
            computed by DTRCON.  Information about the triangular matrix A is
            used if one estimate is zero and the other is non-zero to decide if
            underflow in the estimate is justified.

       Parameters:
           RCOND

                     RCOND is DOUBLE PRECISION
                     The estimate of the reciprocal condition number obtained by
                     forming the explicit inverse of the matrix A and computing
                     RCOND = 1/( norm(A) * norm(inv(A)) ).

           RCONDC

                     RCONDC is DOUBLE PRECISION
                     The estimate of the reciprocal condition number computed by
                     DTRCON.

           UPLO

                     UPLO is CHARACTER
                     Specifies whether the matrix A is upper or lower triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           DIAG

                     DIAG is CHARACTER
                     Specifies whether or not the matrix A is unit triangular.
                     = 'N':  Non-unit triangular
                     = 'U':  Unit triangular

           N

                     N is INTEGER
                     The order of the matrix A.  N >= 0.

           A

                     A is DOUBLE PRECISION array, dimension (LDA,N)
                     The triangular matrix A.  If UPLO = 'U', the leading n by n
                     upper triangular part of the array A contains the upper
                     triangular matrix, and the strictly lower triangular part of
                     A is not referenced.  If UPLO = 'L', the leading n by n lower
                     triangular part of the array A contains the lower triangular
                     matrix, and the strictly upper triangular part of A is not
                     referenced.  If DIAG = 'U', the diagonal elements of A are
                     also not referenced and are assumed to be 1.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= max(1,N).

           WORK

                     WORK is DOUBLE PRECISION array, dimension (N)

           RAT

                     RAT is DOUBLE PRECISION
                     The test ratio.  If both RCOND and RCONDC are nonzero,
                        RAT = MAX( RCOND, RCONDC )/MIN( RCOND, RCONDC ) - 1.
                     If RAT = 0, the two estimates are exactly the same.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine sdrvsy_rook (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * )
       NVAL, integer NRHS, real THRESH, logical TSTERR, integer NMAX, real, dimension( * ) A,
       real, dimension( * ) AFAC, real, dimension( * ) AINV, real, dimension( * ) B, real,
       dimension( * ) X, real, dimension( * ) XACT, real, dimension( * ) WORK, real, dimension( *
       ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       SDRVSY_ROOK

       Purpose:

            SDRVSY_ROOK tests the driver routines SSYSV_ROOK.

       Parameters:
           DOTYPE

                     DOTYPE is LOGICAL array, dimension (NTYPES)
                     The matrix types to be used for testing.  Matrices of type j
                     (for 1 <= j <= NTYPES) are used for testing if DOTYPE(j) =
                     .TRUE.; if DOTYPE(j) = .FALSE., then type j is not used.

           NN

                     NN is INTEGER
                     The number of values of N contained in the vector NVAL.

           NVAL

                     NVAL is INTEGER array, dimension (NN)
                     The values of the matrix dimension N.

           NRHS

                     NRHS is INTEGER
                     The number of right hand side vectors to be generated for
                     each linear system.

           THRESH

                     THRESH is DOUBLE PRECISION
                     The threshold value for the test ratios.  A result is
                     included in the output file if RESULT >= THRESH.  To have
                     every test ratio printed, use THRESH = 0.

           TSTERR

                     TSTERR is LOGICAL
                     Flag that indicates whether error exits are to be tested.

           NMAX

                     NMAX is INTEGER
                     The maximum value permitted for N, used in dimensioning the
                     work arrays.

           A

                     A is REAL array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is REAL array, dimension (NMAX*NMAX)

           AINV

                     AINV is REAL array, dimension (NMAX*NMAX)

           B

                     B is REAL array, dimension (NMAX*NRHS)

           X

                     X is REAL array, dimension (NMAX*NRHS)

           XACT

                     XACT is REAL array, dimension (NMAX*NRHS)

           WORK

                     WORK is REAL array, dimension
                                 (NMAX*max(2,NRHS))

           RWORK

                     RWORK is REAL array, dimension (NMAX+2*NRHS)

           IWORK

                     IWORK is INTEGER array, dimension (2*NMAX)

           NOUT

                     NOUT is INTEGER
                     The unit number for output.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2013

Author

       Generated automatically by Doxygen for LAPACK from the source code.