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

NAME

       single_lin - real

   Functions
       program schkaa
           SCHKAA
       subroutine schkeq (THRESH, NOUT)
           SCHKEQ
       subroutine schkgb (DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, A,
           LA, AFAC, LAFAC, B, X, XACT, WORK, RWORK, IWORK, NOUT)
           SCHKGB
       subroutine schkge (DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR,
           NMAX, A, AFAC, AINV, B, X, XACT, WORK, RWORK, IWORK, NOUT)
           SCHKGE
       subroutine schkgt (DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, A, AF, B, X, XACT, WORK,
           RWORK, IWORK, NOUT)
           SCHKGT
       subroutine schklq (DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, NRHS, THRESH, TSTERR,
           NMAX, A, AF, AQ, AL, AC, B, X, XACT, TAU, WORK, RWORK, NOUT)
           SCHKLQ
       subroutine schkpb (DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A,
           AFAC, AINV, B, X, XACT, WORK, RWORK, IWORK, NOUT)
           SCHKPB
       subroutine schkpo (DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A,
           AFAC, AINV, B, X, XACT, WORK, RWORK, IWORK, NOUT)
           SCHKPO
       subroutine schkpp (DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A, AFAC, AINV, B,
           X, XACT, WORK, RWORK, IWORK, NOUT)
           SCHKPP
       subroutine schkps (DOTYPE, NN, NVAL, NNB, NBVAL, NRANK, RANKVAL, THRESH, TSTERR, NMAX, A,
           AFAC, PERM, PIV, WORK, RWORK, NOUT)
           SCHKPS
       subroutine schkpt (DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, A, D, E, B, X, XACT,
           WORK, RWORK, NOUT)
           SCHKPT
       subroutine schkq3 (DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, THRESH, A, COPYA, S,
           TAU, WORK, IWORK, NOUT)
           SCHKQ3
       subroutine schkql (DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, NRHS, THRESH, TSTERR,
           NMAX, A, AF, AQ, AL, AC, B, X, XACT, TAU, WORK, RWORK, NOUT)
           SCHKQL
       subroutine schkqr (DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, NRHS, THRESH, TSTERR,
           NMAX, A, AF, AQ, AR, AC, B, X, XACT, TAU, WORK, RWORK, IWORK, NOUT)
           SCHKQR
       subroutine schkqrt (THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB, NBVAL, NOUT)
           SCHKQRT
       subroutine schkqrtp (THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB, NBVAL, NOUT)
           SCHKQRTP
       program schkrfp
           SCHKRFP
       subroutine schkrq (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)
           SCHKRQ
       subroutine schksp (DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A, AFAC, AINV, B,
           X, XACT, WORK, RWORK, IWORK, NOUT)
           SCHKSP
       subroutine schksy (DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A,
           AFAC, AINV, B, X, XACT, WORK, RWORK, IWORK, NOUT)
           SCHKSY
       subroutine schksy_rook (DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A,
           AFAC, AINV, B, X, XACT, WORK, RWORK, IWORK, NOUT)
           SCHKSY_ROOK
       subroutine schktb (DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, AB, AINV, B, X,
           XACT, WORK, RWORK, IWORK, NOUT)
           SCHKTB
       subroutine schktp (DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, AP, AINVP, B, X,
           XACT, WORK, RWORK, IWORK, NOUT)
           SCHKTP
       subroutine schktr (DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A,
           AINV, B, X, XACT, WORK, RWORK, IWORK, NOUT)
           SCHKTR
       subroutine schktz (DOTYPE, NM, MVAL, NN, NVAL, THRESH, TSTERR, A, COPYA, S, TAU, WORK,
           NOUT)
           SCHKTZ
       subroutine sdrvgb (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, A, LA, AFB, LAFB, ASAV, B,
           BSAV, X, XACT, S, WORK, RWORK, IWORK, NOUT)
           SDRVGB
       subroutine sdrvge (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, ASAV, B, BSAV,
           X, XACT, S, WORK, RWORK, IWORK, NOUT)
           SDRVGE
       subroutine sdrvgt (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, A, AF, B, X, XACT, WORK, RWORK,
           IWORK, NOUT)
           SDRVGT
       subroutine sdrvls (DOTYPE, NM, MVAL, NN, NVAL, NNS, NSVAL, NNB, NBVAL, NXVAL, THRESH,
           TSTERR, A, COPYA, B, COPYB, C, S, COPYS, WORK, IWORK, NOUT)
           SDRVLS
       subroutine sdrvpb (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, ASAV, B, BSAV,
           X, XACT, S, WORK, RWORK, IWORK, NOUT)
           SDRVPB
       subroutine sdrvpo (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, ASAV, B, BSAV,
           X, XACT, S, WORK, RWORK, IWORK, NOUT)
           SDRVPO
       subroutine sdrvpp (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, ASAV, B, BSAV,
           X, XACT, S, WORK, RWORK, IWORK, NOUT)
           SDRVPP
       subroutine sdrvpt (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, A, D, E, B, X, XACT, WORK,
           RWORK, NOUT)
           SDRVPT
       subroutine sdrvrf1 (NOUT, NN, NVAL, THRESH, A, LDA, ARF, WORK)
           SDRVRF1
       subroutine sdrvrf2 (NOUT, NN, NVAL, A, LDA, ARF, AP, ASAV)
           SDRVRF2
       subroutine sdrvrf3 (NOUT, NN, NVAL, THRESH, A, LDA, ARF, B1, B2, S_WORK_SLANGE,
           S_WORK_SGEQRF, TAU)
           SDRVRF3
       subroutine sdrvrf4 (NOUT, NN, NVAL, THRESH, C1, C2, LDC, CRF, A, LDA, S_WORK_SLANGE)
           SDRVRF4
       subroutine sdrvrfp (NOUT, NN, NVAL, NNS, NSVAL, NNT, NTVAL, THRESH, A, ASAV, AFAC, AINV,
           B, BSAV, XACT, X, ARF, ARFINV, S_WORK_SLATMS, S_WORK_SPOT01, S_TEMP_SPOT02,
           S_TEMP_SPOT03, S_WORK_SLANSY, S_WORK_SPOT02, S_WORK_SPOT03)
           SDRVRFP
       subroutine sdrvsp (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, AINV, B, X,
           XACT, WORK, RWORK, IWORK, NOUT)
           SDRVSP
       subroutine sdrvsy (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, AINV, B, X,
           XACT, WORK, RWORK, IWORK, NOUT)
           SDRVSY
       subroutine sebchvxx (THRESH, PATH)
           SEBCHVXX
       subroutine serrge (PATH, NUNIT)
           SERRGE
       subroutine serrgt (PATH, NUNIT)
           SERRGT
       subroutine serrlq (PATH, NUNIT)
           SERRLQ
       subroutine serrls (PATH, NUNIT)
           SERRLS
       subroutine serrpo (PATH, NUNIT)
           SERRPO
       subroutine serrps (PATH, NUNIT)
           SERRPS
       subroutine serrql (PATH, NUNIT)
           SERRQL
       subroutine serrqp (PATH, NUNIT)
           SERRQP
       subroutine serrqr (PATH, NUNIT)
           SERRQR
       subroutine serrqrt (PATH, NUNIT)
           SERRQRT
       subroutine serrqrtp (PATH, NUNIT)
           SERRQRTP
       subroutine serrrfp (NUNIT)
           SERRRFP
       subroutine serrrq (PATH, NUNIT)
           SERRRQ
       subroutine serrsy (PATH, NUNIT)
           SERRSY
       subroutine serrtr (PATH, NUNIT)
           SERRTR
       subroutine serrtz (PATH, NUNIT)
           SERRTZ
       subroutine serrvx (PATH, NUNIT)
           SERRVX
       subroutine sgbt01 (M, N, KL, KU, A, LDA, AFAC, LDAFAC, IPIV, WORK, RESID)
           SGBT01
       subroutine sgbt02 (TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B, LDB, RESID)
           SGBT02
       subroutine sgbt05 (TRANS, N, KL, KU, NRHS, AB, LDAB, B, LDB, X, LDX, XACT, LDXACT, FERR,
           BERR, RESLTS)
           SGBT05
       subroutine sgelqs (M, N, NRHS, A, LDA, TAU, B, LDB, WORK, LWORK, INFO)
           SGELQS
       logical function sgennd (M, N, A, LDA)
           SGENND
       subroutine sgeqls (M, N, NRHS, A, LDA, TAU, B, LDB, WORK, LWORK, INFO)
           SGEQLS
       subroutine sgeqrs (M, N, NRHS, A, LDA, TAU, B, LDB, WORK, LWORK, INFO)
           SGEQRS
       subroutine sgerqs (M, N, NRHS, A, LDA, TAU, B, LDB, WORK, LWORK, INFO)
           SGERQS
       subroutine sget01 (M, N, A, LDA, AFAC, LDAFAC, IPIV, RWORK, RESID)
           SGET01
       subroutine sget02 (TRANS, M, N, NRHS, A, LDA, X, LDX, B, LDB, RWORK, RESID)
           SGET02
       subroutine sget03 (N, A, LDA, AINV, LDAINV, WORK, LDWORK, RWORK, RCOND, RESID)
           SGET03
       subroutine sget04 (N, NRHS, X, LDX, XACT, LDXACT, RCOND, RESID)
           SGET04
       real function sget06 (RCOND, RCONDC)
           SGET06
       subroutine sget07 (TRANS, N, NRHS, A, LDA, B, LDB, X, LDX, XACT, LDXACT, FERR, CHKFERR,
           BERR, RESLTS)
           SGET07
       subroutine sgtt01 (N, DL, D, DU, DLF, DF, DUF, DU2, IPIV, WORK, LDWORK, RWORK, RESID)
           SGTT01
       subroutine sgtt02 (TRANS, N, NRHS, DL, D, DU, X, LDX, B, LDB, RESID)
           SGTT02
       subroutine sgtt05 (TRANS, N, NRHS, DL, D, DU, B, LDB, X, LDX, XACT, LDXACT, FERR, BERR,
           RESLTS)
           SGTT05
       subroutine slahilb (N, NRHS, A, LDA, X, LDX, B, LDB, WORK, INFO)
           SLAHILB
       subroutine slaord (JOB, N, X, INCX)
           SLAORD
       subroutine slaptm (N, NRHS, ALPHA, D, E, X, LDX, BETA, B, LDB)
           SLAPTM
       subroutine slarhs (PATH, XTYPE, UPLO, TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B, LDB,
           ISEED, INFO)
           SLARHS
       subroutine slatb4 (PATH, IMAT, M, N, TYPE, KL, KU, ANORM, MODE, CNDNUM, DIST)
           SLATB4
       subroutine slatb5 (PATH, IMAT, N, TYPE, KL, KU, ANORM, MODE, CNDNUM, DIST)
           SLATB5
       subroutine slattb (IMAT, UPLO, TRANS, DIAG, ISEED, N, KD, AB, LDAB, B, WORK, INFO)
           SLATTB
       subroutine slattp (IMAT, UPLO, TRANS, DIAG, ISEED, N, A, B, WORK, INFO)
           SLATTP
       subroutine slattr (IMAT, UPLO, TRANS, DIAG, ISEED, N, A, LDA, B, WORK, INFO)
           SLATTR
       subroutine slavsp (UPLO, TRANS, DIAG, N, NRHS, A, IPIV, B, LDB, INFO)
           SLAVSP
       subroutine slavsy (UPLO, TRANS, DIAG, N, NRHS, A, LDA, IPIV, B, LDB, INFO)
           SLAVSY
       subroutine slavsy_rook (UPLO, TRANS, DIAG, N, NRHS, A, LDA, IPIV, B, LDB, INFO)
           SLAVSY_ROOK
       subroutine slqt01 (M, N, A, AF, Q, L, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           SLQT01
       subroutine slqt02 (M, N, K, A, AF, Q, L, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           SLQT02
       subroutine slqt03 (M, N, K, AF, C, CC, Q, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           SLQT03
       subroutine spbt01 (UPLO, N, KD, A, LDA, AFAC, LDAFAC, RWORK, RESID)
           SPBT01
       subroutine spbt02 (UPLO, N, KD, NRHS, A, LDA, X, LDX, B, LDB, RWORK, RESID)
           SPBT02
       subroutine spbt05 (UPLO, N, KD, NRHS, AB, LDAB, B, LDB, X, LDX, XACT, LDXACT, FERR, BERR,
           RESLTS)
           SPBT05
       subroutine spot01 (UPLO, N, A, LDA, AFAC, LDAFAC, RWORK, RESID)
           SPOT01
       subroutine spot02 (UPLO, N, NRHS, A, LDA, X, LDX, B, LDB, RWORK, RESID)
           SPOT02
       subroutine spot03 (UPLO, N, A, LDA, AINV, LDAINV, WORK, LDWORK, RWORK, RCOND, RESID)
           SPOT03
       subroutine spot05 (UPLO, N, NRHS, A, LDA, B, LDB, X, LDX, XACT, LDXACT, FERR, BERR,
           RESLTS)
           SPOT05
       subroutine sppt01 (UPLO, N, A, AFAC, RWORK, RESID)
           SPPT01
       subroutine sppt02 (UPLO, N, NRHS, A, X, LDX, B, LDB, RWORK, RESID)
           SPPT02
       subroutine sppt03 (UPLO, N, A, AINV, WORK, LDWORK, RWORK, RCOND, RESID)
           SPPT03
       subroutine sppt05 (UPLO, N, NRHS, AP, B, LDB, X, LDX, XACT, LDXACT, FERR, BERR, RESLTS)
           SPPT05
       subroutine spst01 (UPLO, N, A, LDA, AFAC, LDAFAC, PERM, LDPERM, PIV, RWORK, RESID, RANK)
           SPST01
       subroutine sptt01 (N, D, E, DF, EF, WORK, RESID)
           SPTT01
       subroutine sptt02 (N, NRHS, D, E, X, LDX, B, LDB, RESID)
           SPTT02
       subroutine sptt05 (N, NRHS, D, E, B, LDB, X, LDX, XACT, LDXACT, FERR, BERR, RESLTS)
           SPTT05
       subroutine sqlt01 (M, N, A, AF, Q, L, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           SQLT01
       subroutine sqlt02 (M, N, K, A, AF, Q, L, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           SQLT02
       subroutine sqlt03 (M, N, K, AF, C, CC, Q, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           SQLT03
       real function sqpt01 (M, N, K, A, AF, LDA, TAU, JPVT, WORK, LWORK)
           SQPT01
       subroutine sqrt01 (M, N, A, AF, Q, R, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           SQRT01
       subroutine sqrt01p (M, N, A, AF, Q, R, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           SQRT01P
       subroutine sqrt02 (M, N, K, A, AF, Q, R, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           SQRT02
       subroutine sqrt03 (M, N, K, AF, C, CC, Q, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           SQRT03
       subroutine sqrt04 (M, N, NB, RESULT)
           SQRT04
       subroutine sqrt05 (M, N, L, NB, RESULT)
           SQRT05
       real function sqrt11 (M, K, A, LDA, TAU, WORK, LWORK)
           SQRT11
       real function sqrt12 (M, N, A, LDA, S, WORK, LWORK)
           SQRT12
       subroutine sqrt13 (SCALE, M, N, A, LDA, NORMA, ISEED)
           SQRT13
       real function sqrt14 (TRANS, M, N, NRHS, A, LDA, X, LDX, WORK, LWORK)
           SQRT14
       subroutine sqrt15 (SCALE, RKSEL, M, N, NRHS, A, LDA, B, LDB, S, RANK, NORMA, NORMB, ISEED,
           WORK, LWORK)
           SQRT15
       subroutine sqrt16 (TRANS, M, N, NRHS, A, LDA, X, LDX, B, LDB, RWORK, RESID)
           SQRT16
       real function sqrt17 (TRANS, IRESID, M, N, NRHS, A, LDA, X, LDX, B, LDB, C, WORK, LWORK)
           SQRT17
       subroutine srqt01 (M, N, A, AF, Q, R, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           SRQT01
       subroutine srqt02 (M, N, K, A, AF, Q, R, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           SRQT02
       subroutine srqt03 (M, N, K, AF, C, CC, Q, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           SRQT03
       real function srzt01 (M, N, A, AF, LDA, TAU, WORK, LWORK)
           SRZT01
       real function srzt02 (M, N, AF, LDA, TAU, WORK, LWORK)
           SRZT02
       subroutine sspt01 (UPLO, N, A, AFAC, IPIV, C, LDC, RWORK, RESID)
           SSPT01
       subroutine ssyt01 (UPLO, N, A, LDA, AFAC, LDAFAC, IPIV, C, LDC, RWORK, RESID)
           SSYT01
       subroutine ssyt01_rook (UPLO, N, A, LDA, AFAC, LDAFAC, IPIV, C, LDC, RWORK, RESID)
           SSYT01_ROOK
       subroutine stbt02 (UPLO, TRANS, DIAG, N, KD, NRHS, AB, LDAB, X, LDX, B, LDB, WORK, RESID)
           STBT02
       subroutine stbt03 (UPLO, TRANS, DIAG, N, KD, NRHS, AB, LDAB, SCALE, CNORM, TSCAL, X, LDX,
           B, LDB, WORK, RESID)
           STBT03
       subroutine stbt05 (UPLO, TRANS, DIAG, N, KD, NRHS, AB, LDAB, B, LDB, X, LDX, XACT, LDXACT,
           FERR, BERR, RESLTS)
           STBT05
       subroutine stbt06 (RCOND, RCONDC, UPLO, DIAG, N, KD, AB, LDAB, WORK, RAT)
           STBT06
       subroutine stpt01 (UPLO, DIAG, N, AP, AINVP, RCOND, WORK, RESID)
           STPT01
       subroutine stpt02 (UPLO, TRANS, DIAG, N, NRHS, AP, X, LDX, B, LDB, WORK, RESID)
           STPT02
       subroutine stpt03 (UPLO, TRANS, DIAG, N, NRHS, AP, SCALE, CNORM, TSCAL, X, LDX, B, LDB,
           WORK, RESID)
           STPT03
       subroutine stpt05 (UPLO, TRANS, DIAG, N, NRHS, AP, B, LDB, X, LDX, XACT, LDXACT, FERR,
           BERR, RESLTS)
           STPT05
       subroutine stpt06 (RCOND, RCONDC, UPLO, DIAG, N, AP, WORK, RAT)
           STPT06
       subroutine strt01 (UPLO, DIAG, N, A, LDA, AINV, LDAINV, RCOND, WORK, RESID)
           STRT01
       subroutine strt02 (UPLO, TRANS, DIAG, N, NRHS, A, LDA, X, LDX, B, LDB, WORK, RESID)
           STRT02
       subroutine strt03 (UPLO, TRANS, DIAG, N, NRHS, A, LDA, SCALE, CNORM, TSCAL, X, LDX, B,
           LDB, WORK, RESID)
           STRT03
       subroutine strt05 (UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB, X, LDX, XACT, LDXACT, FERR,
           BERR, RESLTS)
           STRT05
       subroutine strt06 (RCOND, RCONDC, UPLO, DIAG, N, A, LDA, WORK, RAT)
           STRT06

Detailed Description

       This is the group of real LAPACK TESTING LIN routines.

Function Documentation

   program schkaa ()
       SCHKAA

       Purpose:

            SCHKAA is the main test program for the REAL 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 REAL 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
            SGE   11               List types on next line if 0 < NTYPES < 11
            SGB    8               List types on next line if 0 < NTYPES <  8
            SGT   12               List types on next line if 0 < NTYPES < 12
            SPO    9               List types on next line if 0 < NTYPES <  9
            SPS    9               List types on next line if 0 < NTYPES <  9
            SPP    9               List types on next line if 0 < NTYPES <  9
            SPB    8               List types on next line if 0 < NTYPES <  8
            SPT   12               List types on next line if 0 < NTYPES < 12
            SSY   10               List types on next line if 0 < NTYPES < 10
            SSR   10               List types on next line if 0 < NTYPES < 10
            SSP   10               List types on next line if 0 < NTYPES < 10
            STR   18               List types on next line if 0 < NTYPES < 18
            STP   18               List types on next line if 0 < NTYPES < 18
            STB   17               List types on next line if 0 < NTYPES < 17
            SQR    8               List types on next line if 0 < NTYPES <  8
            SRQ    8               List types on next line if 0 < NTYPES <  8
            SLQ    8               List types on next line if 0 < NTYPES <  8
            SQL    8               List types on next line if 0 < NTYPES <  8
            SQP    6               List types on next line if 0 < NTYPES <  6
            STZ    3               List types on next line if 0 < NTYPES <  3
            SLS    6               List types on next line if 0 < NTYPES <  6
            SEQ
            SQT
            SQX

             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

   subroutine schkeq (real THRESH, integer NOUT)
       SCHKEQ

       Purpose:

            SCHKEQ tests SGEEQU, SGBEQU, SPOEQU, SPPEQU and SPBEQU

       Parameters:
           THRESH

                     THRESH is REAL
                     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 schkgb (logical, dimension( * ) DOTYPE, integer NM, integer, dimension( * ) MVAL,
       integer NN, integer, dimension( * ) NVAL, integer NNB, integer, dimension( * ) NBVAL,
       integer NNS, integer, dimension( * ) NSVAL, real THRESH, logical TSTERR, real, dimension(
       * ) A, integer LA, real, dimension( * ) AFAC, integer LAFAC, real, dimension( * ) B, real,
       dimension( * ) X, real, dimension( * ) XACT, real, dimension( * ) WORK, real, dimension( *
       ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       SCHKGB

       Purpose:

            SCHKGB tests SGBTRF, -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 REAL
                     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 REAL 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 REAL 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 REAL array, dimension (NMAX*NSMAX)
                     where NSMAX is the largest entry in NSVAL.

           X

                     X is REAL array, dimension (NMAX*NSMAX)

           XACT

                     XACT is REAL array, dimension (NMAX*NSMAX)

           WORK

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

           RWORK

                     RWORK is REAL 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 schkge (logical, dimension( * ) DOTYPE, integer NM, integer, dimension( * ) MVAL,
       integer NN, integer, dimension( * ) NVAL, integer NNB, integer, dimension( * ) NBVAL,
       integer NNS, integer, dimension( * ) NSVAL, 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)
       SCHKGE

       Purpose:

            SCHKGE tests SGETRF, -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 REAL
                     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 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*NSMAX)
                     where NSMAX is the largest entry in NSVAL.

           X

                     X is REAL array, dimension (NMAX*NSMAX)

           XACT

                     XACT is REAL array, dimension (NMAX*NSMAX)

           WORK

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

           RWORK

                     RWORK is REAL 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:
           April 2012

   subroutine schkgt (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNS, integer, dimension( * ) NSVAL, real THRESH, logical TSTERR, real, dimension(
       * ) A, real, dimension( * ) AF, real, dimension( * ) B, real, dimension( * ) X, real,
       dimension( * ) XACT, real, dimension( * ) WORK, real, dimension( * ) RWORK, integer,
       dimension( * ) IWORK, integer NOUT)
       SCHKGT

       Purpose:

            SCHKGT tests SGTTRF, -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 REAL
                     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 REAL array, dimension (NMAX*4)

           AF

                     AF is REAL array, dimension (NMAX*4)

           B

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

           X

                     X is REAL array, dimension (NMAX*NSMAX)

           XACT

                     XACT is REAL array, dimension (NMAX*NSMAX)

           WORK

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

           RWORK

                     RWORK is REAL 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 schklq (logical, dimension( * ) DOTYPE, integer NM, integer, dimension( * ) MVAL,
       integer NN, integer, dimension( * ) NVAL, integer NNB, integer, dimension( * ) NBVAL,
       integer, dimension( * ) NXVAL, integer NRHS, real THRESH, logical TSTERR, integer NMAX,
       real, dimension( * ) A, real, dimension( * ) AF, real, dimension( * ) AQ, real, dimension(
       * ) AL, real, dimension( * ) AC, real, dimension( * ) B, real, dimension( * ) X, real,
       dimension( * ) XACT, real, dimension( * ) TAU, real, dimension( * ) WORK, real, dimension(
       * ) RWORK, integer NOUT)
       SCHKLQ

       Purpose:

            SCHKLQ tests SGELQF, SORGLQ and SORMLQ.

       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 REAL
                     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 REAL array, dimension (NMAX*NMAX)

           AF

                     AF is REAL array, dimension (NMAX*NMAX)

           AQ

                     AQ is REAL array, dimension (NMAX*NMAX)

           AL

                     AL is REAL array, dimension (NMAX*NMAX)

           AC

                     AC 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)

           TAU

                     TAU is REAL array, dimension (NMAX)

           WORK

                     WORK is REAL array, dimension (NMAX*NMAX)

           RWORK

                     RWORK is REAL 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 schkpb (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNB, integer, dimension( * ) NBVAL, integer NNS, integer, dimension( * ) NSVAL,
       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)
       SCHKPB

       Purpose:

            SCHKPB tests SPBTRF, -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 REAL
                     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*NSMAX)
                     where NSMAX is the largest entry in NSVAL.

           X

                     X is REAL array, dimension (NMAX*NSMAX)

           XACT

                     XACT is REAL array, dimension (NMAX*NSMAX)

           WORK

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

           RWORK

                     RWORK is REAL 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 schkpo (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNB, integer, dimension( * ) NBVAL, integer NNS, integer, dimension( * ) NSVAL,
       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)
       SCHKPO

       Purpose:

            SCHKPO tests SPOTRF, -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 REAL
                     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*NSMAX)
                     where NSMAX is the largest entry in NSVAL.

           X

                     X is REAL array, dimension (NMAX*NSMAX)

           XACT

                     XACT is REAL array, dimension (NMAX*NSMAX)

           WORK

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

           RWORK

                     RWORK is REAL 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 schkpp (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNS, integer, dimension( * ) NSVAL, 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)
       SCHKPP

       Purpose:

            SCHKPP tests SPPTRF, -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 REAL
                     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+1)/2)

           AFAC

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

           AINV

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

           B

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

           X

                     X is REAL array, dimension (NMAX*NSMAX)

           XACT

                     XACT is REAL array, dimension (NMAX*NSMAX)

           WORK

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

           RWORK

                     RWORK is REAL 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 schkps (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNB, integer, dimension( * ) NBVAL, integer NRANK, integer, dimension( * )
       RANKVAL, real THRESH, logical TSTERR, integer NMAX, real, dimension( * ) A, real,
       dimension( * ) AFAC, real, dimension( * ) PERM, integer, dimension( * ) PIV, real,
       dimension( * ) WORK, real, dimension( * ) RWORK, integer NOUT)
       SCHKPS

       Purpose:

            SCHKPS tests SPSTRF.

       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 REAL
                     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)

           PERM

                     PERM is REAL array, dimension (NMAX*NMAX)

           PIV

                     PIV is INTEGER array, dimension (NMAX)

           WORK

                     WORK is REAL array, dimension (NMAX*3)

           RWORK

                     RWORK is REAL 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 schkpt (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNS, integer, dimension( * ) NSVAL, real THRESH, logical TSTERR, real, dimension(
       * ) A, real, dimension( * ) D, real, dimension( * ) E, real, dimension( * ) B, real,
       dimension( * ) X, real, dimension( * ) XACT, real, dimension( * ) WORK, real, dimension( *
       ) RWORK, integer NOUT)
       SCHKPT

       Purpose:

            SCHKPT tests SPTTRF, -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 REAL
                     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 REAL array, dimension (NMAX*2)

           D

                     D is REAL array, dimension (NMAX*2)

           E

                     E is REAL array, dimension (NMAX*2)

           B

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

           X

                     X is REAL array, dimension (NMAX*NSMAX)

           XACT

                     XACT is REAL array, dimension (NMAX*NSMAX)

           WORK

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

           RWORK

                     RWORK is REAL 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 schkq3 (logical, dimension( * ) DOTYPE, integer NM, integer, dimension( * ) MVAL,
       integer NN, integer, dimension( * ) NVAL, integer NNB, integer, dimension( * ) NBVAL,
       integer, dimension( * ) NXVAL, real THRESH, real, dimension( * ) A, real, dimension( * )
       COPYA, real, dimension( * ) S, real, dimension( * ) TAU, real, dimension( * ) WORK,
       integer, dimension( * ) IWORK, integer NOUT)
       SCHKQ3

       Purpose:

            SCHKQ3 tests SGEQP3.

       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 REAL
                     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 REAL 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 REAL array, dimension (MMAX*NMAX)

           S

                     S is REAL array, dimension
                                 (min(MMAX,NMAX))

           TAU

                     TAU is REAL array, dimension (MMAX)

           WORK

                     WORK is REAL 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 schkql (logical, dimension( * ) DOTYPE, integer NM, integer, dimension( * ) MVAL,
       integer NN, integer, dimension( * ) NVAL, integer NNB, integer, dimension( * ) NBVAL,
       integer, dimension( * ) NXVAL, integer NRHS, real THRESH, logical TSTERR, integer NMAX,
       real, dimension( * ) A, real, dimension( * ) AF, real, dimension( * ) AQ, real, dimension(
       * ) AL, real, dimension( * ) AC, real, dimension( * ) B, real, dimension( * ) X, real,
       dimension( * ) XACT, real, dimension( * ) TAU, real, dimension( * ) WORK, real, dimension(
       * ) RWORK, integer NOUT)
       SCHKQL

       Purpose:

            SCHKQL tests SGEQLF, SORGQL and SORMQL.

       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 REAL
                     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 REAL array, dimension (NMAX*NMAX)

           AF

                     AF is REAL array, dimension (NMAX*NMAX)

           AQ

                     AQ is REAL array, dimension (NMAX*NMAX)

           AL

                     AL is REAL array, dimension (NMAX*NMAX)

           AC

                     AC 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)

           TAU

                     TAU is REAL array, dimension (NMAX)

           WORK

                     WORK is REAL array, dimension (NMAX*NMAX)

           RWORK

                     RWORK is REAL 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 schkqr (logical, dimension( * ) DOTYPE, integer NM, integer, dimension( * ) MVAL,
       integer NN, integer, dimension( * ) NVAL, integer NNB, integer, dimension( * ) NBVAL,
       integer, dimension( * ) NXVAL, integer NRHS, real THRESH, logical TSTERR, integer NMAX,
       real, dimension( * ) A, real, dimension( * ) AF, real, dimension( * ) AQ, real, dimension(
       * ) AR, real, dimension( * ) AC, real, dimension( * ) B, real, dimension( * ) X, real,
       dimension( * ) XACT, real, dimension( * ) TAU, real, dimension( * ) WORK, real, dimension(
       * ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       SCHKQR

       Purpose:

            SCHKQR tests SGEQRF, SORGQR and SORMQR.

       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 REAL
                     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 REAL array, dimension (NMAX*NMAX)

           AF

                     AF is REAL array, dimension (NMAX*NMAX)

           AQ

                     AQ is REAL array, dimension (NMAX*NMAX)

           AR

                     AR is REAL array, dimension (NMAX*NMAX)

           AC

                     AC 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)

           TAU

                     TAU is REAL array, dimension (NMAX)

           WORK

                     WORK is REAL array, dimension (NMAX*NMAX)

           RWORK

                     RWORK is REAL 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 schkqrt (real THRESH, logical TSTERR, integer NM, integer, dimension( * ) MVAL,
       integer NN, integer, dimension( * ) NVAL, integer NNB, integer, dimension( * ) NBVAL,
       integer NOUT)
       SCHKQRT

       Purpose:

            SCHKQRT tests SGEQRT and SGEMQRT.

       Parameters:
           THRESH

                     THRESH is REAL
                     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 schkqrtp (real THRESH, logical TSTERR, integer NM, integer, dimension( * ) MVAL,
       integer NN, integer, dimension( * ) NVAL, integer NNB, integer, dimension( * ) NBVAL,
       integer NOUT)
       SCHKQRTP

       Purpose:

            SCHKQRTP tests STPQRT and STPMQRT.

       Parameters:
           THRESH

                     THRESH is REAL
                     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 schkrfp ()
       SCHKRFP

       Purpose:

            SCHKRFP is the main test program for the REAL 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 schkrq (logical, dimension( * ) DOTYPE, integer NM, integer, dimension( * ) MVAL,
       integer NN, integer, dimension( * ) NVAL, integer NNB, integer, dimension( * ) NBVAL,
       integer, dimension( * ) NXVAL, integer NRHS, real THRESH, logical TSTERR, integer NMAX,
       real, dimension( * ) A, real, dimension( * ) AF, real, dimension( * ) AQ, real, dimension(
       * ) AR, real, dimension( * ) AC, real, dimension( * ) B, real, dimension( * ) X, real,
       dimension( * ) XACT, real, dimension( * ) TAU, real, dimension( * ) WORK, real, dimension(
       * ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       SCHKRQ

       Purpose:

            SCHKRQ tests SGERQF, SORGRQ and SORMRQ.

       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 REAL
                     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 REAL array, dimension (NMAX*NMAX)

           AF

                     AF is REAL array, dimension (NMAX*NMAX)

           AQ

                     AQ is REAL array, dimension (NMAX*NMAX)

           AR

                     AR is REAL array, dimension (NMAX*NMAX)

           AC

                     AC 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)

           TAU

                     TAU is REAL array, dimension (NMAX)

           WORK

                     WORK is REAL array, dimension (NMAX*NMAX)

           RWORK

                     RWORK is REAL 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 schksp (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNS, integer, dimension( * ) NSVAL, 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)
       SCHKSP

       Purpose:

            SCHKSP tests SSPTRF, -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 REAL
                     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+1)/2)

           AFAC

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

           AINV

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

           B

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

           X

                     X is REAL array, dimension (NMAX*NSMAX)

           XACT

                     XACT is REAL array, dimension (NMAX*NSMAX)

           WORK

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

           RWORK

                     RWORK is REAL 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 schksy (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNB, integer, dimension( * ) NBVAL, integer NNS, integer, dimension( * ) NSVAL,
       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)
       SCHKSY

       Purpose:

            SCHKSY tests SSYTRF, -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 REAL
                     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*NSMAX)
                     where NSMAX is the largest entry in NSVAL.

           X

                     X is REAL array, dimension (NMAX*NSMAX)

           XACT

                     XACT is REAL array, dimension (NMAX*NSMAX)

           WORK

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

           RWORK

                     RWORK is REAL 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 schksy_rook (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * )
       NVAL, integer NNB, integer, dimension( * ) NBVAL, integer NNS, integer, dimension( * )
       NSVAL, 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)
       SCHKSY_ROOK

       Purpose:

            SCHKSY_ROOK tests SSYTRF_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 REAL
                     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*NSMAX)
                     where NSMAX is the largest entry in NSVAL.

           X

                     X is REAL array, dimension (NMAX*NSMAX)

           XACT

                     XACT is REAL array, dimension (NMAX*NSMAX)

           WORK

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

           RWORK

                     RWORK is REAL 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 schktb (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNS, integer, dimension( * ) NSVAL, real THRESH, logical TSTERR, integer NMAX,
       real, dimension( * ) AB, real, dimension( * ) AINV, real, dimension( * ) B, real,
       dimension( * ) X, real, dimension( * ) XACT, real, dimension( * ) WORK, real, dimension( *
       ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       SCHKTB

       Purpose:

            SCHKTB tests STBTRS, -RFS, and -CON, and SLATBS.

       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 REAL
                     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 REAL array, dimension (NMAX*NMAX)

           AINV

                     AINV is REAL array, dimension (NMAX*NMAX)

           B

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

           X

                     X is REAL array, dimension (NMAX*NSMAX)

           XACT

                     XACT is REAL array, dimension (NMAX*NSMAX)

           WORK

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

           RWORK

                     RWORK is REAL 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 schktp (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNS, integer, dimension( * ) NSVAL, real THRESH, logical TSTERR, integer NMAX,
       real, dimension( * ) AP, real, dimension( * ) AINVP, real, dimension( * ) B, real,
       dimension( * ) X, real, dimension( * ) XACT, real, dimension( * ) WORK, real, dimension( *
       ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       SCHKTP

       Purpose:

            SCHKTP tests STPTRI, -TRS, -RFS, and -CON, and SLATPS

       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 REAL
                     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 REAL array, dimension
                                 (NMAX*(NMAX+1)/2)

           AINVP

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

           B

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

           X

                     X is REAL array, dimension (NMAX*NSMAX)

           XACT

                     XACT is REAL array, dimension (NMAX*NSMAX)

           WORK

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

           IWORK

                     IWORK is INTEGER array, dimension (NMAX)

           RWORK

                     RWORK is REAL 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 schktr (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNB, integer, dimension( * ) NBVAL, integer NNS, integer, dimension( * ) NSVAL,
       real THRESH, logical TSTERR, integer NMAX, real, dimension( * ) A, real, dimension( * )
       AINV, real, dimension( * ) B, real, dimension( * ) X, real, dimension( * ) XACT, real,
       dimension( * ) WORK, real, dimension( * ) RWORK, integer, dimension( * ) IWORK, integer
       NOUT)
       SCHKTR

       Purpose:

            SCHKTR tests STRTRI, -TRS, -RFS, and -CON, and SLATRS

       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 REAL
                     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 REAL array, dimension (NMAX*NMAX)

           AINV

                     AINV is REAL array, dimension (NMAX*NMAX)

           B

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

           X

                     X is REAL array, dimension (NMAX*NSMAX)

           XACT

                     XACT is REAL array, dimension (NMAX*NSMAX)

           WORK

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

           RWORK

                     RWORK is REAL 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 schktz (logical, dimension( * ) DOTYPE, integer NM, integer, dimension( * ) MVAL,
       integer NN, integer, dimension( * ) NVAL, real THRESH, logical TSTERR, real, dimension( *
       ) A, real, dimension( * ) COPYA, real, dimension( * ) S, real, dimension( * ) TAU, real,
       dimension( * ) WORK, integer NOUT)
       SCHKTZ

       Purpose:

            SCHKTZ tests STZRZF.

       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 REAL
                     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 REAL 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 REAL array, dimension (MMAX*NMAX)

           S

                     S is REAL array, dimension
                                 (min(MMAX,NMAX))

           TAU

                     TAU is REAL array, dimension (MMAX)

           WORK

                     WORK is REAL 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 sdrvgb (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, real THRESH, logical TSTERR, real, dimension( * ) A, integer LA, real,
       dimension( * ) AFB, integer LAFB, real, dimension( * ) ASAV, real, dimension( * ) B, real,
       dimension( * ) BSAV, real, dimension( * ) X, real, dimension( * ) XACT, real, dimension( *
       ) S, real, dimension( * ) WORK, real, dimension( * ) RWORK, integer, dimension( * ) IWORK,
       integer NOUT)
       SDRVGB SDRVGBX

       Purpose:

            SDRVGB tests the driver routines SGBSV 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 REAL
                     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 REAL 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 REAL 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 REAL array, dimension (LA)

           B

                     B is REAL array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is REAL array, dimension (NMAX*NRHS)

           X

                     X is REAL array, dimension (NMAX*NRHS)

           XACT

                     XACT is REAL array, dimension (NMAX*NRHS)

           S

                     S is REAL array, dimension (2*NMAX)

           WORK

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

           RWORK

                     RWORK is REAL 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:

            SDRVGB tests the driver routines SGBSV, -SVX, and -SVXX.

            Note that this file is used only when the XBLAS are available,
            otherwise sdrvgb.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 REAL
                     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 REAL 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 REAL 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 REAL array, dimension (LA)

           B

                     B is REAL array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is REAL array, dimension (NMAX*NRHS)

           X

                     X is REAL array, dimension (NMAX*NRHS)

           XACT

                     XACT is REAL array, dimension (NMAX*NRHS)

           S

                     S is REAL array, dimension (2*NMAX)

           WORK

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

           RWORK

                     RWORK is REAL 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 sdrvge (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, real THRESH, logical TSTERR, integer NMAX, real, dimension( * ) A, real,
       dimension( * ) AFAC, real, dimension( * ) ASAV, real, dimension( * ) B, real, dimension( *
       ) BSAV, real, dimension( * ) X, real, dimension( * ) XACT, real, dimension( * ) S, real,
       dimension( * ) WORK, real, dimension( * ) RWORK, integer, dimension( * ) IWORK, integer
       NOUT)
       SDRVGE SDRVGEX

       Purpose:

            SDRVGE tests the driver routines SGESV 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 REAL
                     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)

           ASAV

                     ASAV is REAL array, dimension (NMAX*NMAX)

           B

                     B is REAL array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is REAL array, dimension (NMAX*NRHS)

           X

                     X is REAL array, dimension (NMAX*NRHS)

           XACT

                     XACT is REAL array, dimension (NMAX*NRHS)

           S

                     S is REAL array, dimension (2*NMAX)

           WORK

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

           RWORK

                     RWORK is REAL 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:

            SDRVGE tests the driver routines SGESV, -SVX, and -SVXX.

            Note that this file is used only when the XBLAS are available,
            otherwise sdrvge.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 REAL
                     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)

           ASAV

                     ASAV is REAL array, dimension (NMAX*NMAX)

           B

                     B is REAL array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is REAL array, dimension (NMAX*NRHS)

           X

                     X is REAL array, dimension (NMAX*NRHS)

           XACT

                     XACT is REAL array, dimension (NMAX*NRHS)

           S

                     S is REAL array, dimension (2*NMAX)

           WORK

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

           RWORK

                     RWORK is REAL 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 sdrvgt (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, real THRESH, logical TSTERR, real, dimension( * ) A, real, dimension( * )
       AF, real, dimension( * ) B, real, dimension( * ) X, real, dimension( * ) XACT, real,
       dimension( * ) WORK, real, dimension( * ) RWORK, integer, dimension( * ) IWORK, integer
       NOUT)
       SDRVGT

       Purpose:

            SDRVGT tests SGTSV 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 REAL
                     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 REAL array, dimension (NMAX*4)

           AF

                     AF is REAL array, dimension (NMAX*4)

           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(3,NRHS))

           RWORK

                     RWORK is REAL 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 sdrvls (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, real THRESH,
       logical TSTERR, real, dimension( * ) A, real, dimension( * ) COPYA, real, dimension( * )
       B, real, dimension( * ) COPYB, real, dimension( * ) C, real, dimension( * ) S, real,
       dimension( * ) COPYS, real, dimension( * ) WORK, integer, dimension( * ) IWORK, integer
       NOUT)
       SDRVLS

       Purpose:

            SDRVLS tests the least squares driver routines SGELS, SGELSS, SGELSY
            and SGELSD.

       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 REAL
                     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 REAL 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 REAL array, dimension (MMAX*NMAX)

           B

                     B is REAL 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 REAL array, dimension (MMAX*NSMAX)

           C

                     C is REAL array, dimension (MMAX*NSMAX)

           S

                     S is REAL array, dimension
                                 (min(MMAX,NMAX))

           COPYS

                     COPYS is REAL array, dimension
                                 (min(MMAX,NMAX))

           WORK

                     WORK is REAL 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 sdrvpb (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, real THRESH, logical TSTERR, integer NMAX, real, dimension( * ) A, real,
       dimension( * ) AFAC, real, dimension( * ) ASAV, real, dimension( * ) B, real, dimension( *
       ) BSAV, real, dimension( * ) X, real, dimension( * ) XACT, real, dimension( * ) S, real,
       dimension( * ) WORK, real, dimension( * ) RWORK, integer, dimension( * ) IWORK, integer
       NOUT)
       SDRVPB

       Purpose:

            SDRVPB tests the driver routines SPBSV 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 REAL
                     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)

           ASAV

                     ASAV is REAL array, dimension (NMAX*NMAX)

           B

                     B is REAL array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is REAL array, dimension (NMAX*NRHS)

           X

                     X is REAL array, dimension (NMAX*NRHS)

           XACT

                     XACT is REAL array, dimension (NMAX*NRHS)

           S

                     S is REAL array, dimension (NMAX)

           WORK

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

           RWORK

                     RWORK is REAL 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 sdrvpo (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, real THRESH, logical TSTERR, integer NMAX, real, dimension( * ) A, real,
       dimension( * ) AFAC, real, dimension( * ) ASAV, real, dimension( * ) B, real, dimension( *
       ) BSAV, real, dimension( * ) X, real, dimension( * ) XACT, real, dimension( * ) S, real,
       dimension( * ) WORK, real, dimension( * ) RWORK, integer, dimension( * ) IWORK, integer
       NOUT)
       SDRVPO SDRVPOX

       Purpose:

            SDRVPO tests the driver routines SPOSV 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 REAL
                     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)

           ASAV

                     ASAV is REAL array, dimension (NMAX*NMAX)

           B

                     B is REAL array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is REAL array, dimension (NMAX*NRHS)

           X

                     X is REAL array, dimension (NMAX*NRHS)

           XACT

                     XACT is REAL array, dimension (NMAX*NRHS)

           S

                     S is REAL array, dimension (NMAX)

           WORK

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

           RWORK

                     RWORK is REAL 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:

            SDRVPO tests the driver routines SPOSV, -SVX, and -SVXX.

            Note that this file is used only when the XBLAS are available,
            otherwise sdrvpo.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 REAL
                     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)

           ASAV

                     ASAV is REAL array, dimension (NMAX*NMAX)

           B

                     B is REAL array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is REAL array, dimension (NMAX*NRHS)

           X

                     X is REAL array, dimension (NMAX*NRHS)

           XACT

                     XACT is REAL array, dimension (NMAX*NRHS)

           S

                     S is REAL array, dimension (NMAX)

           WORK

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

           RWORK

                     RWORK is REAL 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 sdrvpp (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, real THRESH, logical TSTERR, integer NMAX, real, dimension( * ) A, real,
       dimension( * ) AFAC, real, dimension( * ) ASAV, real, dimension( * ) B, real, dimension( *
       ) BSAV, real, dimension( * ) X, real, dimension( * ) XACT, real, dimension( * ) S, real,
       dimension( * ) WORK, real, dimension( * ) RWORK, integer, dimension( * ) IWORK, integer
       NOUT)
       SDRVPP

       Purpose:

            SDRVPP tests the driver routines SPPSV 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 REAL
                     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+1)/2)

           AFAC

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

           ASAV

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

           B

                     B is REAL array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is REAL array, dimension (NMAX*NRHS)

           X

                     X is REAL array, dimension (NMAX*NRHS)

           XACT

                     XACT is REAL array, dimension (NMAX*NRHS)

           S

                     S is REAL array, dimension (NMAX)

           WORK

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

           RWORK

                     RWORK is REAL 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 sdrvpt (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, real THRESH, logical TSTERR, real, dimension( * ) A, real, dimension( * ) D,
       real, dimension( * ) E, real, dimension( * ) B, real, dimension( * ) X, real, dimension( *
       ) XACT, real, dimension( * ) WORK, real, dimension( * ) RWORK, integer NOUT)
       SDRVPT

       Purpose:

            SDRVPT tests SPTSV 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 REAL
                     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 REAL array, dimension (NMAX*2)

           D

                     D is REAL array, dimension (NMAX*2)

           E

                     E is REAL array, dimension (NMAX*2)

           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(3,NRHS))

           RWORK

                     RWORK is REAL 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 sdrvrf1 (integer NOUT, integer NN, integer, dimension( nn ) NVAL, real THRESH,
       real, dimension( lda, * ) A, integer LDA, real, dimension( * ) ARF, real, dimension( * )
       WORK)
       SDRVRF1

       Purpose:

            SDRVRF1 tests the LAPACK RFP routines:
                SLANSF

       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 REAL
                           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 REAL array, dimension (LDA,NMAX)

           LDA

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

           ARF

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

           WORK

                     WORK is REAL array, dimension ( NMAX )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine sdrvrf2 (integer NOUT, integer NN, integer, dimension( nn ) NVAL, real, dimension(
       lda, * ) A, integer LDA, real, dimension( * ) ARF, real, dimension(*) AP, real, dimension(
       lda, * ) ASAV)
       SDRVRF2

       Purpose:

            SDRVRF2 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 REAL array, dimension (LDA,NMAX)

           LDA

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

           ARF

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

           AP

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

           ASAV

                     ASAV is REAL array, dimension (LDA,NMAX)

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine sdrvrf3 (integer NOUT, integer NN, integer, dimension( nn ) NVAL, real THRESH,
       real, dimension( lda, * ) A, integer LDA, real, dimension( * ) ARF, real, dimension( lda,
       * ) B1, real, dimension( lda, * ) B2, real, dimension( * ) S_WORK_SLANGE, real, dimension(
       * ) S_WORK_SGEQRF, real, dimension( * ) TAU)
       SDRVRF3

       Purpose:

            SDRVRF3 tests the LAPACK RFP routines:
                STFSM

       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 REAL
                           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 REAL array, dimension (LDA,NMAX)

           LDA

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

           ARF

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

           B1

                     B1 is REAL array, dimension (LDA,NMAX)

           B2

                     B2 is REAL array, dimension (LDA,NMAX)

           S_WORK_SLANGE

                     S_WORK_SLANGE is REAL array, dimension (NMAX)

           S_WORK_SGEQRF

                     S_WORK_SGEQRF is REAL array, dimension (NMAX)

           TAU

                     TAU is REAL array, dimension (NMAX)

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine sdrvrf4 (integer NOUT, integer NN, integer, dimension( nn ) NVAL, real THRESH,
       real, dimension( ldc, * ) C1, real, dimension( ldc, *) C2, integer LDC, real, dimension( *
       ) CRF, real, dimension( lda, * ) A, integer LDA, real, dimension( * ) S_WORK_SLANGE)
       SDRVRF4

       Purpose:

            SDRVRF4 tests the LAPACK RFP routines:
                SSFRK

       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 REAL
                           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 REAL array,
                           dimension (LDC,NMAX)

           C2

                     C2 is REAL array,
                           dimension (LDC,NMAX)

           LDC

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

           CRF

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

           A

                     A is REAL array,
                           dimension (LDA,NMAX)

           LDA

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

           S_WORK_SLANGE

                     S_WORK_SLANGE is REAL array, dimension (NMAX)

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine sdrvrfp (integer NOUT, integer NN, integer, dimension( nn ) NVAL, integer NNS,
       integer, dimension( nns ) NSVAL, integer NNT, integer, dimension( nnt ) NTVAL, real
       THRESH, real, dimension( * ) A, real, dimension( * ) ASAV, real, dimension( * ) AFAC,
       real, dimension( * ) AINV, real, dimension( * ) B, real, dimension( * ) BSAV, real,
       dimension( * ) XACT, real, dimension( * ) X, real, dimension( * ) ARF, real, dimension( *
       ) ARFINV, real, dimension( * ) S_WORK_SLATMS, real, dimension( * ) S_WORK_SPOT01, real,
       dimension( * ) S_TEMP_SPOT02, real, dimension( * ) S_TEMP_SPOT03, real, dimension( * )
       S_WORK_SLANSY, real, dimension( * ) S_WORK_SPOT02, real, dimension( * ) S_WORK_SPOT03)
       SDRVRFP

       Purpose:

            SDRVRFP tests the LAPACK RFP routines:
                SPFTRF, SPFTRS, and SPFTRI.

            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 STRTTF and
            STFTTR.

            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 SPFTRF, 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 SPFTRF 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 REAL
                           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 REAL array, dimension (NMAX*NMAX)

           ASAV

                     ASAV 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*MAXRHS)

           BSAV

                     BSAV is REAL array, dimension (NMAX*MAXRHS)

           XACT

                     XACT is REAL array, dimension (NMAX*MAXRHS)

           X

                     X is REAL array, dimension (NMAX*MAXRHS)

           ARF

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

           ARFINV

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

           S_WORK_SLATMS

                     S_WORK_SLATMS is REAL array, dimension ( 3*NMAX )

           S_WORK_SPOT01

                     S_WORK_SPOT01 is REAL array, dimension ( NMAX )

           S_TEMP_SPOT02

                     S_TEMP_SPOT02 is REAL array, dimension ( NMAX*MAXRHS )

           S_TEMP_SPOT03

                     S_TEMP_SPOT03 is REAL array, dimension ( NMAX*NMAX )

           S_WORK_SLATMS

                     S_WORK_SLATMS is REAL array, dimension ( NMAX )

           S_WORK_SLANSY

                     S_WORK_SLANSY is REAL array, dimension ( NMAX )

           S_WORK_SPOT02

                     S_WORK_SPOT02 is REAL array, dimension ( NMAX )

           S_WORK_SPOT03

                     S_WORK_SPOT03 is REAL array, dimension ( NMAX )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2013

   subroutine sdrvsp (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)
       SDRVSP

       Purpose:

            SDRVSP tests the driver routines SSPSV 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 REAL
                     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+1)/2)

           AFAC

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

           AINV

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

           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 2011

   subroutine sdrvsy (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 SDRVSYX

       Purpose:

            SDRVSY tests the driver routines SSYSV 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 REAL
                     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

       Purpose:

            SDRVSY tests the driver routines SSYSV, -SVX, and -SVXX

            Note that this file is used only when the XBLAS are available,
            otherwise sdrvsy.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 REAL
                     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 2011

   subroutine sebchvxx (real THRESH, character*3 PATH)
       SEBCHVXX

       Purpose:

             SEBCHVXX will run S**SVXX on a series of Hilbert matrices and then
             compare the error bounds returned by SGESVXX 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, SGESVXX 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 SGESVXX.  Let RCONDc be the RCOND returned by SGESVXX
                     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 )).

                  7. 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 serrge (character*3 PATH, integer NUNIT)
       SERRGE SERRGEX

       Purpose:

            SERRGE tests the error exits for the REAL 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:

            SERRGE tests the error exits for the REAL routines
            for general matrices.

            Note that this file is used only when the XBLAS are available,
            otherwise serrge.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 serrgt (character*3 PATH, integer NUNIT)
       SERRGT

       Purpose:

            SERRGT tests the error exits for the REAL 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 serrlq (character*3 PATH, integer NUNIT)
       SERRLQ

       Purpose:

            SERRLQ tests the error exits for the REAL 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 serrls (character*3 PATH, integer NUNIT)
       SERRLS

       Purpose:

            SERRLS tests the error exits for the REAL least squares
            driver routines (SGELS, 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 serrpo (character*3 PATH, integer NUNIT)
       SERRPO SERRPOX

       Purpose:

            SERRPO tests the error exits for the REAL 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:

            SERRPO tests the error exits for the REAL routines
            for symmetric positive definite matrices.

            Note that this file is used only when the XBLAS are available,
            otherwise serrpo.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 serrps (character*3 PATH, integer NUNIT)
       SERRPS

       Purpose:

            SERRPS tests the error exits for the REAL routines
            for SPSTRF..

       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 serrql (character*3 PATH, integer NUNIT)
       SERRQL

       Purpose:

            SERRQL tests the error exits for the REAL 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 serrqp (character*3 PATH, integer NUNIT)
       SERRQP

       Purpose:

            SERRQP tests the error exits for SGEQP3.

       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 serrqr (character*3 PATH, integer NUNIT)
       SERRQR

       Purpose:

            SERRQR tests the error exits for the REAL 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 serrqrt (character*3 PATH, integer NUNIT)
       SERRQRT

       Purpose:

            SERRQRT tests the error exits for the REAL 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 serrqrtp (character*3 PATH, integer NUNIT)
       SERRQRTP

       Purpose:

            SERRQRTP 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 serrrfp (integer NUNIT)
       SERRRFP

       Purpose:

            SERRRFP tests the error exits for the REAL driver routines
            for solving linear systems of equations.

            SDRVRFP tests the REAL LAPACK RFP routines:
                STFSM, STFTRI, SSFRK, STFTTP, STFTTR, SPFTRF, SPFTRS, STPTTF,
                STPTTR, STRTTF, and STRTTP

       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 serrrq (character*3 PATH, integer NUNIT)
       SERRRQ

       Purpose:

            SERRRQ tests the error exits for the REAL 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 serrsy (character*3 PATH, integer NUNIT)
       SERRSY SERRSYX

       Purpose:

            SERRSY tests the error exits for the REAL 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:

            SERRSY tests the error exits for the REAL routines
            for symmetric indefinite matrices.

            Note that this file is used only when the XBLAS are available,
            otherwise serrsy.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 serrtr (character*3 PATH, integer NUNIT)
       SERRTR

       Purpose:

            SERRTR tests the error exits for the REAL 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 serrtz (character*3 PATH, integer NUNIT)
       SERRTZ

       Purpose:

            SERRTZ 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 serrvx (character*3 PATH, integer NUNIT)
       SERRVX SERRVXX

       Purpose:

            SERRVX tests the error exits for the REAL 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:

            SERRVX tests the error exits for the REAL 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 sgbt01 (integer M, integer N, integer KL, integer KU, real, dimension( lda, * ) A,
       integer LDA, real, dimension( ldafac, * ) AFAC, integer LDAFAC, integer, dimension( * )
       IPIV, real, dimension( * ) WORK, real RESID)
       SGBT01

       Purpose:

            SGBT01 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 REAL 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 REAL 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
                     SGBTRF.  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 SGBTRF 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 SGBTRF.

           WORK

                     WORK is REAL array, dimension (2*KL+KU+1)

           RESID

                     RESID is REAL
                     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 sgbt02 (character TRANS, integer M, integer N, integer KL, integer KU, integer
       NRHS, real, dimension( lda, * ) A, integer LDA, real, dimension( ldx, * ) X, integer LDX,
       real, dimension( ldb, * ) B, integer LDB, real RESID)
       SGBT02

       Purpose:

            SGBT02 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 REAL 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 REAL 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 REAL 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 REAL
                     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 sgbt05 (character TRANS, integer N, integer KL, integer KU, integer NRHS, real,
       dimension( ldab, * ) AB, integer LDAB, real, dimension( ldb, * ) B, integer LDB, real,
       dimension( ldx, * ) X, integer LDX, real, dimension( ldxact, * ) XACT, integer LDXACT,
       real, dimension( * ) FERR, real, dimension( * ) BERR, real, dimension( * ) RESLTS)
       SGBT05

       Purpose:

            SGBT05 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 sgelqs (integer M, integer N, integer NRHS, real, dimension( lda, * ) A, integer
       LDA, real, dimension( * ) TAU, real, dimension( ldb, * ) B, integer LDB, real, dimension(
       lwork ) WORK, integer LWORK, integer INFO)
       SGELQS

       Purpose:

            Compute a minimum-norm solution
                min || A*X - B ||
            using the LQ factorization
                A = L*Q
            computed by SGELQF.

       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 REAL array, dimension (LDA,N)
                     Details of the LQ factorization of the original matrix A as
                     returned by SGELQF.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= M.

           TAU

                     TAU is REAL array, dimension (M)
                     Details of the orthogonal matrix Q.

           B

                     B is REAL 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 REAL 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 sgennd (integer M, integer N, real, dimension( lda, * ) A, integer LDA)
       SGENND

       Purpose:

               SGENND 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 REAL 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 sgeqls (integer M, integer N, integer NRHS, real, dimension( lda, * ) A, integer
       LDA, real, dimension( * ) TAU, real, dimension( ldb, * ) B, integer LDB, real, dimension(
       lwork ) WORK, integer LWORK, integer INFO)
       SGEQLS

       Purpose:

            Solve the least squares problem
                min || A*X - B ||
            using the QL factorization
                A = Q*L
            computed by SGEQLF.

       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 REAL array, dimension (LDA,N)
                     Details of the QL factorization of the original matrix A as
                     returned by SGEQLF.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= M.

           TAU

                     TAU is REAL array, dimension (N)
                     Details of the orthogonal matrix Q.

           B

                     B is REAL 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 REAL 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 sgeqrs (integer M, integer N, integer NRHS, real, dimension( lda, * ) A, integer
       LDA, real, dimension( * ) TAU, real, dimension( ldb, * ) B, integer LDB, real, dimension(
       lwork ) WORK, integer LWORK, integer INFO)
       SGEQRS

       Purpose:

            Solve the least squares problem
                min || A*X - B ||
            using the QR factorization
                A = Q*R
            computed by SGEQRF.

       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 REAL array, dimension (LDA,N)
                     Details of the QR factorization of the original matrix A as
                     returned by SGEQRF.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= M.

           TAU

                     TAU is REAL array, dimension (N)
                     Details of the orthogonal matrix Q.

           B

                     B is REAL 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 REAL 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 sgerqs (integer M, integer N, integer NRHS, real, dimension( lda, * ) A, integer
       LDA, real, dimension( * ) TAU, real, dimension( ldb, * ) B, integer LDB, real, dimension(
       lwork ) WORK, integer LWORK, integer INFO)
       SGERQS

       Purpose:

            Compute a minimum-norm solution
                min || A*X - B ||
            using the RQ factorization
                A = R*Q
            computed by SGERQF.

       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 REAL array, dimension (LDA,N)
                     Details of the RQ factorization of the original matrix A as
                     returned by SGERQF.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.  LDA >= M.

           TAU

                     TAU is REAL array, dimension (M)
                     Details of the orthogonal matrix Q.

           B

                     B is REAL 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 REAL 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 sget01 (integer M, integer N, real, dimension( lda, * ) A, integer LDA, real,
       dimension( ldafac, * ) AFAC, integer LDAFAC, integer, dimension( * ) IPIV, real,
       dimension( * ) RWORK, real RESID)
       SGET01

       Purpose:

            SGET01 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 REAL 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 REAL 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 SGETRF.
                     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 SGETRF.

           RWORK

                     RWORK is REAL array, dimension (M)

           RESID

                     RESID is REAL
                     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 sget02 (character TRANS, integer M, integer N, integer NRHS, real, dimension( lda,
       * ) A, integer LDA, real, dimension( ldx, * ) X, integer LDX, real, dimension( ldb, * ) B,
       integer LDB, real, dimension( * ) RWORK, real RESID)
       SGET02

       Purpose:

            SGET02 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 REAL 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 REAL 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 REAL 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 REAL array, dimension (M)

           RESID

                     RESID is REAL
                     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 sget03 (integer N, real, dimension( lda, * ) A, integer LDA, real, dimension(
       ldainv, * ) AINV, integer LDAINV, real, dimension( ldwork, * ) WORK, integer LDWORK, real,
       dimension( * ) RWORK, real RCOND, real RESID)
       SGET03

       Purpose:

            SGET03 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 REAL 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 REAL 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 REAL array, dimension (LDWORK,N)

           LDWORK

                     LDWORK is INTEGER
                     The leading dimension of the array WORK.  LDWORK >= max(1,N).

           RWORK

                     RWORK is REAL array, dimension (N)

           RCOND

                     RCOND is REAL
                     The reciprocal of the condition number of A, computed as
                     ( 1/norm(A) ) / norm(AINV).

           RESID

                     RESID is REAL
                     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 sget04 (integer N, integer NRHS, real, dimension( ldx, * ) X, integer LDX, real,
       dimension( ldxact, * ) XACT, integer LDXACT, real RCOND, real RESID)
       SGET04

       Purpose:

            SGET04 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 REAL 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 REAL 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 REAL
                     The reciprocal of the condition number of the coefficient
                     matrix in the system of equations.

           RESID

                     RESID is REAL
                     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

   real function sget06 (real RCOND, real RCONDC)
       SGET06

       Purpose:

            SGET06 computes a test ratio to compare two values for RCOND.

       Parameters:
           RCOND

                     RCOND is REAL
                     The estimate of the reciprocal of the condition number of A,
                     as computed by SGECON.

           RCONDC

                     RCONDC is REAL
                     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 sget07 (character TRANS, integer N, integer NRHS, real, dimension( lda, * ) A,
       integer LDA, real, dimension( ldb, * ) B, integer LDB, real, dimension( ldx, * ) X,
       integer LDX, real, dimension( ldxact, * ) XACT, integer LDXACT, real, dimension( * ) FERR,
       logical CHKFERR, real, dimension( * ) BERR, real, dimension( * ) RESLTS)
       SGET07

       Purpose:

            SGET07 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 sgtt01 (integer N, real, dimension( * ) DL, real, dimension( * ) D, real,
       dimension( * ) DU, real, dimension( * ) DLF, real, dimension( * ) DF, real, dimension( * )
       DUF, real, dimension( * ) DU2, integer, dimension( * ) IPIV, real, dimension( ldwork, * )
       WORK, integer LDWORK, real, dimension( * ) RWORK, real RESID)
       SGTT01

       Purpose:

            SGTT01 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 REAL array, dimension (N-1)
                     The (n-1) sub-diagonal elements of A.

           D

                     D is REAL array, dimension (N)
                     The diagonal elements of A.

           DU

                     DU is REAL array, dimension (N-1)
                     The (n-1) super-diagonal elements of A.

           DLF

                     DLF is REAL array, dimension (N-1)
                     The (n-1) multipliers that define the matrix L from the
                     LU factorization of A.

           DF

                     DF is REAL array, dimension (N)
                     The n diagonal elements of the upper triangular matrix U from
                     the LU factorization of A.

           DUF

                     DUF is REAL array, dimension (N-1)
                     The (n-1) elements of the first super-diagonal of U.

           DU2

                     DU2 is REAL 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 REAL array, dimension (LDWORK,N)

           LDWORK

                     LDWORK is INTEGER
                     The leading dimension of the array WORK.  LDWORK >= max(1,N).

           RWORK

                     RWORK is REAL array, dimension (N)

           RESID

                     RESID is REAL
                     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 sgtt02 (character TRANS, integer N, integer NRHS, real, dimension( * ) DL, real,
       dimension( * ) D, real, dimension( * ) DU, real, dimension( ldx, * ) X, integer LDX, real,
       dimension( ldb, * ) B, integer LDB, real RESID)
       SGTT02

       Purpose:

            SGTT02 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 REAL array, dimension (N-1)
                     The (n-1) sub-diagonal elements of A.

           D

                     D is REAL array, dimension (N)
                     The diagonal elements of A.

           DU

                     DU is REAL array, dimension (N-1)
                     The (n-1) super-diagonal elements of A.

           X

                     X is REAL 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 REAL 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 REAL
                     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 sgtt05 (character TRANS, integer N, integer NRHS, real, dimension( * ) DL, real,
       dimension( * ) D, real, dimension( * ) DU, real, dimension( ldb, * ) B, integer LDB, real,
       dimension( ldx, * ) X, integer LDX, real, dimension( ldxact, * ) XACT, integer LDXACT,
       real, dimension( * ) FERR, real, dimension( * ) BERR, real, dimension( * ) RESLTS)
       SGTT05

       Purpose:

            SGTT05 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 REAL array, dimension (N-1)
                     The (n-1) sub-diagonal elements of A.

           D

                     D is REAL array, dimension (N)
                     The diagonal elements of A.

           DU

                     DU is REAL array, dimension (N-1)
                     The (n-1) super-diagonal elements of A.

           B

                     B is REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 slahilb (integer N, integer NRHS, real, dimension(lda, n) A, integer LDA, real,
       dimension(ldx, nrhs) X, integer LDX, real, dimension(ldb, nrhs) B, integer LDB, real,
       dimension(n) WORK, integer INFO)
       SLAHILB

       Purpose:

            SLAHILB 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 REAL 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 REAL 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 REAL 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 REAL 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 slaord (character JOB, integer N, real, dimension( * ) X, integer INCX)
       SLAORD

       Purpose:

            SLAORD 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 REAL 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 slaptm (integer N, integer NRHS, real ALPHA, real, dimension( * ) D, real,
       dimension( * ) E, real, dimension( ldx, * ) X, integer LDX, real BETA, real, dimension(
       ldb, * ) B, integer LDB)
       SLAPTM

       Purpose:

            SLAPTM 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 REAL
                     The scalar alpha.  ALPHA must be 1. or -1.; otherwise,
                     it is assumed to be 0.

           D

                     D is REAL array, dimension (N)
                     The n diagonal elements of the tridiagonal matrix A.

           E

                     E is REAL array, dimension (N-1)
                     The (n-1) subdiagonal or superdiagonal elements of A.

           X

                     X is REAL 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 REAL
                     The scalar beta.  BETA must be 0., 1., or -1.; otherwise,
                     it is assumed to be 1.

           B

                     B is REAL 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 slarhs (character*3 PATH, character XTYPE, character UPLO, character TRANS, integer
       M, integer N, integer KL, integer KU, integer NRHS, real, dimension( lda, * ) A, integer
       LDA, real, dimension( ldx, * ) X, integer LDX, real, dimension( ldb, * ) B, integer LDB,
       integer, dimension( 4 ) ISEED, integer INFO)
       SLARHS

       Purpose:

            SLARHS 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 REAL 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) REAL 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 REAL 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
                     SLATMS).  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 slatb4 (character*3 PATH, integer IMAT, integer M, integer N, character TYPE,
       integer KL, integer KU, real ANORM, integer MODE, real CNDNUM, character DIST)
       SLATB4

       Purpose:

            SLATB4 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 REAL
                     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 REAL
                     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 slatb5 (character*3 PATH, integer IMAT, integer N, character TYPE, integer KL,
       integer KU, real ANORM, integer MODE, real CNDNUM, character DIST)
       SLATB5

       Purpose:

            SLATB5 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 REAL
                     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 REAL
                     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 slattb (integer IMAT, character UPLO, character TRANS, character DIAG, integer,
       dimension( 4 ) ISEED, integer N, integer KD, real, dimension( ldab, * ) AB, integer LDAB,
       real, dimension( * ) B, real, dimension( * ) WORK, integer INFO)
       SLATTB

       Purpose:

            SLATTB 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
                     SLATMS).  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 REAL 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 REAL array, dimension (N)

           WORK

                     WORK is REAL 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 slattp (integer IMAT, character UPLO, character TRANS, character DIAG, integer,
       dimension( 4 ) ISEED, integer N, real, dimension( * ) A, real, dimension( * ) B, real,
       dimension( * ) WORK, integer INFO)
       SLATTP

       Purpose:

            SLATTP 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
                     SLATMS).  Modified on exit.

           N

                     N is INTEGER
                     The order of the matrix to be generated.

           A

                     A is REAL 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 REAL array, dimension (N)
                     The right hand side vector, if IMAT > 10.

           WORK

                     WORK is REAL 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 slattr (integer IMAT, character UPLO, character TRANS, character DIAG, integer,
       dimension( 4 ) ISEED, integer N, real, dimension( lda, * ) A, integer LDA, real,
       dimension( * ) B, real, dimension( * ) WORK, integer INFO)
       SLATTR

       Purpose:

            SLATTR 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
                     SLATMS).  Modified on exit.

           N

                     N is INTEGER
                     The order of the matrix to be generated.

           A

                     A is REAL 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 REAL array, dimension (N)
                     The right hand side vector, if IMAT > 10.

           WORK

                     WORK is REAL 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 slavsp (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       real, dimension( * ) A, integer, dimension( * ) IPIV, real, dimension( ldb, * ) B, integer
       LDB, integer INFO)
       SLAVSP

       Purpose:

            SLAVSP  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 SSPTRF.

            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 REAL 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 SSPTRF.

           IPIV

                     IPIV is INTEGER array, dimension (N)
                     The pivot indices from SSPTRF.

           B

                     B is REAL 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 slavsy (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       real, dimension( lda, * ) A, integer LDA, integer, dimension( * ) IPIV, real, dimension(
       ldb, * ) B, integer LDB, integer INFO)
       SLAVSY

       Purpose:

            SLAVSY  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 SSYTRF.

            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 REAL array, dimension (LDA,N)
                     The block diagonal matrix D and the multipliers used to
                     obtain the factor U or L as computed by SSYTRF.
                     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 SSYTRF.

                     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 REAL 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 slavsy_rook (character UPLO, character TRANS, character DIAG, integer N, integer
       NRHS, real, dimension( lda, * ) A, integer LDA, integer, dimension( * ) IPIV, real,
       dimension( ldb, * ) B, integer LDB, integer INFO)
       SLAVSY_ROOK

       Purpose:

            SLAVSY_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 SSYTRF_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 REAL array, dimension (LDA,N)
                     The block diagonal matrix D and the multipliers used to
                     obtain the factor U or L as computed by SSYTRF_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 SSYTRF_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 REAL 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 slqt01 (integer M, integer N, real, dimension( lda, * ) A, real, dimension( lda, *
       ) AF, real, dimension( lda, * ) Q, real, dimension( lda, * ) L, integer LDA, real,
       dimension( * ) TAU, real, dimension( lwork ) WORK, integer LWORK, real, dimension( * )
       RWORK, real, dimension( * ) RESULT)
       SLQT01

       Purpose:

            SLQT01 tests SGELQF, which computes the LQ factorization of an m-by-n
            matrix A, and partially tests SORGLQ which forms the n-by-n
            orthogonal matrix Q.

            SLQT01 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 REAL array, dimension (LDA,N)
                     The m-by-n matrix A.

           AF

                     AF is REAL array, dimension (LDA,N)
                     Details of the LQ factorization of A, as returned by SGELQF.
                     See SGELQF for further details.

           Q

                     Q is REAL array, dimension (LDA,N)
                     The n-by-n orthogonal matrix Q.

           L

                     L is REAL 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 REAL array, dimension (min(M,N))
                     The scalar factors of the elementary reflectors, as returned
                     by SGELQF.

           WORK

                     WORK is REAL array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The dimension of the array WORK.

           RWORK

                     RWORK is REAL array, dimension (max(M,N))

           RESULT

                     RESULT is REAL 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 slqt02 (integer M, integer N, integer K, real, dimension( lda, * ) A, real,
       dimension( lda, * ) AF, real, dimension( lda, * ) Q, real, dimension( lda, * ) L, integer
       LDA, real, dimension( * ) TAU, real, dimension( lwork ) WORK, integer LWORK, real,
       dimension( * ) RWORK, real, dimension( * ) RESULT)
       SLQT02

       Purpose:

            SLQT02 tests SORGLQ, 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, SLQT02 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 REAL array, dimension (LDA,N)
                     The m-by-n matrix A which was factorized by SLQT01.

           AF

                     AF is REAL array, dimension (LDA,N)
                     Details of the LQ factorization of A, as returned by SGELQF.
                     See SGELQF for further details.

           Q

                     Q is REAL array, dimension (LDA,N)

           L

                     L is REAL array, dimension (LDA,M)

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays A, AF, Q and L. LDA >= N.

           TAU

                     TAU is REAL array, dimension (M)
                     The scalar factors of the elementary reflectors corresponding
                     to the LQ factorization in AF.

           WORK

                     WORK is REAL array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The dimension of the array WORK.

           RWORK

                     RWORK is REAL array, dimension (M)

           RESULT

                     RESULT is REAL 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 slqt03 (integer M, integer N, integer K, real, dimension( lda, * ) AF, real,
       dimension( lda, * ) C, real, dimension( lda, * ) CC, real, dimension( lda, * ) Q, integer
       LDA, real, dimension( * ) TAU, real, dimension( lwork ) WORK, integer LWORK, real,
       dimension( * ) RWORK, real, dimension( * ) RESULT)
       SLQT03

       Purpose:

            SLQT03 tests SORMLQ, which computes Q*C, Q'*C, C*Q or C*Q'.

            SLQT03 compares the results of a call to SORMLQ with the results of
            forming Q explicitly by a call to SORGLQ and then performing matrix
            multiplication by a call to SGEMM.

       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 REAL array, dimension (LDA,N)
                     Details of the LQ factorization of an m-by-n matrix, as
                     returned by SGELQF. See SGELQF for further details.

           C

                     C is REAL array, dimension (LDA,N)

           CC

                     CC is REAL array, dimension (LDA,N)

           Q

                     Q is REAL array, dimension (LDA,N)

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays AF, C, CC, and Q.

           TAU

                     TAU is REAL array, dimension (min(M,N))
                     The scalar factors of the elementary reflectors corresponding
                     to the LQ factorization in AF.

           WORK

                     WORK is REAL 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 REAL array, dimension (M)

           RESULT

                     RESULT is REAL 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 spbt01 (character UPLO, integer N, integer KD, real, dimension( lda, * ) A, integer
       LDA, real, dimension( ldafac, * ) AFAC, integer LDAFAC, real, dimension( * ) RWORK, real
       RESID)
       SPBT01

       Purpose:

            SPBT01 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 REAL 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 SPBTRF for further details.

           LDA

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

           AFAC

                     AFAC is REAL 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 SPBTRF.

           LDAFAC

                     LDAFAC is INTEGER
                     The leading dimension of the array AFAC.
                     LDAFAC >= max(1,KD+1).

           RWORK

                     RWORK is REAL array, dimension (N)

           RESID

                     RESID is REAL
                     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 spbt02 (character UPLO, integer N, integer KD, integer NRHS, real, dimension( lda,
       * ) A, integer LDA, real, dimension( ldx, * ) X, integer LDX, real, dimension( ldb, * ) B,
       integer LDB, real, dimension( * ) RWORK, real RESID)
       SPBT02

       Purpose:

            SPBT02 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 REAL 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 SPBTRF for further details.

           LDA

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

           X

                     X is REAL 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 REAL 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 REAL array, dimension (N)

           RESID

                     RESID is REAL
                     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 spbt05 (character UPLO, integer N, integer KD, integer NRHS, real, dimension( ldab,
       * ) AB, integer LDAB, real, dimension( ldb, * ) B, integer LDB, real, dimension( ldx, * )
       X, integer LDX, real, dimension( ldxact, * ) XACT, integer LDXACT, real, dimension( * )
       FERR, real, dimension( * ) BERR, real, dimension( * ) RESLTS)
       SPBT05

       Purpose:

            SPBT05 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 spot01 (character UPLO, integer N, real, dimension( lda, * ) A, integer LDA, real,
       dimension( ldafac, * ) AFAC, integer LDAFAC, real, dimension( * ) RWORK, real RESID)
       SPOT01

       Purpose:

            SPOT01 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 REAL 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 REAL 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 REAL array, dimension (N)

           RESID

                     RESID is REAL
                     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 spot02 (character UPLO, integer N, integer NRHS, real, dimension( lda, * ) A,
       integer LDA, real, dimension( ldx, * ) X, integer LDX, real, dimension( ldb, * ) B,
       integer LDB, real, dimension( * ) RWORK, real RESID)
       SPOT02

       Purpose:

            SPOT02 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 REAL 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 REAL 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 REAL 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 REAL array, dimension (N)

           RESID

                     RESID is REAL
                     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 spot03 (character UPLO, integer N, real, dimension( lda, * ) A, integer LDA, real,
       dimension( ldainv, * ) AINV, integer LDAINV, real, dimension( ldwork, * ) WORK, integer
       LDWORK, real, dimension( * ) RWORK, real RCOND, real RESID)
       SPOT03

       Purpose:

            SPOT03 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 REAL 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 REAL 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 REAL array, dimension (LDWORK,N)

           LDWORK

                     LDWORK is INTEGER
                     The leading dimension of the array WORK.  LDWORK >= max(1,N).

           RWORK

                     RWORK is REAL array, dimension (N)

           RCOND

                     RCOND is REAL
                     The reciprocal of the condition number of A, computed as
                     ( 1/norm(A) ) / norm(AINV).

           RESID

                     RESID is REAL
                     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 spot05 (character UPLO, integer N, integer NRHS, real, dimension( lda, * ) A,
       integer LDA, real, dimension( ldb, * ) B, integer LDB, real, dimension( ldx, * ) X,
       integer LDX, real, dimension( ldxact, * ) XACT, integer LDXACT, real, dimension( * ) FERR,
       real, dimension( * ) BERR, real, dimension( * ) RESLTS)
       SPOT05

       Purpose:

            SPOT05 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 sppt01 (character UPLO, integer N, real, dimension( * ) A, real, dimension( * )
       AFAC, real, dimension( * ) RWORK, real RESID)
       SPPT01

       Purpose:

            SPPT01 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 REAL array, dimension (N*(N+1)/2)
                     The original symmetric matrix A, stored as a packed
                     triangular matrix.

           AFAC

                     AFAC is REAL 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 REAL array, dimension (N)

           RESID

                     RESID is REAL
                     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 sppt02 (character UPLO, integer N, integer NRHS, real, dimension( * ) A, real,
       dimension( ldx, * ) X, integer LDX, real, dimension( ldb, * ) B, integer LDB, real,
       dimension( * ) RWORK, real RESID)
       SPPT02

       Purpose:

            SPPT02 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 REAL array, dimension (N*(N+1)/2)
                     The original symmetric matrix A, stored as a packed
                     triangular matrix.

           X

                     X is REAL 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 REAL 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 REAL array, dimension (N)

           RESID

                     RESID is REAL
                     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 sppt03 (character UPLO, integer N, real, dimension( * ) A, real, dimension( * )
       AINV, real, dimension( ldwork, * ) WORK, integer LDWORK, real, dimension( * ) RWORK, real
       RCOND, real RESID)
       SPPT03

       Purpose:

            SPPT03 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 REAL array, dimension (N*(N+1)/2)
                     The original symmetric matrix A, stored as a packed
                     triangular matrix.

           AINV

                     AINV is REAL array, dimension (N*(N+1)/2)
                     The (symmetric) inverse of the matrix A, stored as a packed
                     triangular matrix.

           WORK

                     WORK is REAL array, dimension (LDWORK,N)

           LDWORK

                     LDWORK is INTEGER
                     The leading dimension of the array WORK.  LDWORK >= max(1,N).

           RWORK

                     RWORK is REAL array, dimension (N)

           RCOND

                     RCOND is REAL
                     The reciprocal of the condition number of A, computed as
                     ( 1/norm(A) ) / norm(AINV).

           RESID

                     RESID is REAL
                     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 sppt05 (character UPLO, integer N, integer NRHS, real, dimension( * ) AP, real,
       dimension( ldb, * ) B, integer LDB, real, dimension( ldx, * ) X, integer LDX, real,
       dimension( ldxact, * ) XACT, integer LDXACT, real, dimension( * ) FERR, real, dimension( *
       ) BERR, real, dimension( * ) RESLTS)
       SPPT05

       Purpose:

            SPPT05 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 spst01 (character UPLO, integer N, real, dimension( lda, * ) A, integer LDA, real,
       dimension( ldafac, * ) AFAC, integer LDAFAC, real, dimension( ldperm, * ) PERM, integer
       LDPERM, integer, dimension( * ) PIV, real, dimension( * ) RWORK, real RESID, integer RANK)
       SPST01

       Purpose:

            SPST01 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 REAL 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 REAL 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 REAL 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 REAL array, dimension (N)

           RESID

                     RESID is REAL
                     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 sptt01 (integer N, real, dimension( * ) D, real, dimension( * ) E, real, dimension(
       * ) DF, real, dimension( * ) EF, real, dimension( * ) WORK, real RESID)
       SPTT01

       Purpose:

            SPTT01 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 REAL array, dimension (N)
                     The n diagonal elements of the tridiagonal matrix A.

           E

                     E is REAL array, dimension (N-1)
                     The (n-1) subdiagonal elements of the tridiagonal matrix A.

           DF

                     DF is REAL array, dimension (N)
                     The n diagonal elements of the factor L from the L*D*L'
                     factorization of A.

           EF

                     EF is REAL array, dimension (N-1)
                     The (n-1) subdiagonal elements of the factor L from the
                     L*D*L' factorization of A.

           WORK

                     WORK is REAL array, dimension (2*N)

           RESID

                     RESID is REAL
                     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 sptt02 (integer N, integer NRHS, real, dimension( * ) D, real, dimension( * ) E,
       real, dimension( ldx, * ) X, integer LDX, real, dimension( ldb, * ) B, integer LDB, real
       RESID)
       SPTT02

       Purpose:

            SPTT02 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 REAL array, dimension (N)
                     The n diagonal elements of the tridiagonal matrix A.

           E

                     E is REAL array, dimension (N-1)
                     The (n-1) subdiagonal elements of the tridiagonal matrix A.

           X

                     X is REAL 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 REAL 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 REAL
                     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 sptt05 (integer N, integer NRHS, real, dimension( * ) D, real, dimension( * ) E,
       real, dimension( ldb, * ) B, integer LDB, real, dimension( ldx, * ) X, integer LDX, real,
       dimension( ldxact, * ) XACT, integer LDXACT, real, dimension( * ) FERR, real, dimension( *
       ) BERR, real, dimension( * ) RESLTS)
       SPTT05

       Purpose:

            SPTT05 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 REAL array, dimension (N)
                     The n diagonal elements of the tridiagonal matrix A.

           E

                     E is REAL array, dimension (N-1)
                     The (n-1) subdiagonal elements of the tridiagonal matrix A.

           B

                     B is REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 sqlt01 (integer M, integer N, real, dimension( lda, * ) A, real, dimension( lda, *
       ) AF, real, dimension( lda, * ) Q, real, dimension( lda, * ) L, integer LDA, real,
       dimension( * ) TAU, real, dimension( lwork ) WORK, integer LWORK, real, dimension( * )
       RWORK, real, dimension( * ) RESULT)
       SQLT01

       Purpose:

            SQLT01 tests SGEQLF, which computes the QL factorization of an m-by-n
            matrix A, and partially tests SORGQL which forms the m-by-m
            orthogonal matrix Q.

            SQLT01 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 REAL array, dimension (LDA,N)
                     The m-by-n matrix A.

           AF

                     AF is REAL array, dimension (LDA,N)
                     Details of the QL factorization of A, as returned by SGEQLF.
                     See SGEQLF for further details.

           Q

                     Q is REAL array, dimension (LDA,M)
                     The m-by-m orthogonal matrix Q.

           L

                     L is REAL 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 REAL array, dimension (min(M,N))
                     The scalar factors of the elementary reflectors, as returned
                     by SGEQLF.

           WORK

                     WORK is REAL array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The dimension of the array WORK.

           RWORK

                     RWORK is REAL array, dimension (M)

           RESULT

                     RESULT is REAL 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 sqlt02 (integer M, integer N, integer K, real, dimension( lda, * ) A, real,
       dimension( lda, * ) AF, real, dimension( lda, * ) Q, real, dimension( lda, * ) L, integer
       LDA, real, dimension( * ) TAU, real, dimension( lwork ) WORK, integer LWORK, real,
       dimension( * ) RWORK, real, dimension( * ) RESULT)
       SQLT02

       Purpose:

            SQLT02 tests SORGQL, 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, SQLT02 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 REAL array, dimension (LDA,N)
                     The m-by-n matrix A which was factorized by SQLT01.

           AF

                     AF is REAL array, dimension (LDA,N)
                     Details of the QL factorization of A, as returned by SGEQLF.
                     See SGEQLF for further details.

           Q

                     Q is REAL array, dimension (LDA,N)

           L

                     L is REAL array, dimension (LDA,N)

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays A, AF, Q and L. LDA >= M.

           TAU

                     TAU is REAL array, dimension (N)
                     The scalar factors of the elementary reflectors corresponding
                     to the QL factorization in AF.

           WORK

                     WORK is REAL array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The dimension of the array WORK.

           RWORK

                     RWORK is REAL array, dimension (M)

           RESULT

                     RESULT is REAL 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 sqlt03 (integer M, integer N, integer K, real, dimension( lda, * ) AF, real,
       dimension( lda, * ) C, real, dimension( lda, * ) CC, real, dimension( lda, * ) Q, integer
       LDA, real, dimension( * ) TAU, real, dimension( lwork ) WORK, integer LWORK, real,
       dimension( * ) RWORK, real, dimension( * ) RESULT)
       SQLT03

       Purpose:

            SQLT03 tests SORMQL, which computes Q*C, Q'*C, C*Q or C*Q'.

            SQLT03 compares the results of a call to SORMQL with the results of
            forming Q explicitly by a call to SORGQL and then performing matrix
            multiplication by a call to SGEMM.

       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 REAL array, dimension (LDA,N)
                     Details of the QL factorization of an m-by-n matrix, as
                     returned by SGEQLF. See SGEQLF for further details.

           C

                     C is REAL array, dimension (LDA,N)

           CC

                     CC is REAL array, dimension (LDA,N)

           Q

                     Q is REAL array, dimension (LDA,M)

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays AF, C, CC, and Q.

           TAU

                     TAU is REAL array, dimension (min(M,N))
                     The scalar factors of the elementary reflectors corresponding
                     to the QL factorization in AF.

           WORK

                     WORK is REAL 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 REAL array, dimension (M)

           RESULT

                     RESULT is REAL 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

   real function sqpt01 (integer M, integer N, integer K, real, dimension( lda, * ) A, real,
       dimension( lda, * ) AF, integer LDA, real, dimension( * ) TAU, integer, dimension( * )
       JPVT, real, dimension( lwork ) WORK, integer LWORK)
       SQPT01

       Purpose:

            SQPT01 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 REAL array, dimension (LDA, N)
                     The original matrix A.

           AF

                     AF is REAL array, dimension (LDA,N)
                     The (possibly partial) output of SGEQPF.  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 REAL array, dimension (K)
                     Details of the Householder transformations as returned by
                     SGEQPF.

           JPVT

                     JPVT is INTEGER array, dimension (N)
                     Pivot information as returned by SGEQPF.

           WORK

                     WORK is REAL 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 sqrt01 (integer M, integer N, real, dimension( lda, * ) A, real, dimension( lda, *
       ) AF, real, dimension( lda, * ) Q, real, dimension( lda, * ) R, integer LDA, real,
       dimension( * ) TAU, real, dimension( lwork ) WORK, integer LWORK, real, dimension( * )
       RWORK, real, dimension( * ) RESULT)
       SQRT01

       Purpose:

            SQRT01 tests SGEQRF, which computes the QR factorization of an m-by-n
            matrix A, and partially tests SORGQR which forms the m-by-m
            orthogonal matrix Q.

            SQRT01 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 REAL array, dimension (LDA,N)
                     The m-by-n matrix A.

           AF

                     AF is REAL array, dimension (LDA,N)
                     Details of the QR factorization of A, as returned by SGEQRF.
                     See SGEQRF for further details.

           Q

                     Q is REAL array, dimension (LDA,M)
                     The m-by-m orthogonal matrix Q.

           R

                     R is REAL 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 REAL array, dimension (min(M,N))
                     The scalar factors of the elementary reflectors, as returned
                     by SGEQRF.

           WORK

                     WORK is REAL array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The dimension of the array WORK.

           RWORK

                     RWORK is REAL array, dimension (M)

           RESULT

                     RESULT is REAL 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 sqrt01p (integer M, integer N, real, dimension( lda, * ) A, real, dimension( lda, *
       ) AF, real, dimension( lda, * ) Q, real, dimension( lda, * ) R, integer LDA, real,
       dimension( * ) TAU, real, dimension( lwork ) WORK, integer LWORK, real, dimension( * )
       RWORK, real, dimension( * ) RESULT)
       SQRT01P

       Purpose:

            SQRT01P tests SGEQRFP, which computes the QR factorization of an m-by-n
            matrix A, and partially tests SORGQR which forms the m-by-m
            orthogonal matrix Q.

            SQRT01P 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 REAL array, dimension (LDA,N)
                     The m-by-n matrix A.

           AF

                     AF is REAL array, dimension (LDA,N)
                     Details of the QR factorization of A, as returned by SGEQRFP.
                     See SGEQRFP for further details.

           Q

                     Q is REAL array, dimension (LDA,M)
                     The m-by-m orthogonal matrix Q.

           R

                     R is REAL 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 REAL array, dimension (min(M,N))
                     The scalar factors of the elementary reflectors, as returned
                     by SGEQRFP.

           WORK

                     WORK is REAL array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The dimension of the array WORK.

           RWORK

                     RWORK is REAL array, dimension (M)

           RESULT

                     RESULT is REAL 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 sqrt02 (integer M, integer N, integer K, real, dimension( lda, * ) A, real,
       dimension( lda, * ) AF, real, dimension( lda, * ) Q, real, dimension( lda, * ) R, integer
       LDA, real, dimension( * ) TAU, real, dimension( lwork ) WORK, integer LWORK, real,
       dimension( * ) RWORK, real, dimension( * ) RESULT)
       SQRT02

       Purpose:

            SQRT02 tests SORGQR, 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, SQRT02 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 REAL array, dimension (LDA,N)
                     The m-by-n matrix A which was factorized by SQRT01.

           AF

                     AF is REAL array, dimension (LDA,N)
                     Details of the QR factorization of A, as returned by SGEQRF.
                     See SGEQRF for further details.

           Q

                     Q is REAL array, dimension (LDA,N)

           R

                     R is REAL array, dimension (LDA,N)

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays A, AF, Q and R. LDA >= M.

           TAU

                     TAU is REAL array, dimension (N)
                     The scalar factors of the elementary reflectors corresponding
                     to the QR factorization in AF.

           WORK

                     WORK is REAL array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The dimension of the array WORK.

           RWORK

                     RWORK is REAL array, dimension (M)

           RESULT

                     RESULT is REAL 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 sqrt03 (integer M, integer N, integer K, real, dimension( lda, * ) AF, real,
       dimension( lda, * ) C, real, dimension( lda, * ) CC, real, dimension( lda, * ) Q, integer
       LDA, real, dimension( * ) TAU, real, dimension( lwork ) WORK, integer LWORK, real,
       dimension( * ) RWORK, real, dimension( * ) RESULT)
       SQRT03

       Purpose:

            SQRT03 tests SORMQR, which computes Q*C, Q'*C, C*Q or C*Q'.

            SQRT03 compares the results of a call to SORMQR with the results of
            forming Q explicitly by a call to SORGQR and then performing matrix
            multiplication by a call to SGEMM.

       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 REAL array, dimension (LDA,N)
                     Details of the QR factorization of an m-by-n matrix, as
                     returned by SGEQRF. See SGEQRF for further details.

           C

                     C is REAL array, dimension (LDA,N)

           CC

                     CC is REAL array, dimension (LDA,N)

           Q

                     Q is REAL array, dimension (LDA,M)

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays AF, C, CC, and Q.

           TAU

                     TAU is REAL array, dimension (min(M,N))
                     The scalar factors of the elementary reflectors corresponding
                     to the QR factorization in AF.

           WORK

                     WORK is REAL 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 REAL array, dimension (M)

           RESULT

                     RESULT is REAL 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 sqrt04 (integer M, integer N, integer NB, real, dimension(6) RESULT)
       SQRT04

       Purpose:

            SQRT04 tests SGEQRT and SGEMQRT.

       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 REAL 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 sqrt05 (integer M, integer N, integer L, integer NB, real, dimension(6) RESULT)
       SQRT05

       Purpose:

            SQRT05 tests STPQRT and STPMQRT.

       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 REAL 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

   real function sqrt11 (integer M, integer K, real, dimension( lda, * ) A, integer LDA, real,
       dimension( * ) TAU, real, dimension( lwork ) WORK, integer LWORK)
       SQRT11

       Purpose:

            SQRT11 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 REAL 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 REAL array, dimension (K)
                     The scaling factors tau for the elementary transformations as
                     computed by the QR factorization routine.

           WORK

                     WORK is REAL 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

   real function sqrt12 (integer M, integer N, real, dimension( lda, * ) A, integer LDA, real,
       dimension( * ) S, real, dimension( lwork ) WORK, integer LWORK)
       SQRT12

       Purpose:

            SQRT12 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 REAL 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 REAL array, dimension (min(M,N))
                     The singular values of the matrix A.

           WORK

                     WORK is REAL 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 sqrt13 (integer SCALE, integer M, integer N, real, dimension( lda, * ) A, integer
       LDA, real NORMA, integer, dimension( 4 ) ISEED)
       SQRT13

       Purpose:

            SQRT13 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 REAL array, dimension (LDA,N)
                     The M-by-N matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.

           NORMA

                     NORMA is REAL
                     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

   real function sqrt14 (character TRANS, integer M, integer N, integer NRHS, real, dimension(
       lda, * ) A, integer LDA, real, dimension( ldx, * ) X, integer LDX, real, dimension( lwork
       ) WORK, integer LWORK)
       SQRT14

       Purpose:

            SQRT14 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 REAL array, dimension (LDA,N)
                     The M-by-N matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.

           X

                     X is REAL 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 REAL 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 sqrt15 (integer SCALE, integer RKSEL, integer M, integer N, integer NRHS, real,
       dimension( lda, * ) A, integer LDA, real, dimension( ldb, * ) B, integer LDB, real,
       dimension( * ) S, integer RANK, real NORMA, real NORMB, integer, dimension( 4 ) ISEED,
       real, dimension( lwork ) WORK, integer LWORK)
       SQRT15

       Purpose:

            SQRT15 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 REAL array, dimension (LDA,N)
                     The M-by-N matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.

           B

                     B is REAL 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 REAL array, dimension MIN(M,N)
                     Singular values of A.

           RANK

                     RANK is INTEGER
                     number of nonzero singular values of A.

           NORMA

                     NORMA is REAL
                     one-norm of A.

           NORMB

                     NORMB is REAL
                     one-norm of B.

           ISEED

                     ISEED is integer array, dimension (4)
                     seed for random number generator.

           WORK

                     WORK is REAL 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 sqrt16 (character TRANS, integer M, integer N, integer NRHS, real, dimension( lda,
       * ) A, integer LDA, real, dimension( ldx, * ) X, integer LDX, real, dimension( ldb, * ) B,
       integer LDB, real, dimension( * ) RWORK, real RESID)
       SQRT16

       Purpose:

            SQRT16 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 REAL 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 REAL 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 REAL 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 REAL array, dimension (M)

           RESID

                     RESID is REAL
                     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

   real function sqrt17 (character TRANS, integer IRESID, integer M, integer N, integer NRHS,
       real, dimension( lda, * ) A, integer LDA, real, dimension( ldx, * ) X, integer LDX, real,
       dimension( ldb, * ) B, integer LDB, real, dimension( ldb, * ) C, real, dimension( lwork )
       WORK, integer LWORK)
       SQRT17

       Purpose:

            SQRT17 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 REAL 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 REAL 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 REAL 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 REAL array, dimension (LDB,NRHS)

           WORK

                     WORK is REAL 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 srqt01 (integer M, integer N, real, dimension( lda, * ) A, real, dimension( lda, *
       ) AF, real, dimension( lda, * ) Q, real, dimension( lda, * ) R, integer LDA, real,
       dimension( * ) TAU, real, dimension( lwork ) WORK, integer LWORK, real, dimension( * )
       RWORK, real, dimension( * ) RESULT)
       SRQT01

       Purpose:

            SRQT01 tests SGERQF, which computes the RQ factorization of an m-by-n
            matrix A, and partially tests SORGRQ which forms the n-by-n
            orthogonal matrix Q.

            SRQT01 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 REAL array, dimension (LDA,N)
                     The m-by-n matrix A.

           AF

                     AF is REAL array, dimension (LDA,N)
                     Details of the RQ factorization of A, as returned by SGERQF.
                     See SGERQF for further details.

           Q

                     Q is REAL array, dimension (LDA,N)
                     The n-by-n orthogonal matrix Q.

           R

                     R is REAL 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 REAL array, dimension (min(M,N))
                     The scalar factors of the elementary reflectors, as returned
                     by SGERQF.

           WORK

                     WORK is REAL array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The dimension of the array WORK.

           RWORK

                     RWORK is REAL array, dimension (max(M,N))

           RESULT

                     RESULT is REAL 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 srqt02 (integer M, integer N, integer K, real, dimension( lda, * ) A, real,
       dimension( lda, * ) AF, real, dimension( lda, * ) Q, real, dimension( lda, * ) R, integer
       LDA, real, dimension( * ) TAU, real, dimension( lwork ) WORK, integer LWORK, real,
       dimension( * ) RWORK, real, dimension( * ) RESULT)
       SRQT02

       Purpose:

            SRQT02 tests SORGRQ, 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, SRQT02 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 REAL array, dimension (LDA,N)
                     The m-by-n matrix A which was factorized by SRQT01.

           AF

                     AF is REAL array, dimension (LDA,N)
                     Details of the RQ factorization of A, as returned by SGERQF.
                     See SGERQF for further details.

           Q

                     Q is REAL array, dimension (LDA,N)

           R

                     R is REAL array, dimension (LDA,M)

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays A, AF, Q and L. LDA >= N.

           TAU

                     TAU is REAL array, dimension (M)
                     The scalar factors of the elementary reflectors corresponding
                     to the RQ factorization in AF.

           WORK

                     WORK is REAL array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The dimension of the array WORK.

           RWORK

                     RWORK is REAL array, dimension (M)

           RESULT

                     RESULT is REAL 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 srqt03 (integer M, integer N, integer K, real, dimension( lda, * ) AF, real,
       dimension( lda, * ) C, real, dimension( lda, * ) CC, real, dimension( lda, * ) Q, integer
       LDA, real, dimension( * ) TAU, real, dimension( lwork ) WORK, integer LWORK, real,
       dimension( * ) RWORK, real, dimension( * ) RESULT)
       SRQT03

       Purpose:

            SRQT03 tests SORMRQ, which computes Q*C, Q'*C, C*Q or C*Q'.

            SRQT03 compares the results of a call to SORMRQ with the results of
            forming Q explicitly by a call to SORGRQ and then performing matrix
            multiplication by a call to SGEMM.

       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 REAL array, dimension (LDA,N)
                     Details of the RQ factorization of an m-by-n matrix, as
                     returned by SGERQF. See SGERQF for further details.

           C

                     C is REAL array, dimension (LDA,N)

           CC

                     CC is REAL array, dimension (LDA,N)

           Q

                     Q is REAL array, dimension (LDA,N)

           LDA

                     LDA is INTEGER
                     The leading dimension of the arrays AF, C, CC, and Q.

           TAU

                     TAU is REAL array, dimension (min(M,N))
                     The scalar factors of the elementary reflectors corresponding
                     to the RQ factorization in AF.

           WORK

                     WORK is REAL 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 REAL array, dimension (M)

           RESULT

                     RESULT is REAL 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

   real function srzt01 (integer M, integer N, real, dimension( lda, * ) A, real, dimension( lda,
       * ) AF, integer LDA, real, dimension( * ) TAU, real, dimension( lwork ) WORK, integer
       LWORK)
       SRZT01

       Purpose:

            SRZT01 returns
                 || A - R*Q || / ( M * eps * ||A|| )
            for an upper trapezoidal A that was factored with STZRZF.

       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 REAL array, dimension (LDA,N)
                     The original upper trapezoidal M by N matrix A.

           AF

                     AF is REAL array, dimension (LDA,N)
                     The output of STZRZF 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 REAL array, dimension (M)
                     Details of the Householder transformations as returned by
                     STZRZF.

           WORK

                     WORK is REAL 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

   real function srzt02 (integer M, integer N, real, dimension( lda, * ) AF, integer LDA, real,
       dimension( * ) TAU, real, dimension( lwork ) WORK, integer LWORK)
       SRZT02

       Purpose:

            SRZT02 returns
                 || I - Q'*Q || / ( M * eps)
            where the matrix Q is defined by the Householder transformations
            generated by STZRZF.

       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 REAL array, dimension (LDA,N)
                     The output of STZRZF.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array AF.

           TAU

                     TAU is REAL array, dimension (M)
                     Details of the Householder transformations as returned by
                     STZRZF.

           WORK

                     WORK is REAL 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 sspt01 (character UPLO, integer N, real, dimension( * ) A, real, dimension( * )
       AFAC, integer, dimension( * ) IPIV, real, dimension( ldc, * ) C, integer LDC, real,
       dimension( * ) RWORK, real RESID)
       SSPT01

       Purpose:

            SSPT01 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 REAL array, dimension (N*(N+1)/2)
                     The original symmetric matrix A, stored as a packed
                     triangular matrix.

           AFAC

                     AFAC is REAL 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 SSPTRF.

           IPIV

                     IPIV is INTEGER array, dimension (N)
                     The pivot indices from SSPTRF.

           C

                     C is REAL array, dimension (LDC,N)

           LDC

                     LDC is INTEGER
                     The leading dimension of the array C.  LDC >= max(1,N).

           RWORK

                     RWORK is REAL array, dimension (N)

           RESID

                     RESID is REAL
                     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 ssyt01 (character UPLO, integer N, real, dimension( lda, * ) A, integer LDA, real,
       dimension( ldafac, * ) AFAC, integer LDAFAC, integer, dimension( * ) IPIV, real,
       dimension( ldc, * ) C, integer LDC, real, dimension( * ) RWORK, real RESID)
       SSYT01

       Purpose:

            SSYT01 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 REAL 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 REAL 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 SSYTRF.

           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 SSYTRF.

           C

                     C is REAL array, dimension (LDC,N)

           LDC

                     LDC is INTEGER
                     The leading dimension of the array C.  LDC >= max(1,N).

           RWORK

                     RWORK is REAL array, dimension (N)

           RESID

                     RESID is REAL
                     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 ssyt01_rook (character UPLO, integer N, real, dimension( lda, * ) A, integer LDA,
       real, dimension( ldafac, * ) AFAC, integer LDAFAC, integer, dimension( * ) IPIV, real,
       dimension( ldc, * ) C, integer LDC, real, dimension( * ) RWORK, real RESID)
       SSYT01_ROOK

       Purpose:

            SSYT01_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 REAL 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 REAL 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 SSYTRF_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 SSYTRF_ROOK.

           C

                     C is REAL array, dimension (LDC,N)

           LDC

                     LDC is INTEGER
                     The leading dimension of the array C.  LDC >= max(1,N).

           RWORK

                     RWORK is REAL array, dimension (N)

           RESID

                     RESID is REAL
                     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 stbt02 (character UPLO, character TRANS, character DIAG, integer N, integer KD,
       integer NRHS, real, dimension( ldab, * ) AB, integer LDAB, real, dimension( ldx, * ) X,
       integer LDX, real, dimension( ldb, * ) B, integer LDB, real, dimension( * ) WORK, real
       RESID)
       STBT02

       Purpose:

            STBT02 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 REAL 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 REAL 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 REAL 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 REAL array, dimension (N)

           RESID

                     RESID is REAL
                     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 stbt03 (character UPLO, character TRANS, character DIAG, integer N, integer KD,
       integer NRHS, real, dimension( ldab, * ) AB, integer LDAB, real SCALE, real, dimension( *
       ) CNORM, real TSCAL, real, dimension( ldx, * ) X, integer LDX, real, dimension( ldb, * )
       B, integer LDB, real, dimension( * ) WORK, real RESID)
       STBT03

       Purpose:

            STBT03 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 REAL 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 REAL
                     The scaling factor s used in solving the triangular system.

           CNORM

                     CNORM is REAL array, dimension (N)
                     The 1-norms of the columns of A, not counting the diagonal.

           TSCAL

                     TSCAL is REAL
                     The scaling factor used in computing the 1-norms in CNORM.
                     CNORM actually contains the column norms of TSCAL*A.

           X

                     X is REAL 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 REAL 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 REAL array, dimension (N)

           RESID

                     RESID is REAL
                     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 stbt05 (character UPLO, character TRANS, character DIAG, integer N, integer KD,
       integer NRHS, real, dimension( ldab, * ) AB, integer LDAB, real, dimension( ldb, * ) B,
       integer LDB, real, dimension( ldx, * ) X, integer LDX, real, dimension( ldxact, * ) XACT,
       integer LDXACT, real, dimension( * ) FERR, real, dimension( * ) BERR, real, dimension( * )
       RESLTS)
       STBT05

       Purpose:

            STBT05 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 stbt06 (real RCOND, real RCONDC, character UPLO, character DIAG, integer N, integer
       KD, real, dimension( ldab, * ) AB, integer LDAB, real, dimension( * ) WORK, real RAT)
       STBT06

       Purpose:

            STBT06 computes a test ratio comparing RCOND (the reciprocal
            condition number of a triangular matrix A) and RCONDC, the estimate
            computed by STBCON.  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 REAL
                     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 REAL
                     The estimate of the reciprocal condition number computed by
                     STBCON.

           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 REAL 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 REAL array, dimension (N)

           RAT

                     RAT is REAL
                     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 stpt01 (character UPLO, character DIAG, integer N, real, dimension( * ) AP, real,
       dimension( * ) AINVP, real RCOND, real, dimension( * ) WORK, real RESID)
       STPT01

       Purpose:

            STPT01 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 REAL 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 REAL 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 REAL
                     The reciprocal condition number of A, computed as
                     1/(norm(A) * norm(AINV)).

           WORK

                     WORK is REAL array, dimension (N)

           RESID

                     RESID is REAL
                     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 stpt02 (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       real, dimension( * ) AP, real, dimension( ldx, * ) X, integer LDX, real, dimension( ldb, *
       ) B, integer LDB, real, dimension( * ) WORK, real RESID)
       STPT02

       Purpose:

            STPT02 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 REAL 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 REAL 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 REAL 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 REAL array, dimension (N)

           RESID

                     RESID is REAL
                     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 stpt03 (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       real, dimension( * ) AP, real SCALE, real, dimension( * ) CNORM, real TSCAL, real,
       dimension( ldx, * ) X, integer LDX, real, dimension( ldb, * ) B, integer LDB, real,
       dimension( * ) WORK, real RESID)
       STPT03

       Purpose:

            STPT03 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 REAL 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 REAL
                     The scaling factor s used in solving the triangular system.

           CNORM

                     CNORM is REAL array, dimension (N)
                     The 1-norms of the columns of A, not counting the diagonal.

           TSCAL

                     TSCAL is REAL
                     The scaling factor used in computing the 1-norms in CNORM.
                     CNORM actually contains the column norms of TSCAL*A.

           X

                     X is REAL 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 REAL 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 REAL array, dimension (N)

           RESID

                     RESID is REAL
                     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 stpt05 (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       real, dimension( * ) AP, real, dimension( ldb, * ) B, integer LDB, real, dimension( ldx, *
       ) X, integer LDX, real, dimension( ldxact, * ) XACT, integer LDXACT, real, dimension( * )
       FERR, real, dimension( * ) BERR, real, dimension( * ) RESLTS)
       STPT05

       Purpose:

            STPT05 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 stpt06 (real RCOND, real RCONDC, character UPLO, character DIAG, integer N, real,
       dimension( * ) AP, real, dimension( * ) WORK, real RAT)
       STPT06

       Purpose:

            STPT06 computes a test ratio comparing RCOND (the reciprocal
            condition number of a triangular matrix A) and RCONDC, the estimate
            computed by STPCON.  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 REAL
                     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 REAL
                     The estimate of the reciprocal condition number computed by
                     STPCON.

           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 REAL 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 REAL array, dimension (N)

           RAT

                     RAT is REAL
                     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 strt01 (character UPLO, character DIAG, integer N, real, dimension( lda, * ) A,
       integer LDA, real, dimension( ldainv, * ) AINV, integer LDAINV, real RCOND, real,
       dimension( * ) WORK, real RESID)
       STRT01

       Purpose:

            STRT01 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 REAL 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 REAL 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 REAL
                     The reciprocal condition number of A, computed as
                     1/(norm(A) * norm(AINV)).

           WORK

                     WORK is REAL array, dimension (N)

           RESID

                     RESID is REAL
                     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 strt02 (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       real, dimension( lda, * ) A, integer LDA, real, dimension( ldx, * ) X, integer LDX, real,
       dimension( ldb, * ) B, integer LDB, real, dimension( * ) WORK, real RESID)
       STRT02

       Purpose:

            STRT02 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 REAL 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 REAL 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 REAL 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 REAL array, dimension (N)

           RESID

                     RESID is REAL
                     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 strt03 (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       real, dimension( lda, * ) A, integer LDA, real SCALE, real, dimension( * ) CNORM, real
       TSCAL, real, dimension( ldx, * ) X, integer LDX, real, dimension( ldb, * ) B, integer LDB,
       real, dimension( * ) WORK, real RESID)
       STRT03

       Purpose:

            STRT03 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 REAL 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 REAL
                     The scaling factor s used in solving the triangular system.

           CNORM

                     CNORM is REAL array, dimension (N)
                     The 1-norms of the columns of A, not counting the diagonal.

           TSCAL

                     TSCAL is REAL
                     The scaling factor used in computing the 1-norms in CNORM.
                     CNORM actually contains the column norms of TSCAL*A.

           X

                     X is REAL 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 REAL 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 REAL array, dimension (N)

           RESID

                     RESID is REAL
                     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 strt05 (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       real, dimension( lda, * ) A, integer LDA, real, dimension( ldb, * ) B, integer LDB, real,
       dimension( ldx, * ) X, integer LDX, real, dimension( ldxact, * ) XACT, integer LDXACT,
       real, dimension( * ) FERR, real, dimension( * ) BERR, real, dimension( * ) RESLTS)
       STRT05

       Purpose:

            STRT05 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 strt06 (real RCOND, real RCONDC, character UPLO, character DIAG, integer N, real,
       dimension( lda, * ) A, integer LDA, real, dimension( * ) WORK, real RAT)
       STRT06

       Purpose:

            STRT06 computes a test ratio comparing RCOND (the reciprocal
            condition number of a triangular matrix A) and RCONDC, the estimate
            computed by STRCON.  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 REAL
                     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 REAL
                     The estimate of the reciprocal condition number computed by
                     STRCON.

           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 REAL 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 REAL array, dimension (N)

           RAT

                     RAT is REAL
                     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

Author

       Generated automatically by Doxygen for LAPACK from the source code.