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

NAME

       complex_lin - complex

   Functions
       program cchkaa
           CCHKAA
       subroutine cchkeq (THRESH, NOUT)
           CCHKEQ
       subroutine cchkgb (DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, A,
           LA, AFAC, LAFAC, B, X, XACT, WORK, RWORK, IWORK, NOUT)
           CCHKGB
       subroutine cchkge (DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR,
           NMAX, A, AFAC, AINV, B, X, XACT, WORK, RWORK, IWORK, NOUT)
           CCHKGE
       subroutine cchkgt (DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, A, AF, B, X, XACT, WORK,
           RWORK, IWORK, NOUT)
           CCHKGT
       subroutine cchkhe (DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A,
           AFAC, AINV, B, X, XACT, WORK, RWORK, IWORK, NOUT)
           CCHKHE
       subroutine cchkhe_rook (DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A,
           AFAC, AINV, B, X, XACT, WORK, RWORK, IWORK, NOUT)
           CCHKHE_ROOK
       subroutine cchkhp (DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A, AFAC, AINV, B,
           X, XACT, WORK, RWORK, IWORK, NOUT)
           CCHKHP
       subroutine cchklq (DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, NRHS, THRESH, TSTERR,
           NMAX, A, AF, AQ, AL, AC, B, X, XACT, TAU, WORK, RWORK, NOUT)
           CCHKLQ
       subroutine cchkpb (DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A,
           AFAC, AINV, B, X, XACT, WORK, RWORK, NOUT)
           CCHKPB
       subroutine cchkpo (DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A,
           AFAC, AINV, B, X, XACT, WORK, RWORK, NOUT)
           CCHKPO
       subroutine cchkpp (DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A, AFAC, AINV, B,
           X, XACT, WORK, RWORK, NOUT)
           CCHKPP
       subroutine cchkps (DOTYPE, NN, NVAL, NNB, NBVAL, NRANK, RANKVAL, THRESH, TSTERR, NMAX, A,
           AFAC, PERM, PIV, WORK, RWORK, NOUT)
           CCHKPS
       subroutine cchkpt (DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, A, D, E, B, X, XACT,
           WORK, RWORK, NOUT)
           CCHKPT
       subroutine cchkq3 (DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, THRESH, A, COPYA, S,
           TAU, WORK, RWORK, IWORK, NOUT)
           CCHKQ3
       subroutine cchkql (DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, NRHS, THRESH, TSTERR,
           NMAX, A, AF, AQ, AL, AC, B, X, XACT, TAU, WORK, RWORK, NOUT)
           CCHKQL
       subroutine cchkqr (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)
           CCHKQR
       subroutine cchkqrt (THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB, NBVAL, NOUT)
           CCHKQRT
       subroutine cchkqrtp (THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB, NBVAL, NOUT)
           CCHKQRTP
       program cchkrfp
           CCHKRFP
       subroutine cchkrq (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)
           CCHKRQ
       subroutine cchksp (DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A, AFAC, AINV, B,
           X, XACT, WORK, RWORK, IWORK, NOUT)
           CCHKSP
       subroutine cchksy (DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A,
           AFAC, AINV, B, X, XACT, WORK, RWORK, IWORK, NOUT)
           CCHKSY
       subroutine cchksy_rook (DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A,
           AFAC, AINV, B, X, XACT, WORK, RWORK, IWORK, NOUT)
           CCHKSY_ROOK
       subroutine cchktb (DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, AB, AINV, B, X,
           XACT, WORK, RWORK, NOUT)
           CCHKTB
       subroutine cchktp (DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, AP, AINVP, B, X,
           XACT, WORK, RWORK, NOUT)
           CCHKTP
       subroutine cchktr (DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A,
           AINV, B, X, XACT, WORK, RWORK, NOUT)
           CCHKTR
       subroutine cchktz (DOTYPE, NM, MVAL, NN, NVAL, THRESH, TSTERR, A, COPYA, S, TAU, WORK,
           RWORK, NOUT)
           CCHKTZ
       subroutine cdrvgb (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, A, LA, AFB, LAFB, ASAV, B,
           BSAV, X, XACT, S, WORK, RWORK, IWORK, NOUT)
           CDRVGB
       subroutine cdrvge (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, ASAV, B, BSAV,
           X, XACT, S, WORK, RWORK, IWORK, NOUT)
           CDRVGE
       subroutine cdrvgt (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, A, AF, B, X, XACT, WORK, RWORK,
           IWORK, NOUT)
           CDRVGT
       subroutine cdrvhe (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, AINV, B, X,
           XACT, WORK, RWORK, IWORK, NOUT)
           CDRVHE
       subroutine cdrvhe_rook (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, AINV, B, X,
           XACT, WORK, RWORK, IWORK, NOUT)
           CDRVHE_ROOK
       subroutine cdrvhp (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, AINV, B, X,
           XACT, WORK, RWORK, IWORK, NOUT)
           CDRVHP
       subroutine cdrvls (DOTYPE, NM, MVAL, NN, NVAL, NNS, NSVAL, NNB, NBVAL, NXVAL, THRESH,
           TSTERR, A, COPYA, B, COPYB, C, S, COPYS, WORK, RWORK, IWORK, NOUT)
           CDRVLS
       subroutine cdrvpb (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, ASAV, B, BSAV,
           X, XACT, S, WORK, RWORK, NOUT)
           CDRVPB
       subroutine cdrvpo (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, ASAV, B, BSAV,
           X, XACT, S, WORK, RWORK, NOUT)
           CDRVPO
       subroutine cdrvpp (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, ASAV, B, BSAV,
           X, XACT, S, WORK, RWORK, NOUT)
           CDRVPP
       subroutine cdrvpt (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, A, D, E, B, X, XACT, WORK,
           RWORK, NOUT)
           CDRVPT
       subroutine cdrvrf1 (NOUT, NN, NVAL, THRESH, A, LDA, ARF, WORK)
           CDRVRF1
       subroutine cdrvrf2 (NOUT, NN, NVAL, A, LDA, ARF, AP, ASAV)
           CDRVRF2
       subroutine cdrvrf3 (NOUT, NN, NVAL, THRESH, A, LDA, ARF, B1, B2, S_WORK_CLANGE,
           C_WORK_CGEQRF, TAU)
           CDRVRF3
       subroutine cdrvrf4 (NOUT, NN, NVAL, THRESH, C1, C2, LDC, CRF, A, LDA, S_WORK_CLANGE)
           CDRVRF4
       subroutine cdrvrfp (NOUT, NN, NVAL, NNS, NSVAL, NNT, NTVAL, THRESH, A, ASAV, AFAC, AINV,
           B, BSAV, XACT, X, ARF, ARFINV, C_WORK_CLATMS, C_WORK_CPOT02, C_WORK_CPOT03,
           S_WORK_CLATMS, S_WORK_CLANHE, S_WORK_CPOT01, S_WORK_CPOT02, S_WORK_CPOT03)
           CDRVRFP
       subroutine cdrvsp (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, AINV, B, X,
           XACT, WORK, RWORK, IWORK, NOUT)
           CDRVSP
       subroutine cdrvsy (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, AINV, B, X,
           XACT, WORK, RWORK, IWORK, NOUT)
           CDRVSY
       subroutine cdrvsy_rook (DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX, A, AFAC, AINV, B, X,
           XACT, WORK, RWORK, IWORK, NOUT)
           CDRVSY_ROOK
       subroutine cebchvxx (THRESH, PATH)
           CEBCHVXX
       subroutine cerrge (PATH, NUNIT)
           CERRGE
       subroutine cerrgt (PATH, NUNIT)
           CERRGT
       subroutine cerrhe (PATH, NUNIT)
           CERRHE
       subroutine cerrlq (PATH, NUNIT)
           CERRLQ
       subroutine cerrls (PATH, NUNIT)
           CERRLS
       subroutine cerrpo (PATH, NUNIT)
           CERRPO
       subroutine cerrps (PATH, NUNIT)
           CERRPS
       subroutine cerrql (PATH, NUNIT)
           CERRQL
       subroutine cerrqp (PATH, NUNIT)
           CERRQP
       subroutine cerrqr (PATH, NUNIT)
           CERRQR
       subroutine cerrqrt (PATH, NUNIT)
           CERRQRT
       subroutine cerrqrtp (PATH, NUNIT)
           CERRQRTP
       subroutine cerrrfp (NUNIT)
           CERRRFP
       subroutine cerrrq (PATH, NUNIT)
           CERRRQ
       subroutine cerrsy (PATH, NUNIT)
           CERRSY
       subroutine cerrtr (PATH, NUNIT)
           CERRTR
       subroutine cerrtz (PATH, NUNIT)
           CERRTZ
       subroutine cerrvx (PATH, NUNIT)
           CERRVX
       subroutine cgbt01 (M, N, KL, KU, A, LDA, AFAC, LDAFAC, IPIV, WORK, RESID)
           CGBT01
       subroutine cgbt02 (TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B, LDB, RESID)
           CGBT02
       subroutine cgbt05 (TRANS, N, KL, KU, NRHS, AB, LDAB, B, LDB, X, LDX, XACT, LDXACT, FERR,
           BERR, RESLTS)
           CGBT05
       subroutine cgelqs (M, N, NRHS, A, LDA, TAU, B, LDB, WORK, LWORK, INFO)
           CGELQS
       logical function cgennd (M, N, A, LDA)
           CGENND
       subroutine cgeqls (M, N, NRHS, A, LDA, TAU, B, LDB, WORK, LWORK, INFO)
           CGEQLS
       subroutine cgeqrs (M, N, NRHS, A, LDA, TAU, B, LDB, WORK, LWORK, INFO)
           CGEQRS
       subroutine cgerqs (M, N, NRHS, A, LDA, TAU, B, LDB, WORK, LWORK, INFO)
           CGERQS
       subroutine cget01 (M, N, A, LDA, AFAC, LDAFAC, IPIV, RWORK, RESID)
           CGET01
       subroutine cget02 (TRANS, M, N, NRHS, A, LDA, X, LDX, B, LDB, RWORK, RESID)
           CGET02
       subroutine cget03 (N, A, LDA, AINV, LDAINV, WORK, LDWORK, RWORK, RCOND, RESID)
           CGET03
       subroutine cget04 (N, NRHS, X, LDX, XACT, LDXACT, RCOND, RESID)
           CGET04
       subroutine cget07 (TRANS, N, NRHS, A, LDA, B, LDB, X, LDX, XACT, LDXACT, FERR, CHKFERR,
           BERR, RESLTS)
           CGET07
       subroutine cgtt01 (N, DL, D, DU, DLF, DF, DUF, DU2, IPIV, WORK, LDWORK, RWORK, RESID)
           CGTT01
       subroutine cgtt02 (TRANS, N, NRHS, DL, D, DU, X, LDX, B, LDB, RESID)
           CGTT02
       subroutine cgtt05 (TRANS, N, NRHS, DL, D, DU, B, LDB, X, LDX, XACT, LDXACT, FERR, BERR,
           RESLTS)
           CGTT05
       subroutine chet01 (UPLO, N, A, LDA, AFAC, LDAFAC, IPIV, C, LDC, RWORK, RESID)
           CHET01
       subroutine chet01_rook (UPLO, N, A, LDA, AFAC, LDAFAC, IPIV, C, LDC, RWORK, RESID)
           CHET01_ROOK
       subroutine chkxer (SRNAMT, INFOT, NOUT, LERR, OK)
           CHKXER
       subroutine chpt01 (UPLO, N, A, AFAC, IPIV, C, LDC, RWORK, RESID)
           CHPT01
       subroutine clahilb (N, NRHS, A, LDA, X, LDX, B, LDB, WORK, INFO, PATH)
           CLAHILB
       subroutine claipd (N, A, INDA, VINDA)
           CLAIPD
       subroutine claptm (UPLO, N, NRHS, ALPHA, D, E, X, LDX, BETA, B, LDB)
           CLAPTM
       subroutine clarhs (PATH, XTYPE, UPLO, TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B, LDB,
           ISEED, INFO)
           CLARHS
       subroutine clatb4 (PATH, IMAT, M, N, TYPE, KL, KU, ANORM, MODE, CNDNUM, DIST)
           CLATB4
       subroutine clatb5 (PATH, IMAT, N, TYPE, KL, KU, ANORM, MODE, CNDNUM, DIST)
           CLATB5
       subroutine clatsp (UPLO, N, X, ISEED)
           CLATSP
       subroutine clatsy (UPLO, N, X, LDX, ISEED)
           CLATSY
       subroutine clattb (IMAT, UPLO, TRANS, DIAG, ISEED, N, KD, AB, LDAB, B, WORK, RWORK, INFO)
           CLATTB
       subroutine clattp (IMAT, UPLO, TRANS, DIAG, ISEED, N, AP, B, WORK, RWORK, INFO)
           CLATTP
       subroutine clattr (IMAT, UPLO, TRANS, DIAG, ISEED, N, A, LDA, B, WORK, RWORK, INFO)
           CLATTR
       subroutine clavhe (UPLO, TRANS, DIAG, N, NRHS, A, LDA, IPIV, B, LDB, INFO)
           CLAVHE
       subroutine clavhe_rook (UPLO, TRANS, DIAG, N, NRHS, A, LDA, IPIV, B, LDB, INFO)
           CLAVHE_ROOK
       subroutine clavhp (UPLO, TRANS, DIAG, N, NRHS, A, IPIV, B, LDB, INFO)
           CLAVHP
       subroutine clavsp (UPLO, TRANS, DIAG, N, NRHS, A, IPIV, B, LDB, INFO)
           CLAVSP
       subroutine clavsy (UPLO, TRANS, DIAG, N, NRHS, A, LDA, IPIV, B, LDB, INFO)
           CLAVSY
       subroutine clavsy_rook (UPLO, TRANS, DIAG, N, NRHS, A, LDA, IPIV, B, LDB, INFO)
           CLAVSY_ROOK
       subroutine clqt01 (M, N, A, AF, Q, L, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           CLQT01
       subroutine clqt02 (M, N, K, A, AF, Q, L, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           CLQT02
       subroutine clqt03 (M, N, K, AF, C, CC, Q, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           CLQT03
       subroutine cpbt01 (UPLO, N, KD, A, LDA, AFAC, LDAFAC, RWORK, RESID)
           CPBT01
       subroutine cpbt02 (UPLO, N, KD, NRHS, A, LDA, X, LDX, B, LDB, RWORK, RESID)
           CPBT02
       subroutine cpbt05 (UPLO, N, KD, NRHS, AB, LDAB, B, LDB, X, LDX, XACT, LDXACT, FERR, BERR,
           RESLTS)
           CPBT05
       subroutine cpot01 (UPLO, N, A, LDA, AFAC, LDAFAC, RWORK, RESID)
           CPOT01
       subroutine cpot02 (UPLO, N, NRHS, A, LDA, X, LDX, B, LDB, RWORK, RESID)
           CPOT02
       subroutine cpot03 (UPLO, N, A, LDA, AINV, LDAINV, WORK, LDWORK, RWORK, RCOND, RESID)
           CPOT03
       subroutine cpot05 (UPLO, N, NRHS, A, LDA, B, LDB, X, LDX, XACT, LDXACT, FERR, BERR,
           RESLTS)
           CPOT05
       subroutine cppt01 (UPLO, N, A, AFAC, RWORK, RESID)
           CPPT01
       subroutine cppt02 (UPLO, N, NRHS, A, X, LDX, B, LDB, RWORK, RESID)
           CPPT02
       subroutine cppt03 (UPLO, N, A, AINV, WORK, LDWORK, RWORK, RCOND, RESID)
           CPPT03
       subroutine cppt05 (UPLO, N, NRHS, AP, B, LDB, X, LDX, XACT, LDXACT, FERR, BERR, RESLTS)
           CPPT05
       subroutine cpst01 (UPLO, N, A, LDA, AFAC, LDAFAC, PERM, LDPERM, PIV, RWORK, RESID, RANK)
           CPST01
       subroutine cptt01 (N, D, E, DF, EF, WORK, RESID)
           CPTT01
       subroutine cptt02 (UPLO, N, NRHS, D, E, X, LDX, B, LDB, RESID)
           CPTT02
       subroutine cptt05 (N, NRHS, D, E, B, LDB, X, LDX, XACT, LDXACT, FERR, BERR, RESLTS)
           CPTT05
       subroutine cqlt01 (M, N, A, AF, Q, L, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           CQLT01
       subroutine cqlt02 (M, N, K, A, AF, Q, L, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           CQLT02
       subroutine cqlt03 (M, N, K, AF, C, CC, Q, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           CQLT03
       real function cqpt01 (M, N, K, A, AF, LDA, TAU, JPVT, WORK, LWORK)
           CQPT01
       subroutine cqrt01 (M, N, A, AF, Q, R, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           CQRT01
       subroutine cqrt01p (M, N, A, AF, Q, R, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           CQRT01P
       subroutine cqrt02 (M, N, K, A, AF, Q, R, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           CQRT02
       subroutine cqrt03 (M, N, K, AF, C, CC, Q, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           CQRT03
       subroutine cqrt04 (M, N, NB, RESULT)
           CQRT04
       subroutine cqrt05 (M, N, L, NB, RESULT)
           CQRT05
       real function cqrt11 (M, K, A, LDA, TAU, WORK, LWORK)
           CQRT11
       real function cqrt12 (M, N, A, LDA, S, WORK, LWORK, RWORK)
           CQRT12
       subroutine cqrt13 (SCALE, M, N, A, LDA, NORMA, ISEED)
           CQRT13
       real function cqrt14 (TRANS, M, N, NRHS, A, LDA, X, LDX, WORK, LWORK)
           CQRT14
       subroutine cqrt15 (SCALE, RKSEL, M, N, NRHS, A, LDA, B, LDB, S, RANK, NORMA, NORMB, ISEED,
           WORK, LWORK)
           CQRT15
       subroutine cqrt16 (TRANS, M, N, NRHS, A, LDA, X, LDX, B, LDB, RWORK, RESID)
           CQRT16
       real function cqrt17 (TRANS, IRESID, M, N, NRHS, A, LDA, X, LDX, B, LDB, C, WORK, LWORK)
           CQRT17
       subroutine crqt01 (M, N, A, AF, Q, R, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           CRQT01
       subroutine crqt02 (M, N, K, A, AF, Q, R, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           CRQT02
       subroutine crqt03 (M, N, K, AF, C, CC, Q, LDA, TAU, WORK, LWORK, RWORK, RESULT)
           CRQT03
       real function crzt01 (M, N, A, AF, LDA, TAU, WORK, LWORK)
           CRZT01
       real function crzt02 (M, N, AF, LDA, TAU, WORK, LWORK)
           CRZT02
       subroutine csbmv (UPLO, N, K, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
           CSBMV
       subroutine cspt01 (UPLO, N, A, AFAC, IPIV, C, LDC, RWORK, RESID)
           CSPT01
       subroutine cspt02 (UPLO, N, NRHS, A, X, LDX, B, LDB, RWORK, RESID)
           CSPT02
       subroutine cspt03 (UPLO, N, A, AINV, WORK, LDW, RWORK, RCOND, RESID)
           CSPT03
       subroutine csyt01 (UPLO, N, A, LDA, AFAC, LDAFAC, IPIV, C, LDC, RWORK, RESID)
           CSYT01
       subroutine csyt01_rook (UPLO, N, A, LDA, AFAC, LDAFAC, IPIV, C, LDC, RWORK, RESID)
           CSYT01_ROOK
       subroutine csyt02 (UPLO, N, NRHS, A, LDA, X, LDX, B, LDB, RWORK, RESID)
           CSYT02
       subroutine csyt03 (UPLO, N, A, LDA, AINV, LDAINV, WORK, LDWORK, RWORK, RCOND, RESID)
           CSYT03
       subroutine ctbt02 (UPLO, TRANS, DIAG, N, KD, NRHS, AB, LDAB, X, LDX, B, LDB, WORK, RWORK,
           RESID)
           CTBT02
       subroutine ctbt03 (UPLO, TRANS, DIAG, N, KD, NRHS, AB, LDAB, SCALE, CNORM, TSCAL, X, LDX,
           B, LDB, WORK, RESID)
           CTBT03
       subroutine ctbt05 (UPLO, TRANS, DIAG, N, KD, NRHS, AB, LDAB, B, LDB, X, LDX, XACT, LDXACT,
           FERR, BERR, RESLTS)
           CTBT05
       subroutine ctbt06 (RCOND, RCONDC, UPLO, DIAG, N, KD, AB, LDAB, RWORK, RAT)
           CTBT06
       subroutine ctpt01 (UPLO, DIAG, N, AP, AINVP, RCOND, RWORK, RESID)
           CTPT01
       subroutine ctpt02 (UPLO, TRANS, DIAG, N, NRHS, AP, X, LDX, B, LDB, WORK, RWORK, RESID)
           CTPT02
       subroutine ctpt03 (UPLO, TRANS, DIAG, N, NRHS, AP, SCALE, CNORM, TSCAL, X, LDX, B, LDB,
           WORK, RESID)
           CTPT03
       subroutine ctpt05 (UPLO, TRANS, DIAG, N, NRHS, AP, B, LDB, X, LDX, XACT, LDXACT, FERR,
           BERR, RESLTS)
           CTPT05
       subroutine ctpt06 (RCOND, RCONDC, UPLO, DIAG, N, AP, RWORK, RAT)
           CTPT06
       subroutine ctrt01 (UPLO, DIAG, N, A, LDA, AINV, LDAINV, RCOND, RWORK, RESID)
           CTRT01
       subroutine ctrt02 (UPLO, TRANS, DIAG, N, NRHS, A, LDA, X, LDX, B, LDB, WORK, RWORK, RESID)
           CTRT02
       subroutine ctrt03 (UPLO, TRANS, DIAG, N, NRHS, A, LDA, SCALE, CNORM, TSCAL, X, LDX, B,
           LDB, WORK, RESID)
           CTRT03
       subroutine ctrt05 (UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB, X, LDX, XACT, LDXACT, FERR,
           BERR, RESLTS)
           CTRT05
       subroutine ctrt06 (RCOND, RCONDC, UPLO, DIAG, N, A, LDA, RWORK, RAT)
           CTRT06

Detailed Description

       This is the group of complex LAPACK TESTING LIN routines.

Function Documentation

   program cchkaa ()
       CCHKAA

       Purpose:

            CCHKAA is the main test program for the COMPLEX 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 42 lines:
            Data file for testing COMPLEX LAPACK linear equation 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)
            30.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
            CGE   11               List types on next line if 0 < NTYPES < 11
            CGB    8               List types on next line if 0 < NTYPES <  8
            CGT   12               List types on next line if 0 < NTYPES < 12
            CPO    9               List types on next line if 0 < NTYPES <  9
            CPO    9               List types on next line if 0 < NTYPES <  9
            CPP    9               List types on next line if 0 < NTYPES <  9
            CPB    8               List types on next line if 0 < NTYPES <  8
            CPT   12               List types on next line if 0 < NTYPES < 12
            CHE   10               List types on next line if 0 < NTYPES < 10
            CHR   10               List types on next line if 0 < NTYPES < 10
            CHP   10               List types on next line if 0 < NTYPES < 10
            CSY   11               List types on next line if 0 < NTYPES < 11
            CSR   11               List types on next line if 0 < NTYPES < 11
            CSP   11               List types on next line if 0 < NTYPES < 11
            CTR   18               List types on next line if 0 < NTYPES < 18
            CTP   18               List types on next line if 0 < NTYPES < 18
            CTB   17               List types on next line if 0 < NTYPES < 17
            CQR    8               List types on next line if 0 < NTYPES <  8
            CRQ    8               List types on next line if 0 < NTYPES <  8
            CLQ    8               List types on next line if 0 < NTYPES <  8
            CQL    8               List types on next line if 0 < NTYPES <  8
            CQP    6               List types on next line if 0 < NTYPES <  6
            CTZ    3               List types on next line if 0 < NTYPES <  3
            CLS    6               List types on next line if 0 < NTYPES <  6
            CEQ
            CQT
            CQX

             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:
           November 2015

   subroutine cchkeq (real THRESH, integer NOUT)
       CCHKEQ

       Purpose:

            CCHKEQ tests CGEEQU, CGBEQU, CPOEQU, CPPEQU and CPBEQU

       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 cchkgb (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, complex,
       dimension( * ) A, integer LA, complex, dimension( * ) AFAC, integer LAFAC, complex,
       dimension( * ) B, complex, dimension( * ) X, complex, dimension( * ) XACT, complex,
       dimension( * ) WORK, real, dimension( * ) RWORK, integer, dimension( * ) IWORK, integer
       NOUT)
       CCHKGB

       Purpose:

            CCHKGB tests CGBTRF, -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 COMPLEX 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 COMPLEX 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 COMPLEX array, dimension (NMAX*NSMAX)

           X

                     X is COMPLEX array, dimension (NMAX*NSMAX)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NSMAX)

           WORK

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

           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 cchkge (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,
       complex, dimension( * ) A, complex, dimension( * ) AFAC, complex, dimension( * ) AINV,
       complex, dimension( * ) B, complex, dimension( * ) X, complex, dimension( * ) XACT,
       complex, dimension( * ) WORK, real, dimension( * ) RWORK, integer, dimension( * ) IWORK,
       integer NOUT)
       CCHKGE

       Purpose:

            CCHKGE tests CGETRF, -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 COMPLEX array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is COMPLEX array, dimension (NMAX*NMAX)

           AINV

                     AINV is COMPLEX array, dimension (NMAX*NMAX)

           B

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

           X

                     X is COMPLEX array, dimension (NMAX*NSMAX)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NSMAX)

           WORK

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

           RWORK

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

           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 cchkgt (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNS, integer, dimension( * ) NSVAL, real THRESH, logical TSTERR, complex,
       dimension( * ) A, complex, dimension( * ) AF, complex, dimension( * ) B, complex,
       dimension( * ) X, complex, dimension( * ) XACT, complex, dimension( * ) WORK, real,
       dimension( * ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       CCHKGT

       Purpose:

            CCHKGT tests CGTTRF, -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 COMPLEX array, dimension (NMAX*4)

           AF

                     AF is COMPLEX array, dimension (NMAX*4)

           B

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

           X

                     X is COMPLEX array, dimension (NMAX*NSMAX)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NSMAX)

           WORK

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

       Purpose:

            CCHKHE tests CHETRF, -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 COMPLEX array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is COMPLEX array, dimension (NMAX*NMAX)

           AINV

                     AINV is COMPLEX array, dimension (NMAX*NMAX)

           B

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

           X

                     X is COMPLEX array, dimension (NMAX*NSMAX)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NSMAX)

           WORK

                     WORK is COMPLEX 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 2013

   subroutine cchkhe_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, complex, dimension( * ) A, complex,
       dimension( * ) AFAC, complex, dimension( * ) AINV, complex, dimension( * ) B, complex,
       dimension( * ) X, complex, dimension( * ) XACT, complex, dimension( * ) WORK, real,
       dimension( * ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       CCHKHE_ROOK

       Purpose:

            CCHKHE_ROOK tests CHETRF_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 COMPLEX array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is COMPLEX array, dimension (NMAX*NMAX)

           AINV

                     AINV is COMPLEX array, dimension (NMAX*NMAX)

           B

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

           X

                     X is COMPLEX array, dimension (NMAX*NSMAX)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NSMAX)

           WORK

                     WORK is COMPLEX 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 cchkhp (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNS, integer, dimension( * ) NSVAL, real THRESH, logical TSTERR, integer NMAX,
       complex, dimension( * ) A, complex, dimension( * ) AFAC, complex, dimension( * ) AINV,
       complex, dimension( * ) B, complex, dimension( * ) X, complex, dimension( * ) XACT,
       complex, dimension( * ) WORK, real, dimension( * ) RWORK, integer, dimension( * ) IWORK,
       integer NOUT)
       CCHKHP

       Purpose:

            CCHKHP tests CHPTRF, -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 COMPLEX array, dimension
                                 (NMAX*(NMAX+1)/2)

           AFAC

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

           AINV

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

           B

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

           X

                     X is COMPLEX array, dimension (NMAX*NSMAX)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NSMAX)

           WORK

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

           RWORK

                     RWORK is REAL array,
                                            dimension (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 cchklq (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,
       complex, dimension( * ) A, complex, dimension( * ) AF, complex, dimension( * ) AQ,
       complex, dimension( * ) AL, complex, dimension( * ) AC, complex, dimension( * ) B,
       complex, dimension( * ) X, complex, dimension( * ) XACT, complex, dimension( * ) TAU,
       complex, dimension( * ) WORK, real, dimension( * ) RWORK, integer NOUT)
       CCHKLQ

       Purpose:

            CCHKLQ tests CGELQF, CUNGLQ and CUNMLQ.

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

           AF

                     AF is COMPLEX array, dimension (NMAX*NMAX)

           AQ

                     AQ is COMPLEX array, dimension (NMAX*NMAX)

           AL

                     AL is COMPLEX array, dimension (NMAX*NMAX)

           AC

                     AC is COMPLEX array, dimension (NMAX*NMAX)

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           TAU

                     TAU is COMPLEX array, dimension (NMAX)

           WORK

                     WORK is COMPLEX 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 cchkpb (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNB, integer, dimension( * ) NBVAL, integer NNS, integer, dimension( * ) NSVAL,
       real THRESH, logical TSTERR, integer NMAX, complex, dimension( * ) A, complex, dimension(
       * ) AFAC, complex, dimension( * ) AINV, complex, dimension( * ) B, complex, dimension( * )
       X, complex, dimension( * ) XACT, complex, dimension( * ) WORK, real, dimension( * ) RWORK,
       integer NOUT)
       CCHKPB

       Purpose:

            CCHKPB tests CPBTRF, -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))

           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 cchkpo (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNB, integer, dimension( * ) NBVAL, integer NNS, integer, dimension( * ) NSVAL,
       real THRESH, logical TSTERR, integer NMAX, complex, dimension( * ) A, complex, dimension(
       * ) AFAC, complex, dimension( * ) AINV, complex, dimension( * ) B, complex, dimension( * )
       X, complex, dimension( * ) XACT, complex, dimension( * ) WORK, real, dimension( * ) RWORK,
       integer NOUT)
       CCHKPO

       Purpose:

            CCHKPO tests CPOTRF, -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 COMPLEX array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is COMPLEX array, dimension (NMAX*NMAX)

           AINV

                     AINV is COMPLEX array, dimension (NMAX*NMAX)

           B

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

           X

                     X is COMPLEX array, dimension (NMAX*NSMAX)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NSMAX)

           WORK

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

           RWORK

                     RWORK is REAL array, dimension
                                 (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 cchkpp (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNS, integer, dimension( * ) NSVAL, real THRESH, logical TSTERR, integer NMAX,
       complex, dimension( * ) A, complex, dimension( * ) AFAC, complex, dimension( * ) AINV,
       complex, dimension( * ) B, complex, dimension( * ) X, complex, dimension( * ) XACT,
       complex, dimension( * ) WORK, real, dimension( * ) RWORK, integer NOUT)
       CCHKPP

       Purpose:

            CCHKPP tests CPPTRF, -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 COMPLEX array, dimension
                                 (NMAX*(NMAX+1)/2)

           AFAC

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

           AINV

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

           B

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

           X

                     X is COMPLEX array, dimension (NMAX*NSMAX)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NSMAX)

           WORK

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

       Purpose:

            CCHKPS tests CPSTRF.

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

           AFAC

                     AFAC is COMPLEX array, dimension (NMAX*NMAX)

           PERM

                     PERM is COMPLEX array, dimension (NMAX*NMAX)

           PIV

                     PIV is INTEGER array, dimension (NMAX)

           WORK

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

       Purpose:

            CCHKPT tests CPTTRF, -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 COMPLEX array, dimension (NMAX*2)

           D

                     D is REAL array, dimension (NMAX*2)

           E

                     E is COMPLEX array, dimension (NMAX*2)

           B

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

           X

                     X is COMPLEX array, dimension (NMAX*NSMAX)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NSMAX)

           WORK

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

       Purpose:

            CCHKQ3 tests CGEQP3.

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

           S

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

           TAU

                     TAU is COMPLEX array, dimension (MMAX)

           WORK

                     WORK is COMPLEX array, dimension
                                 (max(M*max(M,N) + 4*min(M,N) + max(M,N)))

           RWORK

                     RWORK is REAL array, dimension (4*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 2011

   subroutine cchkql (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,
       complex, dimension( * ) A, complex, dimension( * ) AF, complex, dimension( * ) AQ,
       complex, dimension( * ) AL, complex, dimension( * ) AC, complex, dimension( * ) B,
       complex, dimension( * ) X, complex, dimension( * ) XACT, complex, dimension( * ) TAU,
       complex, dimension( * ) WORK, real, dimension( * ) RWORK, integer NOUT)
       CCHKQL

       Purpose:

            CCHKQL tests CGEQLF, CUNGQL and CUNMQL.

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

           AF

                     AF is COMPLEX array, dimension (NMAX*NMAX)

           AQ

                     AQ is COMPLEX array, dimension (NMAX*NMAX)

           AL

                     AL is COMPLEX array, dimension (NMAX*NMAX)

           AC

                     AC is COMPLEX array, dimension (NMAX*NMAX)

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           TAU

                     TAU is COMPLEX array, dimension (NMAX)

           WORK

                     WORK is COMPLEX 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 cchkqr (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,
       complex, dimension( * ) A, complex, dimension( * ) AF, complex, dimension( * ) AQ,
       complex, dimension( * ) AR, complex, dimension( * ) AC, complex, dimension( * ) B,
       complex, dimension( * ) X, complex, dimension( * ) XACT, complex, dimension( * ) TAU,
       complex, dimension( * ) WORK, real, dimension( * ) RWORK, integer, dimension( * ) IWORK,
       integer NOUT)
       CCHKQR

       Purpose:

            CCHKQR tests CGEQRF, CUNGQR and CUNMQR.

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

           AF

                     AF is COMPLEX array, dimension (NMAX*NMAX)

           AQ

                     AQ is COMPLEX array, dimension (NMAX*NMAX)

           AR

                     AR is COMPLEX array, dimension (NMAX*NMAX)

           AC

                     AC is COMPLEX array, dimension (NMAX*NMAX)

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           TAU

                     TAU is COMPLEX array, dimension (NMAX)

           WORK

                     WORK is COMPLEX 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 cchkqrt (real THRESH, logical TSTERR, integer NM, integer, dimension( * ) MVAL,
       integer NN, integer, dimension( * ) NVAL, integer NNB, integer, dimension( * ) NBVAL,
       integer NOUT)
       CCHKQRT

       Purpose:

            CCHKQRT tests CGEQRT and CGEMQRT.

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

       Purpose:

            CCHKQRTP tests CTPQRT and CTPMQRT.

       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 cchkrfp ()
       CCHKRFP

       Purpose:

            CCHKRFP is the main test program for the COMPLEX 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 cchkrq (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,
       complex, dimension( * ) A, complex, dimension( * ) AF, complex, dimension( * ) AQ,
       complex, dimension( * ) AR, complex, dimension( * ) AC, complex, dimension( * ) B,
       complex, dimension( * ) X, complex, dimension( * ) XACT, complex, dimension( * ) TAU,
       complex, dimension( * ) WORK, real, dimension( * ) RWORK, integer, dimension( * ) IWORK,
       integer NOUT)
       CCHKRQ

       Purpose:

            CCHKRQ tests CGERQF, CUNGRQ and CUNMRQ.

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

           AF

                     AF is COMPLEX array, dimension (NMAX*NMAX)

           AQ

                     AQ is COMPLEX array, dimension (NMAX*NMAX)

           AR

                     AR is COMPLEX array, dimension (NMAX*NMAX)

           AC

                     AC is COMPLEX array, dimension (NMAX*NMAX)

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           TAU

                     TAU is COMPLEX array, dimension (NMAX)

           WORK

                     WORK is COMPLEX 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 2011

   subroutine cchksp (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NNS, integer, dimension( * ) NSVAL, real THRESH, logical TSTERR, integer NMAX,
       complex, dimension( * ) A, complex, dimension( * ) AFAC, complex, dimension( * ) AINV,
       complex, dimension( * ) B, complex, dimension( * ) X, complex, dimension( * ) XACT,
       complex, dimension( * ) WORK, real, dimension( * ) RWORK, integer, dimension( * ) IWORK,
       integer NOUT)
       CCHKSP

       Purpose:

            CCHKSP tests CSPTRF, -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 COMPLEX array, dimension
                                 (NMAX*(NMAX+1)/2)

           AFAC

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

           AINV

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

           B

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

           X

                     X is COMPLEX array, dimension (NMAX*NSMAX)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NSMAX)

           WORK

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

           RWORK

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

       Purpose:

            CCHKSY tests CSYTRF, -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 COMPLEX array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is COMPLEX array, dimension (NMAX*NMAX)

           AINV

                     AINV is COMPLEX array, dimension (NMAX*NMAX)

           B

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

           X

                     X is COMPLEX array, dimension (NMAX*NSMAX)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NSMAX)

           WORK

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

           RWORK

                     RWORK is REAL array, dimension (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 2013

   subroutine cchksy_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, complex, dimension( * ) A, complex,
       dimension( * ) AFAC, complex, dimension( * ) AINV, complex, dimension( * ) B, complex,
       dimension( * ) X, complex, dimension( * ) XACT, complex, dimension( * ) WORK, real,
       dimension( * ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       CCHKSY_ROOK

       Purpose:

            CCHKSY_ROOK tests CSYTRF_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 COMPLEX array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is COMPLEX array, dimension (NMAX*NMAX)

           AINV

                     AINV is COMPLEX array, dimension (NMAX*NMAX)

           B

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

           X

                     X is COMPLEX array, dimension (NMAX*NSMAX)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NSMAX)

           WORK

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

       Purpose:

            CCHKTB tests CTBTRS, -RFS, and -CON, and CLATBS.

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

           AINV

                     AINV is COMPLEX array, dimension (NMAX*NMAX)

           B

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

           X

                     X is COMPLEX array, dimension (NMAX*NSMAX)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NSMAX)

           WORK

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

       Purpose:

            CCHKTP tests CTPTRI, -TRS, -RFS, and -CON, and CLATPS

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

           AINVP

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

           B

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

           X

                     X is COMPLEX array, dimension (NMAX*NSMAX)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NSMAX)

           WORK

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

       Purpose:

            CCHKTR tests CTRTRI, -TRS, -RFS, and -CON, and CLATRS

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

           AINV

                     AINV is COMPLEX array, dimension (NMAX*NMAX)

           B

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

           X

                     X is COMPLEX array, dimension (NMAX*NSMAX)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NSMAX)

           WORK

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

       Purpose:

            CCHKTZ tests CTZRZF.

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

           S

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

           TAU

                     TAU is COMPLEX array, dimension (MMAX)

           WORK

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

           RWORK

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

       Purpose:

            CDRVGB tests the driver routines CGBSV 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 COMPLEX 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 COMPLEX 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 COMPLEX array, dimension (LA)

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           S

                     S is REAL array, dimension (2*NMAX)

           WORK

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

           RWORK

                     RWORK is REAL array, dimension
                                 (max(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 2015

       Purpose:

            CDRVGB tests the driver routines CGBSV, -SVX, and -SVXX.

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

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           S

                     S is REAL array, dimension (2*NMAX)

           WORK

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

           RWORK

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

       Purpose:

            CDRVGE tests the driver routines CGESV 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 COMPLEX array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is COMPLEX array, dimension (NMAX*NMAX)

           ASAV

                     ASAV is COMPLEX array, dimension (NMAX*NMAX)

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           S

                     S is REAL array, dimension (2*NMAX)

           WORK

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

           RWORK

                     RWORK is REAL array, dimension (2*NRHS+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

       Purpose:

            CDRVGE tests the driver routines CGESV, -SVX, and -SVXX.

            Note that this file is used only when the XBLAS are available,
            otherwise cdrvge.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 COMPLEX array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is COMPLEX array, dimension (NMAX*NMAX)

           ASAV

                     ASAV is COMPLEX array, dimension (NMAX*NMAX)

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           S

                     S is REAL array, dimension (2*NMAX)

           WORK

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

           RWORK

                     RWORK is REAL array, dimension (2*NRHS+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:
           April 2012

   subroutine cdrvgt (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, real THRESH, logical TSTERR, complex, dimension( * ) A, complex, dimension(
       * ) AF, complex, dimension( * ) B, complex, dimension( * ) X, complex, dimension( * )
       XACT, complex, dimension( * ) WORK, real, dimension( * ) RWORK, integer, dimension( * )
       IWORK, integer NOUT)
       CDRVGT

       Purpose:

            CDRVGT tests CGTSV 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 COMPLEX array, dimension (NMAX*4)

           AF

                     AF is COMPLEX array, dimension (NMAX*4)

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           WORK

                     WORK is COMPLEX array, dimension
                                 (NMAX*max(3,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 cdrvhe (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, real THRESH, logical TSTERR, integer NMAX, complex, dimension( * ) A,
       complex, dimension( * ) AFAC, complex, dimension( * ) AINV, complex, dimension( * ) B,
       complex, dimension( * ) X, complex, dimension( * ) XACT, complex, dimension( * ) WORK,
       real, dimension( * ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       CDRVHE CDRVHEX

       Purpose:

            CDRVHE tests the driver routines CHESV 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 COMPLEX array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is COMPLEX array, dimension (NMAX*NMAX)

           AINV

                     AINV is COMPLEX array, dimension (NMAX*NMAX)

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           WORK

                     WORK is COMPLEX array, dimension (NMAX*max(2,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

       Purpose:

            CDRVHE tests the driver routines CHESV, -SVX, and -SVXX.

            Note that this file is used only when the XBLAS are available,
            otherwise cdrvhe.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 COMPLEX array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is COMPLEX array, dimension (NMAX*NMAX)

           AINV

                     AINV is COMPLEX array, dimension (NMAX*NMAX)

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           WORK

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

           RWORK

                     RWORK is REAL array, dimension (2*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:
           April 2012

   subroutine cdrvhe_rook (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * )
       NVAL, integer NRHS, real THRESH, logical TSTERR, integer NMAX, complex, dimension( * ) A,
       complex, dimension( * ) AFAC, complex, dimension( * ) AINV, complex, dimension( * ) B,
       complex, dimension( * ) X, complex, dimension( * ) XACT, complex, dimension( * ) WORK,
       real, dimension( * ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       CDRVHE_ROOK

       Purpose:

            CDRVHE_ROOK tests the driver routines CHESV_ROOK.

       Parameters:
           DOTYPE

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

           NN

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

           NVAL

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

           NRHS

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

           THRESH

                     THRESH is 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 COMPLEX array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is COMPLEX array, dimension (NMAX*NMAX)

           AINV

                     AINV is COMPLEX array, dimension (NMAX*NMAX)

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           WORK

                     WORK is COMPLEX array, dimension (NMAX*max(2,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 cdrvhp (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, real THRESH, logical TSTERR, integer NMAX, complex, dimension( * ) A,
       complex, dimension( * ) AFAC, complex, dimension( * ) AINV, complex, dimension( * ) B,
       complex, dimension( * ) X, complex, dimension( * ) XACT, complex, dimension( * ) WORK,
       real, dimension( * ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       CDRVHP

       Purpose:

            CDRVHP tests the driver routines CHPSV 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 COMPLEX array, dimension
                                 (NMAX*(NMAX+1)/2)

           AFAC

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

           AINV

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

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           WORK

                     WORK is COMPLEX array, dimension
                                 (NMAX*max(2,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 cdrvls (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, complex, dimension( * ) A, complex, dimension( * ) COPYA, complex,
       dimension( * ) B, complex, dimension( * ) COPYB, complex, dimension( * ) C, real,
       dimension( * ) S, real, dimension( * ) COPYS, complex, dimension( * ) WORK, real,
       dimension( * ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       CDRVLS

       Purpose:

            CDRVLS tests the least squares driver routines CGELS, CGELSS, CGELSY
            and CGELSD.

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

           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.

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

           B

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

           C

                     C is COMPLEX 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 COMPLEX array, dimension
                                 (MMAX*NMAX + 4*NMAX + MMAX).

           RWORK

                     RWORK is REAL array, dimension (5*NMAX-1)

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

       Purpose:

            CDRVPB tests the driver routines CPBSV 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 COMPLEX array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is COMPLEX array, dimension (NMAX*NMAX)

           ASAV

                     ASAV is COMPLEX array, dimension (NMAX*NMAX)

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           S

                     S is REAL array, dimension (NMAX)

           WORK

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

           RWORK

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

       Purpose:

            CDRVPO tests the driver routines CPOSV 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 COMPLEX array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is COMPLEX array, dimension (NMAX*NMAX)

           ASAV

                     ASAV is COMPLEX array, dimension (NMAX*NMAX)

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           S

                     S is REAL array, dimension (NMAX)

           WORK

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

           RWORK

                     RWORK is REAL array, dimension (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

       Purpose:

            CDRVPO tests the driver routines CPOSV, -SVX, and -SVXX.

            Note that this file is used only when the XBLAS are available,
            otherwise cdrvpo.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 COMPLEX array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is COMPLEX array, dimension (NMAX*NMAX)

           ASAV

                     ASAV is COMPLEX array, dimension (NMAX*NMAX)

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           S

                     S is REAL array, dimension (NMAX)

           WORK

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

           RWORK

                     RWORK is REAL array, dimension (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 2013

   subroutine cdrvpp (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, real THRESH, logical TSTERR, integer NMAX, complex, dimension( * ) A,
       complex, dimension( * ) AFAC, complex, dimension( * ) ASAV, complex, dimension( * ) B,
       complex, dimension( * ) BSAV, complex, dimension( * ) X, complex, dimension( * ) XACT,
       real, dimension( * ) S, complex, dimension( * ) WORK, real, dimension( * ) RWORK, integer
       NOUT)
       CDRVPP

       Purpose:

            CDRVPP tests the driver routines CPPSV 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 COMPLEX array, dimension (NMAX*(NMAX+1)/2)

           AFAC

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

           ASAV

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

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           BSAV

                     BSAV is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           S

                     S is REAL array, dimension (NMAX)

           WORK

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

           RWORK

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

       Purpose:

            CDRVPT tests CPTSV 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 COMPLEX array, dimension (NMAX*2)

           D

                     D is REAL array, dimension (NMAX*2)

           E

                     E is COMPLEX array, dimension (NMAX*2)

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           WORK

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

           RWORK

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

       Purpose:

            CDRVRF1 tests the LAPACK RFP routines:
                CLANHF.F

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

           LDA

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

           ARF

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

           WORK

                     WORK is COMPLEX array, dimension ( NMAX )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine cdrvrf2 (integer NOUT, integer NN, integer, dimension( nn ) NVAL, complex,
       dimension( lda, * ) A, integer LDA, complex, dimension( * ) ARF, complex, dimension(*) AP,
       complex, dimension( lda, * ) ASAV)
       CDRVRF2

       Purpose:

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

           LDA

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

           ARF

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

           AP

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

           ASAV

                     ASAV is COMPLEX6 array, dimension (LDA,NMAX)

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine cdrvrf3 (integer NOUT, integer NN, integer, dimension( nn ) NVAL, real THRESH,
       complex, dimension( lda, * ) A, integer LDA, complex, dimension( * ) ARF, complex,
       dimension( lda, * ) B1, complex, dimension( lda, * ) B2, real, dimension( * )
       S_WORK_CLANGE, complex, dimension( * ) C_WORK_CGEQRF, complex, dimension( * ) TAU)
       CDRVRF3

       Purpose:

            CDRVRF3 tests the LAPACK RFP routines:
                CTFSM

       Parameters:
           NOUT

                     NOUT is INTEGER
                           The unit number for output.

           NN

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

           NVAL

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

           THRESH

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

           A

                     A is COMPLEX*16 array, dimension (LDA,NMAX)

           LDA

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

           ARF

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

           B1

                     B1 is COMPLEX array, dimension (LDA,NMAX)

           B2

                     B2 is COMPLEX array, dimension (LDA,NMAX)

           S_WORK_CLANGE

                     S_WORK_CLANGE is REAL array, dimension (NMAX)

           C_WORK_CGEQRF

                     C_WORK_CGEQRF is COMPLEX array, dimension (NMAX)

           TAU

                     TAU is COMPLEX array, dimension (NMAX)

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine cdrvrf4 (integer NOUT, integer NN, integer, dimension( nn ) NVAL, real THRESH,
       complex, dimension( ldc, * ) C1, complex, dimension( ldc, *) C2, integer LDC, complex,
       dimension( * ) CRF, complex, dimension( lda, * ) A, integer LDA, real, dimension( * )
       S_WORK_CLANGE)
       CDRVRF4

       Purpose:

            CDRVRF4 tests the LAPACK RFP routines:
                CHFRK

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

           C2

                     C2 is COMPLEX array, dimension (LDC,NMAX)

           LDC

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

           CRF

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

           A

                     A is COMPLEX array, dimension (LDA,NMAX)

           LDA

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

           S_WORK_CLANGE

                     S_WORK_CLANGE is REAL array, dimension (NMAX)

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine cdrvrfp (integer NOUT, integer NN, integer, dimension( nn ) NVAL, integer NNS,
       integer, dimension( nns ) NSVAL, integer NNT, integer, dimension( nnt ) NTVAL, real
       THRESH, complex, dimension( * ) A, complex, dimension( * ) ASAV, complex, dimension( * )
       AFAC, complex, dimension( * ) AINV, complex, dimension( * ) B, complex, dimension( * )
       BSAV, complex, dimension( * ) XACT, complex, dimension( * ) X, complex, dimension( * )
       ARF, complex, dimension( * ) ARFINV, complex, dimension( * ) C_WORK_CLATMS, complex,
       dimension( * ) C_WORK_CPOT02, complex, dimension( * ) C_WORK_CPOT03, real, dimension( * )
       S_WORK_CLATMS, real, dimension( * ) S_WORK_CLANHE, real, dimension( * ) S_WORK_CPOT01,
       real, dimension( * ) S_WORK_CPOT02, real, dimension( * ) S_WORK_CPOT03)
       CDRVRFP

       Purpose:

            CDRVRFP tests the LAPACK RFP routines:
                CPFTRF, CPFTRS, and CPFTRI.

            This testing routine follow the same tests as CDRVPO (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 CTRTTF and
            CTFTTR.

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

           ASAV

                     ASAV is COMPLEX array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is COMPLEX array, dimension (NMAX*NMAX)

           AINV

                     AINV is COMPLEX array, dimension (NMAX*NMAX)

           B

                     B is COMPLEX array, dimension (NMAX*MAXRHS)

           BSAV

                     BSAV is COMPLEX array, dimension (NMAX*MAXRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*MAXRHS)

           X

                     X is COMPLEX array, dimension (NMAX*MAXRHS)

           ARF

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

           ARFINV

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

           C_WORK_CLATMS

                     C_WORK_CLATMS is COMPLEX array, dimension ( 3*NMAX )

           C_WORK_CPOT02

                     C_WORK_CPOT02 is COMPLEX array, dimension ( NMAX*MAXRHS )

           C_WORK_CPOT03

                     C_WORK_CPOT03 is COMPLEX array, dimension ( NMAX*NMAX )

           S_WORK_CLATMS

                     S_WORK_CLATMS is REAL array, dimension ( NMAX )

           S_WORK_CLANHE

                     S_WORK_CLANHE is REAL array, dimension ( NMAX )

           S_WORK_CPOT01

                     S_WORK_CPOT01 is REAL array, dimension ( NMAX )

           S_WORK_CPOT02

                     S_WORK_CPOT02 is REAL array, dimension ( NMAX )

           S_WORK_CPOT03

                     S_WORK_CPOT03 is REAL array, dimension ( NMAX )

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2013

   subroutine cdrvsp (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, real THRESH, logical TSTERR, integer NMAX, complex, dimension( * ) A,
       complex, dimension( * ) AFAC, complex, dimension( * ) AINV, complex, dimension( * ) B,
       complex, dimension( * ) X, complex, dimension( * ) XACT, complex, dimension( * ) WORK,
       real, dimension( * ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       CDRVSP

       Purpose:

            CDRVSP tests the driver routines CSPSV 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 COMPLEX array, dimension
                                 (NMAX*(NMAX+1)/2)

           AFAC

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

           AINV

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

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           WORK

                     WORK is COMPLEX array, dimension
                                 (NMAX*max(2,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 cdrvsy (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * ) NVAL,
       integer NRHS, real THRESH, logical TSTERR, integer NMAX, complex, dimension( * ) A,
       complex, dimension( * ) AFAC, complex, dimension( * ) AINV, complex, dimension( * ) B,
       complex, dimension( * ) X, complex, dimension( * ) XACT, complex, dimension( * ) WORK,
       real, dimension( * ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       CDRVSY CDRVSYX

       Purpose:

            CDRVSY tests the driver routines CSYSV 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 COMPLEX array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is COMPLEX array, dimension (NMAX*NMAX)

           AINV

                     AINV is COMPLEX array, dimension (NMAX*NMAX)

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           WORK

                     WORK is COMPLEX array, dimension (NMAX*max(2,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

       Purpose:

            CDRVSY tests the driver routines CSYSV, -SVX, and -SVXX.

            Note that this file is used only when the XBLAS are available,
            otherwise cdrvsy.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 COMPLEX array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is COMPLEX array, dimension (NMAX*NMAX)

           AINV

                     AINV is COMPLEX array, dimension (NMAX*NMAX)

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           WORK

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

           RWORK

                     RWORK is REAL array, dimension (2*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:
           April 2012

   subroutine cdrvsy_rook (logical, dimension( * ) DOTYPE, integer NN, integer, dimension( * )
       NVAL, integer NRHS, real THRESH, logical TSTERR, integer NMAX, complex, dimension( * ) A,
       complex, dimension( * ) AFAC, complex, dimension( * ) AINV, complex, dimension( * ) B,
       complex, dimension( * ) X, complex, dimension( * ) XACT, complex, dimension( * ) WORK,
       real, dimension( * ) RWORK, integer, dimension( * ) IWORK, integer NOUT)
       CDRVSY_ROOK

       Purpose:

            CDRVSY_ROOK tests the driver routines CSYSV_ROOK.

       Parameters:
           DOTYPE

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

           NN

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

           NVAL

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

           NRHS

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

           THRESH

                     THRESH is 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 COMPLEX array, dimension (NMAX*NMAX)

           AFAC

                     AFAC is COMPLEX array, dimension (NMAX*NMAX)

           AINV

                     AINV is COMPLEX array, dimension (NMAX*NMAX)

           B

                     B is COMPLEX array, dimension (NMAX*NRHS)

           X

                     X is COMPLEX array, dimension (NMAX*NRHS)

           XACT

                     XACT is COMPLEX array, dimension (NMAX*NRHS)

           WORK

           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 cebchvxx (real THRESH, character*3 PATH)
       CEBCHVXX Purpose:

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

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

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

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

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

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

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

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

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

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

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

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine cerrge (character*3 PATH, integer NUNIT)
       CERRGE CERRGEX

       Purpose:

            CERRGE tests the error exits for the COMPLEX 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:

            CERRGE tests the error exits for the COMPLEX routines
            for general matrices.

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

       Purpose:

            CERRGT tests the error exits for the COMPLEX 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 cerrhe (character*3 PATH, integer NUNIT)
       CERRHE CERRHEX

       Purpose:

            CERRHE tests the error exits for the COMPLEX routines
            for Hermitian 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 2013

       Purpose:

            CERRHE tests the error exits for the COMPLEX routines
            for Hermitian indefinite matrices.

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

       Purpose:

            CERRLQ tests the error exits for the COMPLEX 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 cerrls (character*3 PATH, integer NUNIT)
       CERRLS

       Purpose:

            CERRLS tests the error exits for the COMPLEX least squares
            driver routines (CGELS, CGELSS, CGELSY, CGELSD).

       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 cerrpo (character*3 PATH, integer NUNIT)
       CERRPO CERRPOX

       Purpose:

            CERRPO tests the error exits for the COMPLEX routines
            for Hermitian 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:

            CERRPO tests the error exits for the COMPLEX routines
            for Hermitian positive definite matrices.

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

       Purpose:

            CERRPS tests the error exits for the COMPLEX routines
            for CPSTRF..

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

       Purpose:

            CERRQL tests the error exits for the COMPLEX 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 cerrqp (character*3 PATH, integer NUNIT)
       CERRQP

       Purpose:

            CERRQP tests the error exits for CGEQP3.

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

       Purpose:

            CERRQR tests the error exits for the COMPLEX 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 cerrqrt (character*3 PATH, integer NUNIT)
       CERRQRT

       Purpose:

            CERRQRT tests the error exits for the COMPLEX 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 cerrqrtp (character*3 PATH, integer NUNIT)
       CERRQRTP

       Purpose:

            CERRQRTP 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 cerrrfp (integer NUNIT)
       CERRRFP

       Purpose:

            CERRRFP tests the error exits for the COMPLEX driver routines
            for solving linear systems of equations.

            CDRVRFP tests the COMPLEX LAPACK RFP routines:
                CTFSM, CTFTRI, CHFRK, CTFTTP, CTFTTR, CPFTRF, CPFTRS, CTPTTF,
                CTPTTR, CTRTTF, and CTRTTP

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

       Purpose:

            CERRRQ tests the error exits for the COMPLEX 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 cerrsy (character*3 PATH, integer NUNIT)
       CERRSY CERRSYX

       Purpose:

            CERRSY tests the error exits for the COMPLEX 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 2013

       Purpose:

            CERRSY tests the error exits for the COMPLEX routines
            for symmetric indefinite matrices.

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

       Purpose:

            CERRTR tests the error exits for the COMPLEX 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 cerrtz (character*3 PATH, integer NUNIT)
       CERRTZ

       Purpose:

            CERRTZ tests the error exits for CTZRZF.

       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 cerrvx (character*3 PATH, integer NUNIT)
       CERRVX CERRVXX

       Purpose:

            CERRVX tests the error exits for the COMPLEX 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 2013

       Purpose:

            CERRVX tests the error exits for the COMPLEX 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 cgbt01 (integer M, integer N, integer KL, integer KU, complex, dimension( lda, * )
       A, integer LDA, complex, dimension( ldafac, * ) AFAC, integer LDAFAC, integer, dimension(
       * ) IPIV, complex, dimension( * ) WORK, real RESID)
       CGBT01

       Purpose:

            CGBT01 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 COMPLEX 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 COMPLEX 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
                     CGBTRF.  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 CGBTRF 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 CGBTRF.

           WORK

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

       Purpose:

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

       Purpose:

            CGBT05 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 cgelqs (integer M, integer N, integer NRHS, complex, dimension( lda, * ) A, integer
       LDA, complex, dimension( * ) TAU, complex, dimension( ldb, * ) B, integer LDB, complex,
       dimension( lwork ) WORK, integer LWORK, integer INFO)
       CGELQS

       Purpose:

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

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

           LDA

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

           TAU

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

           B

                     B is COMPLEX 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 COMPLEX 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 cgennd (integer M, integer N, complex, dimension( lda, * ) A, integer LDA)
       CGENND

       Purpose:

               CGENND tests that its argument has a real, 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 COMPLEX 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 cgeqls (integer M, integer N, integer NRHS, complex, dimension( lda, * ) A, integer
       LDA, complex, dimension( * ) TAU, complex, dimension( ldb, * ) B, integer LDB, complex,
       dimension( lwork ) WORK, integer LWORK, integer INFO)
       CGEQLS

       Purpose:

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

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

           LDA

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

           TAU

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

           B

                     B is COMPLEX 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 COMPLEX 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 cgeqrs (integer M, integer N, integer NRHS, complex, dimension( lda, * ) A, integer
       LDA, complex, dimension( * ) TAU, complex, dimension( ldb, * ) B, integer LDB, complex,
       dimension( lwork ) WORK, integer LWORK, integer INFO)
       CGEQRS

       Purpose:

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

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

           LDA

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

           TAU

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

           B

                     B is COMPLEX 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 COMPLEX 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 cgerqs (integer M, integer N, integer NRHS, complex, dimension( lda, * ) A, integer
       LDA, complex, dimension( * ) TAU, complex, dimension( ldb, * ) B, integer LDB, complex,
       dimension( lwork ) WORK, integer LWORK, integer INFO)
       CGERQS

       Purpose:

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

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

           LDA

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

           TAU

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

           B

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

       Purpose:

            CGET01 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 COMPLEX 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 COMPLEX 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 CGETRF.
                     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 CGETRF.

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

       Purpose:

            CGET02 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^T*x = b, where A^T is the transpose of A
                     = 'C':  A^H*x = b, where A^H is the conjugate 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 cget03 (integer N, complex, dimension( lda, * ) A, integer LDA, complex, dimension(
       ldainv, * ) AINV, integer LDAINV, complex, dimension( ldwork, * ) WORK, integer LDWORK,
       real, dimension( * ) RWORK, real RCOND, real RESID)
       CGET03

       Purpose:

            CGET03 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 cget04 (integer N, integer NRHS, complex, dimension( ldx, * ) X, integer LDX,
       complex, dimension( ldxact, * ) XACT, integer LDXACT, real RCOND, real RESID)
       CGET04

       Purpose:

            CGET04 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 COMPLEX 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 COMPLEX 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

   subroutine cget07 (character TRANS, integer N, integer NRHS, complex, dimension( lda, * ) A,
       integer LDA, complex, dimension( ldb, * ) B, integer LDB, complex, dimension( ldx, * ) X,
       integer LDX, complex, dimension( ldxact, * ) XACT, integer LDXACT, real, dimension( * )
       FERR, logical CHKFERR, real, dimension( * ) BERR, real, dimension( * ) RESLTS)
       CGET07

       Purpose:

            CGET07 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 cgtt01 (integer N, complex, dimension( * ) DL, complex, dimension( * ) D, complex,
       dimension( * ) DU, complex, dimension( * ) DLF, complex, dimension( * ) DF, complex,
       dimension( * ) DUF, complex, dimension( * ) DU2, integer, dimension( * ) IPIV, complex,
       dimension( ldwork, * ) WORK, integer LDWORK, real, dimension( * ) RWORK, real RESID)
       CGTT01

       Purpose:

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

           D

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

           DU

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

           DLF

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

           DF

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

           DUF

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

           DU2

                     DU2 is COMPLEX 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 COMPLEX 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 cgtt02 (character TRANS, integer N, integer NRHS, complex, dimension( * ) DL,
       complex, dimension( * ) D, complex, dimension( * ) DU, complex, dimension( ldx, * ) X,
       integer LDX, complex, dimension( ldb, * ) B, integer LDB, real RESID)
       CGTT02

       Purpose:

            CGTT02 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**T * X  (Transpose)
                     = 'C':  B - A**H * X  (Conjugate 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 COMPLEX array, dimension (N-1)
                     The (n-1) sub-diagonal elements of A.

           D

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

           DU

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

           X

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

       Purpose:

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

           D

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

           DU

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

           B

                     B is COMPLEX 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 COMPLEX 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 COMPLEX 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 chet01 (character UPLO, integer N, complex, dimension( lda, * ) A, integer LDA,
       complex, dimension( ldafac, * ) AFAC, integer LDAFAC, integer, dimension( * ) IPIV,
       complex, dimension( ldc, * ) C, integer LDC, real, dimension( * ) RWORK, real RESID)
       CHET01

       Purpose:

            CHET01 reconstructs a Hermitian 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, 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
                     Hermitian 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 COMPLEX array, dimension (LDA,N)
                     The original Hermitian matrix A.

           LDA

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

           AFAC

                     AFAC is COMPLEX 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 CHETRF.

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

           C

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

       Purpose:

            CHET01_ROOK reconstructs a complex Hermitian 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, EPS is the machine epsilon,
            L' is the transpose of L, and U' is the transpose of U.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     complex Hermitian 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 COMPLEX array, dimension (LDA,N)
                     The original complex Hermitian matrix A.

           LDA

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

           AFAC

                     AFAC is COMPLEX 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 CSYTRF_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 CSYTRF_ROOK.

           C

                     C is COMPLEX 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 chkxer (character*(*) SRNAMT, integer INFOT, integer NOUT, logical LERR, logical
       OK)
       CHKXER

       Purpose:

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine chpt01 (character UPLO, integer N, complex, dimension( * ) A, complex, dimension( *
       ) AFAC, integer, dimension( * ) IPIV, complex, dimension( ldc, * ) C, integer LDC, real,
       dimension( * ) RWORK, real RESID)
       CHPT01

       Purpose:

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

           AFAC

                     AFAC is COMPLEX 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 CHPTRF.

           IPIV

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

           C

                     C is COMPLEX 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 clahilb (integer N, integer NRHS, complex, dimension(lda,n) A, integer LDA,
       complex, dimension(ldx, nrhs) X, integer LDX, complex, dimension(ldb, nrhs) B, integer
       LDB, real, dimension(n) WORK, integer INFO, character*3 PATH)
       CLAHILB

       Purpose:

            CLAHILB 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 COMPLEX 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 COMPLEX 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

           PATH

                     PATH is CHARACTER*3
                     The LAPACK path name.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine claipd (integer N, complex, dimension( * ) A, integer INDA, integer VINDA)
       CLAIPD

       Purpose:

            CLAIPD sets the imaginary part of the diagonal elements of a complex
            matrix A to a large value.  This is used to test LAPACK routines for
            complex Hermitian matrices, which are not supposed to access or use
            the imaginary parts of the diagonals.

       Parameters:
           N

                     N is INTEGER
                    The number of diagonal elements of A.

           A

                     A is COMPLEX array, dimension
                                   (1+(N-1)*INDA+(N-2)*VINDA)
                    On entry, the complex (Hermitian) matrix A.
                    On exit, the imaginary parts of the diagonal elements are set
                    to BIGNUM = EPS / SAFMIN, where EPS is the machine epsilon and
                    SAFMIN is the safe minimum.

           INDA

                     INDA is INTEGER
                    The increment between A(1) and the next diagonal element of A.
                    Typical values are
                    = LDA+1:  square matrices with leading dimension LDA
                    = 2:  packed upper triangular matrix, starting at A(1,1)
                    = N:  packed lower triangular matrix, starting at A(1,1)

           VINDA

                     VINDA is INTEGER
                    The change in the diagonal increment between columns of A.
                    Typical values are
                    = 0:  no change, the row and column increments in A are fixed
                    = 1:  packed upper triangular matrix
                    = -1:  packed lower triangular matrix

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine claptm (character UPLO, integer N, integer NRHS, real ALPHA, real, dimension( * )
       D, complex, dimension( * ) E, complex, dimension( ldx, * ) X, integer LDX, real BETA,
       complex, dimension( ldb, * ) B, integer LDB)
       CLAPTM

       Purpose:

            CLAPTM multiplies an N by NRHS matrix X by a Hermitian 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:
           UPLO

                     UPLO is CHARACTER
                     Specifies whether the superdiagonal or the subdiagonal of the
                     tridiagonal matrix A is stored.
                     = 'U':  Upper, E is the superdiagonal of A.
                     = 'L':  Lower, E is the subdiagonal of A.

           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 COMPLEX array, dimension (N-1)
                     The (n-1) subdiagonal or superdiagonal elements of A.

           X

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

       Purpose:

            CLARHS 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, A**T (transpose of A), or A**H (conjugate
            transpose of A).

       Parameters:
           PATH

                     PATH is CHARACTER*3
                     The type of the complex matrix A.  PATH may be given in any
                     combination of upper and lower case.  Valid paths include
                        xGE:  General m x n matrix
                        xGB:  General banded matrix
                        xPO:  Hermitian positive definite, 2-D storage
                        xPP:  Hermitian positive definite packed
                        xPB:  Hermitian positive definite banded
                        xHE:  Hermitian indefinite, 2-D storage
                        xHP:  Hermitian indefinite packed
                        xHB:  Hermitian indefinite 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
                     Used only if A is symmetric or triangular; specifies whether
                     the upper or lower triangular part of the matrix A is stored.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           TRANS

                     TRANS is CHARACTER*1
                     Used only if A is nonsymmetric; specifies the operation
                     applied to the matrix A.
                     = 'N':  B := A    * X
                     = 'T':  B := A**T * X
                     = 'C':  B := A**H * X

           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
                     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 COMPLEX 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) COMPLEX 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 COMPLEX 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
                     CLATMS).  Modified on exit.

           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 clatb4 (character*3 PATH, integer IMAT, integer M, integer N, character TYPE,
       integer KL, integer KU, real ANORM, integer MODE, real CNDNUM, character DIST)
       CLATB4

       Purpose:

            CLATB4 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
                     = 'H':  Hermitian matrix
                     = 'P':  Hermitian 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 2013

   subroutine clatb5 (character*3 PATH, integer IMAT, integer N, character TYPE, integer KL,
       integer KU, real ANORM, integer MODE, real CNDNUM, character DIST)
       CLATB5

       Purpose:

            CLATB5 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 clatsp (character UPLO, integer N, complex, dimension( * ) X, integer, dimension( *
       ) ISEED)
       CLATSP

       Purpose:

            CLATSP generates a special test matrix for the complex symmetric
            (indefinite) factorization for packed matrices.  The pivot blocks of
            the generated matrix will be in the following order:
               2x2 pivot block, non diagonalizable
               1x1 pivot block
               2x2 pivot block, diagonalizable
               (cycle repeats)
            A row interchange is required for each non-diagonalizable 2x2 block.

       Parameters:
           UPLO

                     UPLO is CHARACTER
                     Specifies whether the generated matrix is to be upper or
                     lower triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           N

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

           X

                     X is COMPLEX array, dimension (N*(N+1)/2)
                     The generated matrix in packed storage format.  The matrix
                     consists of 3x3 and 2x2 diagonal blocks which result in the
                     pivot sequence given above.  The matrix outside these
                     diagonal blocks is zero.

           ISEED

                     ISEED is INTEGER array, dimension (4)
                     On entry, the seed for the random number generator.  The last
                     of the four integers must be odd.  (modified on exit)

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine clatsy (character UPLO, integer N, complex, dimension( ldx, * ) X, integer LDX,
       integer, dimension( * ) ISEED)
       CLATSY

       Purpose:

            CLATSY generates a special test matrix for the complex symmetric
            (indefinite) factorization.  The pivot blocks of the generated matrix
            will be in the following order:
               2x2 pivot block, non diagonalizable
               1x1 pivot block
               2x2 pivot block, diagonalizable
               (cycle repeats)
            A row interchange is required for each non-diagonalizable 2x2 block.

       Parameters:
           UPLO

                     UPLO is CHARACTER
                     Specifies whether the generated matrix is to be upper or
                     lower triangular.
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           N

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

           X

                     X is COMPLEX array, dimension (LDX,N)
                     The generated matrix, consisting of 3x3 and 2x2 diagonal
                     blocks which result in the pivot sequence given above.
                     The matrix outside of these diagonal blocks is zero.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.

           ISEED

                     ISEED is INTEGER array, dimension (4)
                     On entry, the seed for the random number generator.  The last
                     of the four integers must be odd.  (modified on exit)

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine clattb (integer IMAT, character UPLO, character TRANS, character DIAG, integer,
       dimension( 4 ) ISEED, integer N, integer KD, complex, dimension( ldab, * ) AB, integer
       LDAB, complex, dimension( * ) B, complex, dimension( * ) WORK, real, dimension( * ) RWORK,
       integer INFO)
       CLATTB

       Purpose:

            CLATTB 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
                     CLATMS).  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 COMPLEX 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 COMPLEX array, dimension (N)

           WORK

                     WORK is COMPLEX array, dimension (2*N)

           RWORK

                     RWORK is REAL array, dimension (N)

           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 clattp (integer IMAT, character UPLO, character TRANS, character DIAG, integer,
       dimension( 4 ) ISEED, integer N, complex, dimension( * ) AP, complex, dimension( * ) B,
       complex, dimension( * ) WORK, real, dimension( * ) RWORK, integer INFO)
       CLATTP

       Purpose:

            CLATTP 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

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

           N

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

           AP

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

           WORK

                     WORK is COMPLEX array, dimension (2*N)

           RWORK

                     RWORK is REAL array, dimension (N)

           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 clattr (integer IMAT, character UPLO, character TRANS, character DIAG, integer,
       dimension( 4 ) ISEED, integer N, complex, dimension( lda, * ) A, integer LDA, complex,
       dimension( * ) B, complex, dimension( * ) WORK, real, dimension( * ) RWORK, integer INFO)
       CLATTR

       Purpose:

            CLATTR 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

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

           N

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

           A

                     A is COMPLEX array, dimension (LDA,N)
                     The triangular matrix A.  If UPLO = 'U', the leading N x 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 x N lower
                     triangular part of the array A contains the lower triangular
                     matrix 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 COMPLEX array, dimension (N)
                     The right hand side vector, if IMAT > 10.

           WORK

                     WORK is COMPLEX array, dimension (2*N)

           RWORK

                     RWORK is REAL array, dimension (N)

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

       Purpose:

            CLAVHE performs one of the matrix-vector operations
               x := A*x  or  x := A^H*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 CHETRF.

            If TRANS = 'N', multiplies by U  or U * D  (or L  or L * D)
            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
                     = 'C':   x := A^H*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 COMPLEX array, dimension (LDA,N)
                     The block diagonal matrix D and the multipliers used to
                     obtain the factor U or L as computed by CHETRF_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 CHETRF.

                     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 COMPLEX 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 clavhe_rook (character UPLO, character TRANS, character DIAG, integer N, integer
       NRHS, complex, dimension( lda, * ) A, integer LDA, integer, dimension( * ) IPIV, complex,
       dimension( ldb, * ) B, integer LDB, integer INFO)
       CLAVHE_ROOK

       Purpose:

            CLAVHE_ROOK performs one of the matrix-vector operations
               x := A*x  or  x := A^H*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 CHETRF_ROOK.

            If TRANS = 'N', multiplies by U  or U * D  (or L  or L * D)
            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
                     = 'C':   x := A^H*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 COMPLEX array, dimension (LDA,N)
                     The block diagonal matrix D and the multipliers used to
                     obtain the factor U or L as computed by CHETRF_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 CHETRF_ROOK.
                     If UPLO = 'U':
                        Only the last KB elements of IPIV are set.

                        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) < 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':
                        Only the first KB elements of IPIV are set.

                        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) < 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 COMPLEX 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 clavhp (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       complex, dimension( * ) A, integer, dimension( * ) IPIV, complex, dimension( ldb, * ) B,
       integer LDB, integer INFO)
       CLAVHP

       Purpose:

               CLAVHP  performs one of the matrix-vector operations
                  x := A*x  or  x := A^H*x,
               where x is an N element vector and  A is one of the factors
               from the symmetric factorization computed by CHPTRF.
               CHPTRF produces a factorization of the form
                    U * D * U^H     or     L * D * L^H,
               where U (or L) is a product of permutation and unit upper (lower)
               triangular matrices, U^H (or L^H) is the conjugate transpose of
               U (or L), and D is Hermitian and block diagonal with 1 x 1 and
               2 x 2 diagonal blocks.  The multipliers for the transformations
               and the upper or lower triangular parts of the diagonal blocks
               are stored columnwise in packed format in the linear array A.

               If TRANS = 'N' or 'n', CLAVHP multiplies either by U or U * D
               (or L or L * D).
               If TRANS = 'C' or 'c', CLAVHP multiplies either by U^H or D * U^H
               (or L^H or D * L^H ).

             UPLO   - CHARACTER*1
                      On entry, UPLO specifies whether the triangular matrix
                      stored in A is upper or lower triangular.
                         UPLO = 'U' or 'u'   The matrix is upper triangular.
                         UPLO = 'L' or 'l'   The matrix is lower triangular.
                      Unchanged on exit.

             TRANS  - CHARACTER*1
                      On entry, TRANS specifies the operation to be performed as
                      follows:
                         TRANS = 'N' or 'n'   x := A*x.
                         TRANS = 'C' or 'c'   x := A^H*x.
                      Unchanged on exit.

             DIAG   - CHARACTER*1
                      On entry, DIAG specifies whether the diagonal blocks are
                      assumed to be unit matrices, as follows:
                         DIAG = 'U' or 'u'   Diagonal blocks are unit matrices.
                         DIAG = 'N' or 'n'   Diagonal blocks are non-unit.
                      Unchanged on exit.

             N      - INTEGER
                      On entry, N specifies the order of the matrix A.
                      N must be at least zero.
                      Unchanged on exit.

             NRHS   - INTEGER
                      On entry, NRHS specifies the number of right hand sides,
                      i.e., the number of vectors x to be multiplied by A.
                      NRHS must be at least zero.
                      Unchanged on exit.

             A      - COMPLEX array, dimension( N*(N+1)/2 )
                      On entry, A contains a block diagonal matrix and the
                      multipliers of the transformations used to obtain it,
                      stored as a packed triangular matrix.
                      Unchanged on exit.

             IPIV   - INTEGER array, dimension( N )
                      On entry, IPIV contains the vector of pivot indices as
                      determined by CSPTRF or CHPTRF.
                      If IPIV( K ) = K, no interchange was done.
                      If IPIV( K ) <> K but IPIV( K ) > 0, then row K was inter-
                      changed with row IPIV( K ) and a 1 x 1 pivot block was used.
                      If IPIV( K ) < 0 and UPLO = 'U', then row K-1 was exchanged
                      with row | IPIV( K ) | and a 2 x 2 pivot block was used.
                      If IPIV( K ) < 0 and UPLO = 'L', then row K+1 was exchanged
                      with row | IPIV( K ) | and a 2 x 2 pivot block was used.

             B      - COMPLEX array, dimension( LDB, NRHS )
                      On entry, B contains NRHS vectors of length N.
                      On exit, B is overwritten with the product A * B.

             LDB    - INTEGER
                      On entry, LDB contains the leading dimension of B as
                      declared in the calling program.  LDB must be at least
                      max( 1, N ).
                      Unchanged on exit.

             INFO   - INTEGER
                      INFO is the error flag.
                      On exit, a value of 0 indicates a successful exit.
                      A negative value, say -K, indicates that the K-th argument
                      has an illegal value.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine clavsp (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       complex, dimension( * ) A, integer, dimension( * ) IPIV, complex, dimension( ldb, * ) B,
       integer LDB, integer INFO)
       CLAVSP

       Purpose:

               CLAVSP  performs one of the matrix-vector operations
                  x := A*x  or  x := A^T*x,
               where x is an N element vector and  A is one of the factors
               from the symmetric factorization computed by CSPTRF.
               CSPTRF produces a factorization of the form
                    U * D * U^T     or     L * D * L^T,
               where U (or L) is a product of permutation and unit upper (lower)
               triangular matrices, U^T (or L^T) is the transpose of
               U (or L), and D is symmetric and block diagonal with 1 x 1 and
               2 x 2 diagonal blocks.  The multipliers for the transformations
               and the upper or lower triangular parts of the diagonal blocks
               are stored columnwise in packed format in the linear array A.

               If TRANS = 'N' or 'n', CLAVSP multiplies either by U or U * D
               (or L or L * D).
               If TRANS = 'C' or 'c', CLAVSP multiplies either by U^T or D * U^T
               (or L^T or D * L^T ).

             UPLO   - CHARACTER*1
                      On entry, UPLO specifies whether the triangular matrix
                      stored in A is upper or lower triangular.
                         UPLO = 'U' or 'u'   The matrix is upper triangular.
                         UPLO = 'L' or 'l'   The matrix is lower triangular.
                      Unchanged on exit.

             TRANS  - CHARACTER*1
                      On entry, TRANS specifies the operation to be performed as
                      follows:
                         TRANS = 'N' or 'n'   x := A*x.
                         TRANS = 'T' or 't'   x := A^T*x.
                      Unchanged on exit.

             DIAG   - CHARACTER*1
                      On entry, DIAG specifies whether the diagonal blocks are
                      assumed to be unit matrices, as follows:
                         DIAG = 'U' or 'u'   Diagonal blocks are unit matrices.
                         DIAG = 'N' or 'n'   Diagonal blocks are non-unit.
                      Unchanged on exit.

             N      - INTEGER
                      On entry, N specifies the order of the matrix A.
                      N must be at least zero.
                      Unchanged on exit.

             NRHS   - INTEGER
                      On entry, NRHS specifies the number of right hand sides,
                      i.e., the number of vectors x to be multiplied by A.
                      NRHS must be at least zero.
                      Unchanged on exit.

             A      - COMPLEX array, dimension( N*(N+1)/2 )
                      On entry, A contains a block diagonal matrix and the
                      multipliers of the transformations used to obtain it,
                      stored as a packed triangular matrix.
                      Unchanged on exit.

             IPIV   - INTEGER array, dimension( N )
                      On entry, IPIV contains the vector of pivot indices as
                      determined by CSPTRF.
                      If IPIV( K ) = K, no interchange was done.
                      If IPIV( K ) <> K but IPIV( K ) > 0, then row K was inter-
                      changed with row IPIV( K ) and a 1 x 1 pivot block was used.
                      If IPIV( K ) < 0 and UPLO = 'U', then row K-1 was exchanged
                      with row | IPIV( K ) | and a 2 x 2 pivot block was used.
                      If IPIV( K ) < 0 and UPLO = 'L', then row K+1 was exchanged
                      with row | IPIV( K ) | and a 2 x 2 pivot block was used.

             B      - COMPLEX array, dimension( LDB, NRHS )
                      On entry, B contains NRHS vectors of length N.
                      On exit, B is overwritten with the product A * B.

             LDB    - INTEGER
                      On entry, LDB contains the leading dimension of B as
                      declared in the calling program.  LDB must be at least
                      max( 1, N ).
                      Unchanged on exit.

             INFO   - INTEGER
                      INFO is the error flag.
                      On exit, a value of 0 indicates a successful exit.
                      A negative value, say -K, indicates that the K-th argument
                      has an illegal value.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine clavsy (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       complex, dimension( lda, * ) A, integer LDA, integer, dimension( * ) IPIV, complex,
       dimension( ldb, * ) B, integer LDB, integer INFO)
       CLAVSY

       Purpose:

            CLAVSY 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 CSYTRF.

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

       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

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

                     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 COMPLEX 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 clavsy_rook (character UPLO, character TRANS, character DIAG, integer N, integer
       NRHS, complex, dimension( lda, * ) A, integer LDA, integer, dimension( * ) IPIV, complex,
       dimension( ldb, * ) B, integer LDB, integer INFO)
       CLAVSY_ROOK

       Purpose:

            CLAVSY_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 CSYTRF_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')

       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

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

       Purpose:

            CLQT01 tests CGELQF, which computes the LQ factorization of an m-by-n
            matrix A, and partially tests CUNGLQ which forms the n-by-n
            orthogonal matrix Q.

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

           AF

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

           Q

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

           L

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

           WORK

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

       Purpose:

            CLQT02 tests CUNGLQ, 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, CLQT02 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 COMPLEX array, dimension (LDA,N)
                     The m-by-n matrix A which was factorized by CLQT01.

           AF

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

           Q

                     Q is COMPLEX array, dimension (LDA,N)

           L

                     L is COMPLEX array, dimension (LDA,M)

           LDA

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

           TAU

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

           WORK

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

       Purpose:

            CLQT03 tests CUNMLQ, which computes Q*C, Q'*C, C*Q or C*Q'.

            CLQT03 compares the results of a call to CUNMLQ with the results of
            forming Q explicitly by a call to CUNGLQ and then performing matrix
            multiplication by a call to CGEMM.

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

           C

                     C is COMPLEX array, dimension (LDA,N)

           CC

                     CC is COMPLEX array, dimension (LDA,N)

           Q

                     Q is COMPLEX array, dimension (LDA,N)

           LDA

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

           TAU

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

           WORK

                     WORK is COMPLEX 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 cpbt01 (character UPLO, integer N, integer KD, complex, dimension( lda, * ) A,
       integer LDA, complex, dimension( ldafac, * ) AFAC, integer LDAFAC, real, dimension( * )
       RWORK, real RESID)
       CPBT01

       Purpose:

            CPBT01 reconstructs a Hermitian 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
                     Hermitian 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 COMPLEX array, dimension (LDA,N)
                     The original Hermitian 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 CPBTRF for further details.

           LDA

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

           AFAC

                     AFAC is COMPLEX 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 CPBTRF.

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

       Purpose:

            CPBT02 computes the residual for a solution of a Hermitian 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
                     Hermitian 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 COMPLEX array, dimension (LDA,N)
                     The original Hermitian 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 CPBTRF for further details.

           LDA

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

           X

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

       Purpose:

            CPBT05 tests the error bounds from iterative refinement for the
            computed solution to a system of equations A*X = B, where A is a
            Hermitian 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
                     Hermitian 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 COMPLEX array, dimension (LDAB,N)
                     The upper or lower triangle of the Hermitian 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 cpot01 (character UPLO, integer N, complex, dimension( lda, * ) A, integer LDA,
       complex, dimension( ldafac, * ) AFAC, integer LDAFAC, real, dimension( * ) RWORK, real
       RESID)
       CPOT01

       Purpose:

            CPOT01 reconstructs a Hermitian 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, 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
                     Hermitian 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 COMPLEX array, dimension (LDA,N)
                     The original Hermitian matrix A.

           LDA

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

           AFAC

                     AFAC is COMPLEX 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 cpot02 (character UPLO, integer N, integer NRHS, complex, dimension( lda, * ) A,
       integer LDA, complex, dimension( ldx, * ) X, integer LDX, complex, dimension( ldb, * ) B,
       integer LDB, real, dimension( * ) RWORK, real RESID)
       CPOT02

       Purpose:

            CPOT02 computes the residual for the solution of a Hermitian 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
                     Hermitian 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 COMPLEX array, dimension (LDA,N)
                     The original Hermitian matrix A.

           LDA

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

           X

                     X is COMPLEX 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 COMPLEX 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 cpot03 (character UPLO, integer N, complex, dimension( lda, * ) A, integer LDA,
       complex, dimension( ldainv, * ) AINV, integer LDAINV, complex, dimension( ldwork, * )
       WORK, integer LDWORK, real, dimension( * ) RWORK, real RCOND, real RESID)
       CPOT03

       Purpose:

            CPOT03 computes the residual for a Hermitian 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
                     Hermitian 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 COMPLEX array, dimension (LDA,N)
                     The original Hermitian matrix A.

           LDA

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

           AINV

                     AINV is COMPLEX array, dimension (LDAINV,N)
                     On entry, the inverse of the matrix A, stored as a Hermitian
                     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 COMPLEX 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 cpot05 (character UPLO, integer N, integer NRHS, complex, dimension( lda, * ) A,
       integer LDA, complex, dimension( ldb, * ) B, integer LDB, complex, dimension( ldx, * ) X,
       integer LDX, complex, dimension( ldxact, * ) XACT, integer LDXACT, real, dimension( * )
       FERR, real, dimension( * ) BERR, real, dimension( * ) RESLTS)
       CPOT05

       Purpose:

            CPOT05 tests the error bounds from iterative refinement for the
            computed solution to a system of equations A*X = B, where A is a
            Hermitian 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
                     Hermitian 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 COMPLEX array, dimension (LDA,N)
                     The Hermitian 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 cppt01 (character UPLO, integer N, complex, dimension( * ) A, complex, dimension( *
       ) AFAC, real, dimension( * ) RWORK, real RESID)
       CPPT01

       Purpose:

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

           AFAC

                     AFAC is COMPLEX 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 cppt02 (character UPLO, integer N, integer NRHS, complex, dimension( * ) A,
       complex, dimension( ldx, * ) X, integer LDX, complex, dimension( ldb, * ) B, integer LDB,
       real, dimension( * ) RWORK, real RESID)
       CPPT02

       Purpose:

            CPPT02 computes the residual in the solution of a Hermitian 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
                     Hermitian 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 COMPLEX array, dimension (N*(N+1)/2)
                     The original Hermitian matrix A, stored as a packed
                     triangular matrix.

           X

                     X is COMPLEX 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 COMPLEX 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 cppt03 (character UPLO, integer N, complex, dimension( * ) A, complex, dimension( *
       ) AINV, complex, dimension( ldwork, * ) WORK, integer LDWORK, real, dimension( * ) RWORK,
       real RCOND, real RESID)
       CPPT03

       Purpose:

            CPPT03 computes the residual for a Hermitian 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
                     Hermitian 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 COMPLEX array, dimension (N*(N+1)/2)
                     The original Hermitian matrix A, stored as a packed
                     triangular matrix.

           AINV

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

           WORK

                     WORK is COMPLEX 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 cppt05 (character UPLO, integer N, integer NRHS, complex, dimension( * ) AP,
       complex, dimension( ldb, * ) B, integer LDB, complex, dimension( ldx, * ) X, integer LDX,
       complex, dimension( ldxact, * ) XACT, integer LDXACT, real, dimension( * ) FERR, real,
       dimension( * ) BERR, real, dimension( * ) RESLTS)
       CPPT05

       Purpose:

            CPPT05 tests the error bounds from iterative refinement for the
            computed solution to a system of equations A*X = B, where A is a
            Hermitian 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
                     Hermitian 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 COMPLEX array, dimension (N*(N+1)/2)
                     The upper or lower triangle of the Hermitian 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 cpst01 (character UPLO, integer N, complex, dimension( lda, * ) A, integer LDA,
       complex, dimension( ldafac, * ) AFAC, integer LDAFAC, complex, dimension( ldperm, * )
       PERM, integer LDPERM, integer, dimension( * ) PIV, real, dimension( * ) RWORK, real RESID,
       integer RANK)
       CPST01

       Purpose:

            CPST01 reconstructs an Hermitian 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, 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
                     Hermitian 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 COMPLEX array, dimension (LDA,N)
                     The original Hermitian matrix A.

           LDA

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

           AFAC

                     AFAC is COMPLEX 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 COMPLEX 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 cptt01 (integer N, real, dimension( * ) D, complex, dimension( * ) E, real,
       dimension( * ) DF, complex, dimension( * ) EF, complex, dimension( * ) WORK, real RESID)
       CPTT01

       Purpose:

            CPTT01 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 COMPLEX 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 COMPLEX array, dimension (N-1)
                     The (n-1) subdiagonal elements of the factor L from the
                     L*D*L' factorization of A.

           WORK

                     WORK is COMPLEX 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 cptt02 (character UPLO, integer N, integer NRHS, real, dimension( * ) D, complex,
       dimension( * ) E, complex, dimension( ldx, * ) X, integer LDX, complex, dimension( ldb, *
       ) B, integer LDB, real RESID)
       CPTT02

       Purpose:

            CPTT02 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:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the superdiagonal or the subdiagonal of the
                     tridiagonal matrix A is stored.
                     = 'U':  E is the superdiagonal of A
                     = 'L':  E is the subdiagonal of A

           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 COMPLEX array, dimension (N-1)
                     The (n-1) subdiagonal elements of the tridiagonal matrix A.

           X

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

       Purpose:

            CPTT05 tests the error bounds from iterative refinement for the
            computed solution to a system of equations A*X = B, where A is a
            Hermitian 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 COMPLEX array, dimension (N-1)
                     The (n-1) subdiagonal elements of the tridiagonal matrix A.

           B

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

       Purpose:

            CQLT01 tests CGEQLF, which computes the QL factorization of an m-by-n
            matrix A, and partially tests CUNGQL which forms the m-by-m
            orthogonal matrix Q.

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

           AF

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

           Q

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

           L

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

           WORK

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

       Purpose:

            CQLT02 tests CUNGQL, 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, CQLT02 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 COMPLEX array, dimension (LDA,N)
                     The m-by-n matrix A which was factorized by CQLT01.

           AF

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

           Q

                     Q is COMPLEX array, dimension (LDA,N)

           L

                     L is COMPLEX array, dimension (LDA,N)

           LDA

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

           TAU

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

           WORK

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

       Purpose:

            CQLT03 tests CUNMQL, which computes Q*C, Q'*C, C*Q or C*Q'.

            CQLT03 compares the results of a call to CUNMQL with the results of
            forming Q explicitly by a call to CUNGQL and then performing matrix
            multiplication by a call to CGEMM.

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

           C

                     C is COMPLEX array, dimension (LDA,N)

           CC

                     CC is COMPLEX array, dimension (LDA,N)

           Q

                     Q is COMPLEX array, dimension (LDA,M)

           LDA

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

           TAU

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

           WORK

                     WORK is COMPLEX 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 cqpt01 (integer M, integer N, integer K, complex, dimension( lda, * ) A,
       complex, dimension( lda, * ) AF, integer LDA, complex, dimension( * ) TAU, integer,
       dimension( * ) JPVT, complex, dimension( lwork ) WORK, integer LWORK)
       CQPT01

       Purpose:

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

           AF

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

           JPVT

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

           WORK

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

       Purpose:

            CQRT01 tests CGEQRF, which computes the QR factorization of an m-by-n
            matrix A, and partially tests CUNGQR which forms the m-by-m
            orthogonal matrix Q.

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

           AF

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

           Q

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

           R

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

           WORK

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

       Purpose:

            CQRT01P tests CGEQRFP, which computes the QR factorization of an m-by-n
            matrix A, and partially tests CUNGQR which forms the m-by-m
            orthogonal matrix Q.

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

           AF

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

           Q

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

           R

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

           WORK

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

       Purpose:

            CQRT02 tests CUNGQR, 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, CQRT02 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 COMPLEX array, dimension (LDA,N)
                     The m-by-n matrix A which was factorized by CQRT01.

           AF

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

           Q

                     Q is COMPLEX array, dimension (LDA,N)

           R

                     R is COMPLEX array, dimension (LDA,N)

           LDA

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

           TAU

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

           WORK

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

       Purpose:

            CQRT03 tests CUNMQR, which computes Q*C, Q'*C, C*Q or C*Q'.

            CQRT03 compares the results of a call to CUNMQR with the results of
            forming Q explicitly by a call to CUNGQR and then performing matrix
            multiplication by a call to CGEMM.

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

           C

                     C is COMPLEX array, dimension (LDA,N)

           CC

                     CC is COMPLEX array, dimension (LDA,N)

           Q

                     Q is COMPLEX array, dimension (LDA,M)

           LDA

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

           TAU

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

           WORK

                     WORK is COMPLEX 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 cqrt04 (integer M, integer N, integer NB, real, dimension(6) RESULT)
       CQRT04

       Purpose:

            CQRT04 tests CGEQRT and CGEMQRT.

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

       Purpose:

            CQRT05 tests CTPQRT and CTPMQRT.

       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 cqrt11 (integer M, integer K, complex, dimension( lda, * ) A, integer LDA,
       complex, dimension( * ) TAU, complex, dimension( lwork ) WORK, integer LWORK)
       CQRT11

       Purpose:

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

           WORK

                     WORK is COMPLEX 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 cqrt12 (integer M, integer N, complex, dimension( lda, * ) A, integer LDA, real,
       dimension( * ) S, complex, dimension( lwork ) WORK, integer LWORK, real, dimension( * )
       RWORK)
       CQRT12

       Purpose:

            CQRT12 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 COMPLEX 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 COMPLEX array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The length of the array WORK. LWORK >= M*N + 2*min(M,N) +
                     max(M,N).

           RWORK

                     RWORK is REAL array, dimension (4*min(M,N))

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine cqrt13 (integer SCALE, integer M, integer N, complex, dimension( lda, * ) A,
       integer LDA, real NORMA, integer, dimension( 4 ) ISEED)
       CQRT13

       Purpose:

            CQRT13 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 COMPLEX 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 cqrt14 (character TRANS, integer M, integer N, integer NRHS, complex, dimension(
       lda, * ) A, integer LDA, complex, dimension( ldx, * ) X, integer LDX, complex, dimension(
       lwork ) WORK, integer LWORK)
       CQRT14

       Purpose:

            CQRT14 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 = 'C') 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
                     = 'C':  Conjugate transpose, check for X in 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 COMPLEX array, dimension (LDA,N)
                     The M-by-N matrix A.

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.

           X

                     X is COMPLEX array, dimension (LDX,NRHS)
                     If TRANS = 'N', the N-by-NRHS matrix X.
                     IF TRANS = 'C', the M-by-NRHS matrix X.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.

           WORK

                     WORK is COMPLEX array dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     length of workspace array required
                     If TRANS = 'N', LWORK >= (M+NRHS)*(N+2);
                     if TRANS = 'C', LWORK >= (N+NRHS)*(M+2).

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine cqrt15 (integer SCALE, integer RKSEL, integer M, integer N, integer NRHS, complex,
       dimension( lda, * ) A, integer LDA, complex, dimension( ldb, * ) B, integer LDB, real,
       dimension( * ) S, integer RANK, real NORMA, real NORMB, integer, dimension( 4 ) ISEED,
       complex, dimension( lwork ) WORK, integer LWORK)
       CQRT15

       Purpose:

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

           LDA

                     LDA is INTEGER
                     The leading dimension of the array A.

           B

                     B is COMPLEX 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 norm of A.

           NORMB

                     NORMB is REAL
                     one-norm norm of B.

           ISEED

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

           WORK

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

       Purpose:

            CQRT16 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^T*x = b, where A^T is the transpose of A
                     = 'C':  A^H*x = b, where A^H is the conjugate 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 cqrt17 (character TRANS, integer IRESID, integer M, integer N, integer NRHS,
       complex, dimension( lda, * ) A, integer LDA, complex, dimension( ldx, * ) X, integer LDX,
       complex, dimension( ldb, * ) B, integer LDB, complex, dimension( ldb, * ) C, complex,
       dimension( lwork ) WORK, integer LWORK)
       CQRT17

       Purpose:

            CQRT17 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.
                     = 'C':  Conjugate 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 = 'C', 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 = 'C', 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 COMPLEX 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 COMPLEX array, dimension (LDX,NRHS)
                     If TRANS = 'N', the n-by-nrhs matrix X.
                     If TRANS = 'C', the m-by-nrhs matrix X.

           LDX

                     LDX is INTEGER
                     The leading dimension of the array X.
                     If TRANS = 'N', LDX >= N.
                     If TRANS = 'C', LDX >= M.

           B

                     B is COMPLEX array, dimension (LDB,NRHS)
                     If TRANS = 'N', the m-by-nrhs matrix B.
                     If TRANS = 'C', the n-by-nrhs matrix B.

           LDB

                     LDB is INTEGER
                     The leading dimension of the array B.
                     If TRANS = 'N', LDB >= M.
                     If TRANS = 'C', LDB >= N.

           C

                     C is COMPLEX array, dimension (LDB,NRHS)

           WORK

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

       Purpose:

            CRQT01 tests CGERQF, which computes the RQ factorization of an m-by-n
            matrix A, and partially tests CUNGRQ which forms the n-by-n
            orthogonal matrix Q.

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

           AF

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

           Q

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

           R

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

           WORK

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

       Purpose:

            CRQT02 tests CUNGRQ, 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, CRQT02 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 COMPLEX array, dimension (LDA,N)
                     The m-by-n matrix A which was factorized by CRQT01.

           AF

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

           Q

                     Q is COMPLEX array, dimension (LDA,N)

           R

                     R is COMPLEX array, dimension (LDA,M)

           LDA

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

           TAU

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

           WORK

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

       Purpose:

            CRQT03 tests CUNMRQ, which computes Q*C, Q'*C, C*Q or C*Q'.

            CRQT03 compares the results of a call to CUNMRQ with the results of
            forming Q explicitly by a call to CUNGRQ and then performing matrix
            multiplication by a call to CGEMM.

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

           C

                     C is COMPLEX array, dimension (LDA,N)

           CC

                     CC is COMPLEX array, dimension (LDA,N)

           Q

                     Q is COMPLEX array, dimension (LDA,N)

           LDA

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

           TAU

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

           WORK

                     WORK is COMPLEX 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 crzt01 (integer M, integer N, complex, dimension( lda, * ) A, complex,
       dimension( lda, * ) AF, integer LDA, complex, dimension( * ) TAU, complex, dimension(
       lwork ) WORK, integer LWORK)
       CRZT01

       Purpose:

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

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

           AF

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

           WORK

                     WORK is COMPLEX array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     The length of the array WORK.  LWORK >= m*n + m.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   real function crzt02 (integer M, integer N, complex, dimension( lda, * ) AF, integer LDA,
       complex, dimension( * ) TAU, complex, dimension( lwork ) WORK, integer LWORK)
       CRZT02

       Purpose:

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

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

           LDA

                     LDA is INTEGER
                     The leading dimension of the array AF.

           TAU

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

           WORK

                     WORK is COMPLEX array, dimension (LWORK)

           LWORK

                     LWORK is INTEGER
                     Length of WORK array. LWORK >= N*N+N.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine csbmv (character UPLO, integer N, integer K, complex ALPHA, complex, dimension(
       lda, * ) A, integer LDA, complex, dimension( * ) X, integer INCX, complex BETA, complex,
       dimension( * ) Y, integer INCY)
       CSBMV

       Purpose:

            CSBMV  performs the matrix-vector  operation

               y := alpha*A*x + beta*y,

            where alpha and beta are scalars, x and y are n element vectors and
            A is an n by n symmetric band matrix, with k super-diagonals.

             UPLO   - CHARACTER*1
                      On entry, UPLO specifies whether the upper or lower
                      triangular part of the band matrix A is being supplied as
                      follows:

                         UPLO = 'U' or 'u'   The upper triangular part of A is
                                             being supplied.

                         UPLO = 'L' or 'l'   The lower triangular part of A is
                                             being supplied.

                      Unchanged on exit.

             N      - INTEGER
                      On entry, N specifies the order of the matrix A.
                      N must be at least zero.
                      Unchanged on exit.

             K      - INTEGER
                      On entry, K specifies the number of super-diagonals of the
                      matrix A. K must satisfy  0 .le. K.
                      Unchanged on exit.

             ALPHA  - COMPLEX
                      On entry, ALPHA specifies the scalar alpha.
                      Unchanged on exit.

             A      - COMPLEX array, dimension( LDA, N )
                      Before entry with UPLO = 'U' or 'u', the leading ( k + 1 )
                      by n part of the array A must contain the upper triangular
                      band part of the symmetric matrix, supplied column by
                      column, with the leading diagonal of the matrix in row
                      ( k + 1 ) of the array, the first super-diagonal starting at
                      position 2 in row k, and so on. The top left k by k triangle
                      of the array A is not referenced.
                      The following program segment will transfer the upper
                      triangular part of a symmetric band matrix from conventional
                      full matrix storage to band storage:

                            DO 20, J = 1, N
                               M = K + 1 - J
                               DO 10, I = MAX( 1, J - K ), J
                                  A( M + I, J ) = matrix( I, J )
                         10    CONTINUE
                         20 CONTINUE

                      Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
                      by n part of the array A must contain the lower triangular
                      band part of the symmetric matrix, supplied column by
                      column, with the leading diagonal of the matrix in row 1 of
                      the array, the first sub-diagonal starting at position 1 in
                      row 2, and so on. The bottom right k by k triangle of the
                      array A is not referenced.
                      The following program segment will transfer the lower
                      triangular part of a symmetric band matrix from conventional
                      full matrix storage to band storage:

                            DO 20, J = 1, N
                               M = 1 - J
                               DO 10, I = J, MIN( N, J + K )
                                  A( M + I, J ) = matrix( I, J )
                         10    CONTINUE
                         20 CONTINUE

                      Unchanged on exit.

             LDA    - INTEGER
                      On entry, LDA specifies the first dimension of A as declared
                      in the calling (sub) program. LDA must be at least
                      ( k + 1 ).
                      Unchanged on exit.

             X      - COMPLEX array, dimension at least
                      ( 1 + ( N - 1 )*abs( INCX ) ).
                      Before entry, the incremented array X must contain the
                      vector x.
                      Unchanged on exit.

             INCX   - INTEGER
                      On entry, INCX specifies the increment for the elements of
                      X. INCX must not be zero.
                      Unchanged on exit.

             BETA   - COMPLEX
                      On entry, BETA specifies the scalar beta.
                      Unchanged on exit.

             Y      - COMPLEX array, dimension at least
                      ( 1 + ( N - 1 )*abs( INCY ) ).
                      Before entry, the incremented array Y must contain the
                      vector y. On exit, Y is overwritten by the updated vector y.

             INCY   - INTEGER
                      On entry, INCY specifies the increment for the elements of
                      Y. INCY must not be zero.
                      Unchanged on exit.

       Author:
           Univ. of Tennessee

           Univ. of California Berkeley

           Univ. of Colorado Denver

           NAG Ltd.

       Date:
           November 2011

   subroutine cspt01 (character UPLO, integer N, complex, dimension( * ) A, complex, dimension( *
       ) AFAC, integer, dimension( * ) IPIV, complex, dimension( ldc, * ) C, integer LDC, real,
       dimension( * ) RWORK, real RESID)
       CSPT01

       Purpose:

            CSPT01 reconstructs a symmetric indefinite packed matrix A from its
            diagonal pivoting factorization A = U*D*U' or A = L*D*L' 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
                     Hermitian matrix A is stored:
                     = 'U':  Upper triangular
                     = 'L':  Lower triangular

           N

                     N is INTEGER
                     The order of the matrix A.  N >= 0.

           A

                     A is COMPLEX array, dimension (N*(N+1)/2)
                     The original symmetric matrix A, stored as a packed
                     triangular matrix.

           AFAC

                     AFAC is COMPLEX 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
                     L*D*L' or U*D*U' factorization as computed by CSPTRF.

           IPIV

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

           C

                     C is COMPLEX 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 cspt02 (character UPLO, integer N, integer NRHS, complex, dimension( * ) A,
       complex, dimension( ldx, * ) X, integer LDX, complex, dimension( ldb, * ) B, integer LDB,
       real, dimension( * ) RWORK, real RESID)
       CSPT02

       Purpose:

            CSPT02 computes the residual in the solution of a complex 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
                     complex 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 COMPLEX array, dimension (N*(N+1)/2)
                     The original complex symmetric matrix A, stored as a packed
                     triangular matrix.

           X

                     X is COMPLEX 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 COMPLEX 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 cspt03 (character UPLO, integer N, complex, dimension( * ) A, complex, dimension( *
       ) AINV, complex, dimension( ldw, * ) WORK, integer LDW, real, dimension( * ) RWORK, real
       RCOND, real RESID)
       CSPT03

       Purpose:

            CSPT03 computes the residual for a complex 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
                     complex 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 COMPLEX array, dimension (N*(N+1)/2)
                     The original complex symmetric matrix A, stored as a packed
                     triangular matrix.

           AINV

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

           WORK

                     WORK is COMPLEX array, dimension (LDW,N)

           LDW

                     LDW is INTEGER
                     The leading dimension of the array WORK.  LDW >= 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 csyt01 (character UPLO, integer N, complex, dimension( lda, * ) A, integer LDA,
       complex, dimension( ldafac, * ) AFAC, integer LDAFAC, integer, dimension( * ) IPIV,
       complex, dimension( ldc, * ) C, integer LDC, real, dimension( * ) RWORK, real RESID)
       CSYT01

       Purpose:

            CSYT01 reconstructs a complex 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, EPS is the machine epsilon,
            L' is the transpose of L, and U' is the transpose of U.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     complex 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 COMPLEX array, dimension (LDA,N)
                     The original complex symmetric matrix A.

           LDA

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

           AFAC

                     AFAC is COMPLEX 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 CSYTRF.

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

           C

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

       Purpose:

            CSYT01_ROOK reconstructs a complex 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, EPS is the machine epsilon,
            L' is the transpose of L, and U' is the transpose of U.

       Parameters:
           UPLO

                     UPLO is CHARACTER*1
                     Specifies whether the upper or lower triangular part of the
                     complex 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 COMPLEX array, dimension (LDA,N)
                     The original complex symmetric matrix A.

           LDA

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

           AFAC

                     AFAC is COMPLEX 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 CSYTRF_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 CSYTRF_ROOK.

           C

                     C is COMPLEX 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 csyt02 (character UPLO, integer N, integer NRHS, complex, dimension( lda, * ) A,
       integer LDA, complex, dimension( ldx, * ) X, integer LDX, complex, dimension( ldb, * ) B,
       integer LDB, real, dimension( * ) RWORK, real RESID)
       CSYT02

       Purpose:

            CSYT02 computes the residual for a solution to a complex 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 COMPLEX array, dimension (LDA,N)
                     The original complex symmetric matrix A.

           LDA

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

           X

                     X is COMPLEX 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 COMPLEX 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 csyt03 (character UPLO, integer N, complex, dimension( lda, * ) A, integer LDA,
       complex, dimension( ldainv, * ) AINV, integer LDAINV, complex, dimension( ldwork, * )
       WORK, integer LDWORK, real, dimension( * ) RWORK, real RCOND, real RESID)
       CSYT03

       Purpose:

            CSYT03 computes the residual for a complex 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
                     complex 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 COMPLEX array, dimension (LDA,N)
                     The original complex symmetric matrix A.

           LDA

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

           AINV

                     AINV is COMPLEX 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 COMPLEX 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
                     RCOND = 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 ctbt02 (character UPLO, character TRANS, character DIAG, integer N, integer KD,
       integer NRHS, complex, dimension( ldab, * ) AB, integer LDAB, complex, dimension( ldx, * )
       X, integer LDX, complex, dimension( ldb, * ) B, integer LDB, complex, dimension( * ) WORK,
       real, dimension( * ) RWORK, real RESID)
       CTBT02

       Purpose:

            CTBT02 computes the residual for the computed solution to a
            triangular system of linear equations  A*x = b,  A**T *x = b,  or
            A**H *x = b  when A is a triangular band matrix.  Here A**T denotes
            the transpose of A, A**H denotes the conjugate 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, A**T, or A**H, 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**T *x = b  (Transpose)
                     = 'C':  A**H *x = b  (Conjugate 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 COMPLEX array, dimension (LDA,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 >= max(1,KD+1).

           X

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

           RWORK

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

       Purpose:

            CTBT03 computes the residual for the solution to a scaled triangular
            system of equations  A*x = s*b,  A**T *x = s*b,  or  A**H *x = s*b
            when A is a triangular band matrix.  Here A**T  denotes the transpose
            of A, A**H denotes the conjugate 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, A**T, or A**H, 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**T *x = s*b  (Transpose)
                     = 'C':  A**H *x = s*b  (Conjugate 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 ctbt05 (character UPLO, character TRANS, character DIAG, integer N, integer KD,
       integer NRHS, complex, dimension( ldab, * ) AB, integer LDAB, complex, dimension( ldb, * )
       B, integer LDB, complex, dimension( ldx, * ) X, integer LDX, complex, dimension( ldxact, *
       ) XACT, integer LDXACT, real, dimension( * ) FERR, real, dimension( * ) BERR, real,
       dimension( * ) RESLTS)
       CTBT05

       Purpose:

            CTBT05 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 ctbt06 (real RCOND, real RCONDC, character UPLO, character DIAG, integer N, integer
       KD, complex, dimension( ldab, * ) AB, integer LDAB, real, dimension( * ) RWORK, real RAT)
       CTBT06

       Purpose:

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

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

           RWORK

                     RWORK 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 ctpt01 (character UPLO, character DIAG, integer N, complex, dimension( * ) AP,
       complex, dimension( * ) AINVP, real RCOND, real, dimension( * ) RWORK, real RESID)
       CTPT01

       Purpose:

            CTPT01 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 COMPLEX 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 COMPLEX 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)).

           RWORK

                     RWORK 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 ctpt02 (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       complex, dimension( * ) AP, complex, dimension( ldx, * ) X, integer LDX, complex,
       dimension( ldb, * ) B, integer LDB, complex, dimension( * ) WORK, real, dimension( * )
       RWORK, real RESID)
       CTPT02

       Purpose:

            CTPT02 computes the residual for the computed solution to a
            triangular system of linear equations  A*x = b,  A**T *x = b,  or
            A**H *x = b, when the triangular matrix A is stored in packed format.
            Here A**T denotes the transpose of A, A**H denotes the conjugate
            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
            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, A**T, or A**H, 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**T *x = b  (Transpose)
                     = 'C':  A**H *x = b  (Conjugate 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 COMPLEX array, dimension (N)

           RWORK

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

       Purpose:

            CTPT03 computes the residual for the solution to a scaled triangular
            system of equations A*x = s*b,  A**T *x = s*b,  or  A**H *x = s*b,
            when the triangular matrix A is stored in packed format.  Here A**T
            denotes the transpose of A, A**H denotes the conjugate 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, A**T, or A**H, 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**T *x = s*b  (Transpose)
                     = 'C':  A**H *x = s*b  (Conjugate 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 ctpt05 (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       complex, dimension( * ) AP, complex, dimension( ldb, * ) B, integer LDB, complex,
       dimension( ldx, * ) X, integer LDX, complex, dimension( ldxact, * ) XACT, integer LDXACT,
       real, dimension( * ) FERR, real, dimension( * ) BERR, real, dimension( * ) RESLTS)
       CTPT05

       Purpose:

            CTPT05 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 ctpt06 (real RCOND, real RCONDC, character UPLO, character DIAG, integer N,
       complex, dimension( * ) AP, real, dimension( * ) RWORK, real RAT)
       CTPT06

       Purpose:

            CTPT06 computes a test ratio comparing RCOND (the reciprocal
            condition number of the triangular matrix A) and RCONDC, the estimate
            computed by CTPCON.  Information about the triangular matrix 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
                     CTPCON.

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

           RWORK

                     RWORK 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 ctrt01 (character UPLO, character DIAG, integer N, complex, dimension( lda, * ) A,
       integer LDA, complex, dimension( ldainv, * ) AINV, integer LDAINV, real RCOND, real,
       dimension( * ) RWORK, real RESID)
       CTRT01

       Purpose:

            CTRT01 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 COMPLEX 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 COMPLEX 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)).

           RWORK

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

       Purpose:

            CTRT02 computes the residual for the computed solution to a
            triangular system of linear equations  A*x = b,  A**T *x = b,
            or A**H *x = b.  Here A is a triangular matrix, A**T is the transpose
            of A, A**H is the conjugate 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, A**T, or A**H, 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**T *x = b  (Transpose)
                     = 'C':  A**H *x = b  (Conjugate 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 COMPLEX array, dimension (N)

           RWORK

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

       Purpose:

            CTRT03 computes the residual for the solution to a scaled triangular
            system of equations A*x = s*b,  A**T *x = s*b,  or  A**H *x = s*b.
            Here A is a triangular matrix, A**T denotes the transpose of A, A**H
            denotes the conjugate 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, A**T, or A**H, 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**T *x = s*b  (Transpose)
                     = 'C':  A**H *x = s*b  (Conjugate 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 ctrt05 (character UPLO, character TRANS, character DIAG, integer N, integer NRHS,
       complex, dimension( lda, * ) A, integer LDA, complex, dimension( ldb, * ) B, integer LDB,
       complex, dimension( ldx, * ) X, integer LDX, complex, dimension( ldxact, * ) XACT, integer
       LDXACT, real, dimension( * ) FERR, real, dimension( * ) BERR, real, dimension( * ) RESLTS)
       CTRT05

       Purpose:

            CTRT05 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 COMPLEX 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 ctrt06 (real RCOND, real RCONDC, character UPLO, character DIAG, integer N,
       complex, dimension( lda, * ) A, integer LDA, real, dimension( * ) RWORK, real RAT)
       CTRT06

       Purpose:

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

           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 COMPLEX 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).

           RWORK

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