LAPACK 3.3.0

cerrhs.f

Go to the documentation of this file.
00001       SUBROUTINE CERRHS( PATH, NUNIT )
00002 *
00003 *  -- LAPACK test routine (version 3.1) --
00004 *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
00005 *     November 2006
00006 *
00007 *     .. Scalar Arguments ..
00008       CHARACTER*3        PATH
00009       INTEGER            NUNIT
00010 *     ..
00011 *
00012 *  Purpose
00013 *  =======
00014 *
00015 *  CERRHS tests the error exits for CGEBAK, CGEBAL, CGEHRD, CUNGHR,
00016 *  CUNMHR, CHSEQR, CHSEIN, and CTREVC.
00017 *
00018 *  Arguments
00019 *  =========
00020 *
00021 *  PATH    (input) CHARACTER*3
00022 *          The LAPACK path name for the routines to be tested.
00023 *
00024 *  NUNIT   (input) INTEGER
00025 *          The unit number for output.
00026 *
00027 *  =====================================================================
00028 *
00029 *     .. Parameters ..
00030       INTEGER            NMAX, LW
00031       PARAMETER          ( NMAX = 3, LW = NMAX*NMAX )
00032 *     ..
00033 *     .. Local Scalars ..
00034       CHARACTER*2        C2
00035       INTEGER            I, IHI, ILO, INFO, J, M, NT
00036 *     ..
00037 *     .. Local Arrays ..
00038       LOGICAL            SEL( NMAX )
00039       INTEGER            IFAILL( NMAX ), IFAILR( NMAX )
00040       REAL               RW( NMAX ), S( NMAX )
00041       COMPLEX            A( NMAX, NMAX ), C( NMAX, NMAX ), TAU( NMAX ),
00042      $                   VL( NMAX, NMAX ), VR( NMAX, NMAX ), W( LW ),
00043      $                   X( NMAX )
00044 *     ..
00045 *     .. External Functions ..
00046       LOGICAL            LSAMEN
00047       EXTERNAL           LSAMEN
00048 *     ..
00049 *     .. External Subroutines ..
00050       EXTERNAL           CHKXER, CGEBAK, CGEBAL, CGEHRD, CHSEIN, CHSEQR,
00051      $                   CUNGHR, CUNMHR, CTREVC
00052 *     ..
00053 *     .. Intrinsic Functions ..
00054       INTRINSIC          REAL
00055 *     ..
00056 *     .. Scalars in Common ..
00057       LOGICAL            LERR, OK
00058       CHARACTER*32       SRNAMT
00059       INTEGER            INFOT, NOUT
00060 *     ..
00061 *     .. Common blocks ..
00062       COMMON             / INFOC / INFOT, NOUT, OK, LERR
00063       COMMON             / SRNAMC / SRNAMT
00064 *     ..
00065 *     .. Executable Statements ..
00066 *
00067       NOUT = NUNIT
00068       WRITE( NOUT, FMT = * )
00069       C2 = PATH( 2: 3 )
00070 *
00071 *     Set the variables to innocuous values.
00072 *
00073       DO 20 J = 1, NMAX
00074          DO 10 I = 1, NMAX
00075             A( I, J ) = 1. / REAL( I+J )
00076    10    CONTINUE
00077          SEL( J ) = .TRUE.
00078    20 CONTINUE
00079       OK = .TRUE.
00080       NT = 0
00081 *
00082 *     Test error exits of the nonsymmetric eigenvalue routines.
00083 *
00084       IF( LSAMEN( 2, C2, 'HS' ) ) THEN
00085 *
00086 *        CGEBAL
00087 *
00088          SRNAMT = 'CGEBAL'
00089          INFOT = 1
00090          CALL CGEBAL( '/', 0, A, 1, ILO, IHI, S, INFO )
00091          CALL CHKXER( 'CGEBAL', INFOT, NOUT, LERR, OK )
00092          INFOT = 2
00093          CALL CGEBAL( 'N', -1, A, 1, ILO, IHI, S, INFO )
00094          CALL CHKXER( 'CGEBAL', INFOT, NOUT, LERR, OK )
00095          INFOT = 4
00096          CALL CGEBAL( 'N', 2, A, 1, ILO, IHI, S, INFO )
00097          CALL CHKXER( 'CGEBAL', INFOT, NOUT, LERR, OK )
00098          NT = NT + 3
00099 *
00100 *        CGEBAK
00101 *
00102          SRNAMT = 'CGEBAK'
00103          INFOT = 1
00104          CALL CGEBAK( '/', 'R', 0, 1, 0, S, 0, A, 1, INFO )
00105          CALL CHKXER( 'CGEBAK', INFOT, NOUT, LERR, OK )
00106          INFOT = 2
00107          CALL CGEBAK( 'N', '/', 0, 1, 0, S, 0, A, 1, INFO )
00108          CALL CHKXER( 'CGEBAK', INFOT, NOUT, LERR, OK )
00109          INFOT = 3
00110          CALL CGEBAK( 'N', 'R', -1, 1, 0, S, 0, A, 1, INFO )
00111          CALL CHKXER( 'CGEBAK', INFOT, NOUT, LERR, OK )
00112          INFOT = 4
00113          CALL CGEBAK( 'N', 'R', 0, 0, 0, S, 0, A, 1, INFO )
00114          CALL CHKXER( 'CGEBAK', INFOT, NOUT, LERR, OK )
00115          INFOT = 4
00116          CALL CGEBAK( 'N', 'R', 0, 2, 0, S, 0, A, 1, INFO )
00117          CALL CHKXER( 'CGEBAK', INFOT, NOUT, LERR, OK )
00118          INFOT = 5
00119          CALL CGEBAK( 'N', 'R', 2, 2, 1, S, 0, A, 2, INFO )
00120          CALL CHKXER( 'CGEBAK', INFOT, NOUT, LERR, OK )
00121          INFOT = 5
00122          CALL CGEBAK( 'N', 'R', 0, 1, 1, S, 0, A, 1, INFO )
00123          CALL CHKXER( 'CGEBAK', INFOT, NOUT, LERR, OK )
00124          INFOT = 7
00125          CALL CGEBAK( 'N', 'R', 0, 1, 0, S, -1, A, 1, INFO )
00126          CALL CHKXER( 'CGEBAK', INFOT, NOUT, LERR, OK )
00127          INFOT = 9
00128          CALL CGEBAK( 'N', 'R', 2, 1, 2, S, 0, A, 1, INFO )
00129          CALL CHKXER( 'CGEBAK', INFOT, NOUT, LERR, OK )
00130          NT = NT + 9
00131 *
00132 *        CGEHRD
00133 *
00134          SRNAMT = 'CGEHRD'
00135          INFOT = 1
00136          CALL CGEHRD( -1, 1, 1, A, 1, TAU, W, 1, INFO )
00137          CALL CHKXER( 'CGEHRD', INFOT, NOUT, LERR, OK )
00138          INFOT = 2
00139          CALL CGEHRD( 0, 0, 0, A, 1, TAU, W, 1, INFO )
00140          CALL CHKXER( 'CGEHRD', INFOT, NOUT, LERR, OK )
00141          INFOT = 2
00142          CALL CGEHRD( 0, 2, 0, A, 1, TAU, W, 1, INFO )
00143          CALL CHKXER( 'CGEHRD', INFOT, NOUT, LERR, OK )
00144          INFOT = 3
00145          CALL CGEHRD( 1, 1, 0, A, 1, TAU, W, 1, INFO )
00146          CALL CHKXER( 'CGEHRD', INFOT, NOUT, LERR, OK )
00147          INFOT = 3
00148          CALL CGEHRD( 0, 1, 1, A, 1, TAU, W, 1, INFO )
00149          CALL CHKXER( 'CGEHRD', INFOT, NOUT, LERR, OK )
00150          INFOT = 5
00151          CALL CGEHRD( 2, 1, 1, A, 1, TAU, W, 2, INFO )
00152          CALL CHKXER( 'CGEHRD', INFOT, NOUT, LERR, OK )
00153          INFOT = 8
00154          CALL CGEHRD( 2, 1, 2, A, 2, TAU, W, 1, INFO )
00155          CALL CHKXER( 'CGEHRD', INFOT, NOUT, LERR, OK )
00156          NT = NT + 7
00157 *
00158 *        CUNGHR
00159 *
00160          SRNAMT = 'CUNGHR'
00161          INFOT = 1
00162          CALL CUNGHR( -1, 1, 1, A, 1, TAU, W, 1, INFO )
00163          CALL CHKXER( 'CUNGHR', INFOT, NOUT, LERR, OK )
00164          INFOT = 2
00165          CALL CUNGHR( 0, 0, 0, A, 1, TAU, W, 1, INFO )
00166          CALL CHKXER( 'CUNGHR', INFOT, NOUT, LERR, OK )
00167          INFOT = 2
00168          CALL CUNGHR( 0, 2, 0, A, 1, TAU, W, 1, INFO )
00169          CALL CHKXER( 'CUNGHR', INFOT, NOUT, LERR, OK )
00170          INFOT = 3
00171          CALL CUNGHR( 1, 1, 0, A, 1, TAU, W, 1, INFO )
00172          CALL CHKXER( 'CUNGHR', INFOT, NOUT, LERR, OK )
00173          INFOT = 3
00174          CALL CUNGHR( 0, 1, 1, A, 1, TAU, W, 1, INFO )
00175          CALL CHKXER( 'CUNGHR', INFOT, NOUT, LERR, OK )
00176          INFOT = 5
00177          CALL CUNGHR( 2, 1, 1, A, 1, TAU, W, 1, INFO )
00178          CALL CHKXER( 'CUNGHR', INFOT, NOUT, LERR, OK )
00179          INFOT = 8
00180          CALL CUNGHR( 3, 1, 3, A, 3, TAU, W, 1, INFO )
00181          CALL CHKXER( 'CUNGHR', INFOT, NOUT, LERR, OK )
00182          NT = NT + 7
00183 *
00184 *        CUNMHR
00185 *
00186          SRNAMT = 'CUNMHR'
00187          INFOT = 1
00188          CALL CUNMHR( '/', 'N', 0, 0, 1, 0, A, 1, TAU, C, 1, W, 1,
00189      $                INFO )
00190          CALL CHKXER( 'CUNMHR', INFOT, NOUT, LERR, OK )
00191          INFOT = 2
00192          CALL CUNMHR( 'L', '/', 0, 0, 1, 0, A, 1, TAU, C, 1, W, 1,
00193      $                INFO )
00194          CALL CHKXER( 'CUNMHR', INFOT, NOUT, LERR, OK )
00195          INFOT = 3
00196          CALL CUNMHR( 'L', 'N', -1, 0, 1, 0, A, 1, TAU, C, 1, W, 1,
00197      $                INFO )
00198          CALL CHKXER( 'CUNMHR', INFOT, NOUT, LERR, OK )
00199          INFOT = 4
00200          CALL CUNMHR( 'L', 'N', 0, -1, 1, 0, A, 1, TAU, C, 1, W, 1,
00201      $                INFO )
00202          CALL CHKXER( 'CUNMHR', INFOT, NOUT, LERR, OK )
00203          INFOT = 5
00204          CALL CUNMHR( 'L', 'N', 0, 0, 0, 0, A, 1, TAU, C, 1, W, 1,
00205      $                INFO )
00206          CALL CHKXER( 'CUNMHR', INFOT, NOUT, LERR, OK )
00207          INFOT = 5
00208          CALL CUNMHR( 'L', 'N', 0, 0, 2, 0, A, 1, TAU, C, 1, W, 1,
00209      $                INFO )
00210          CALL CHKXER( 'CUNMHR', INFOT, NOUT, LERR, OK )
00211          INFOT = 5
00212          CALL CUNMHR( 'L', 'N', 1, 2, 2, 1, A, 1, TAU, C, 1, W, 2,
00213      $                INFO )
00214          CALL CHKXER( 'CUNMHR', INFOT, NOUT, LERR, OK )
00215          INFOT = 5
00216          CALL CUNMHR( 'R', 'N', 2, 1, 2, 1, A, 1, TAU, C, 2, W, 2,
00217      $                INFO )
00218          CALL CHKXER( 'CUNMHR', INFOT, NOUT, LERR, OK )
00219          INFOT = 6
00220          CALL CUNMHR( 'L', 'N', 1, 1, 1, 0, A, 1, TAU, C, 1, W, 1,
00221      $                INFO )
00222          CALL CHKXER( 'CUNMHR', INFOT, NOUT, LERR, OK )
00223          INFOT = 6
00224          CALL CUNMHR( 'L', 'N', 0, 1, 1, 1, A, 1, TAU, C, 1, W, 1,
00225      $                INFO )
00226          CALL CHKXER( 'CUNMHR', INFOT, NOUT, LERR, OK )
00227          INFOT = 6
00228          CALL CUNMHR( 'R', 'N', 1, 0, 1, 1, A, 1, TAU, C, 1, W, 1,
00229      $                INFO )
00230          CALL CHKXER( 'CUNMHR', INFOT, NOUT, LERR, OK )
00231          INFOT = 8
00232          CALL CUNMHR( 'L', 'N', 2, 1, 1, 1, A, 1, TAU, C, 2, W, 1,
00233      $                INFO )
00234          CALL CHKXER( 'CUNMHR', INFOT, NOUT, LERR, OK )
00235          INFOT = 8
00236          CALL CUNMHR( 'R', 'N', 1, 2, 1, 1, A, 1, TAU, C, 1, W, 1,
00237      $                INFO )
00238          CALL CHKXER( 'CUNMHR', INFOT, NOUT, LERR, OK )
00239          INFOT = 11
00240          CALL CUNMHR( 'L', 'N', 2, 1, 1, 1, A, 2, TAU, C, 1, W, 1,
00241      $                INFO )
00242          CALL CHKXER( 'CUNMHR', INFOT, NOUT, LERR, OK )
00243          INFOT = 13
00244          CALL CUNMHR( 'L', 'N', 1, 2, 1, 1, A, 1, TAU, C, 1, W, 1,
00245      $                INFO )
00246          CALL CHKXER( 'CUNMHR', INFOT, NOUT, LERR, OK )
00247          INFOT = 13
00248          CALL CUNMHR( 'R', 'N', 2, 1, 1, 1, A, 1, TAU, C, 2, W, 1,
00249      $                INFO )
00250          CALL CHKXER( 'CUNMHR', INFOT, NOUT, LERR, OK )
00251          NT = NT + 16
00252 *
00253 *        CHSEQR
00254 *
00255          SRNAMT = 'CHSEQR'
00256          INFOT = 1
00257          CALL CHSEQR( '/', 'N', 0, 1, 0, A, 1, X, C, 1, W, 1,
00258      $                INFO )
00259          CALL CHKXER( 'CHSEQR', INFOT, NOUT, LERR, OK )
00260          INFOT = 2
00261          CALL CHSEQR( 'E', '/', 0, 1, 0, A, 1, X, C, 1, W, 1,
00262      $                INFO )
00263          CALL CHKXER( 'CHSEQR', INFOT, NOUT, LERR, OK )
00264          INFOT = 3
00265          CALL CHSEQR( 'E', 'N', -1, 1, 0, A, 1, X, C, 1, W, 1,
00266      $                INFO )
00267          CALL CHKXER( 'CHSEQR', INFOT, NOUT, LERR, OK )
00268          INFOT = 4
00269          CALL CHSEQR( 'E', 'N', 0, 0, 0, A, 1, X, C, 1, W, 1,
00270      $                INFO )
00271          CALL CHKXER( 'CHSEQR', INFOT, NOUT, LERR, OK )
00272          INFOT = 4
00273          CALL CHSEQR( 'E', 'N', 0, 2, 0, A, 1, X, C, 1, W, 1,
00274      $                INFO )
00275          CALL CHKXER( 'CHSEQR', INFOT, NOUT, LERR, OK )
00276          INFOT = 5
00277          CALL CHSEQR( 'E', 'N', 1, 1, 0, A, 1, X, C, 1, W, 1,
00278      $                INFO )
00279          CALL CHKXER( 'CHSEQR', INFOT, NOUT, LERR, OK )
00280          INFOT = 5
00281          CALL CHSEQR( 'E', 'N', 1, 1, 2, A, 1, X, C, 1, W, 1,
00282      $                INFO )
00283          CALL CHKXER( 'CHSEQR', INFOT, NOUT, LERR, OK )
00284          INFOT = 7
00285          CALL CHSEQR( 'E', 'N', 2, 1, 2, A, 1, X, C, 2, W, 1,
00286      $                INFO )
00287          CALL CHKXER( 'CHSEQR', INFOT, NOUT, LERR, OK )
00288          INFOT = 10
00289          CALL CHSEQR( 'E', 'V', 2, 1, 2, A, 2, X, C, 1, W, 1,
00290      $                INFO )
00291          CALL CHKXER( 'CHSEQR', INFOT, NOUT, LERR, OK )
00292          NT = NT + 9
00293 *
00294 *        CHSEIN
00295 *
00296          SRNAMT = 'CHSEIN'
00297          INFOT = 1
00298          CALL CHSEIN( '/', 'N', 'N', SEL, 0, A, 1, X, VL, 1, VR, 1,
00299      $                0, M, W, RW, IFAILL, IFAILR, INFO )
00300          CALL CHKXER( 'CHSEIN', INFOT, NOUT, LERR, OK )
00301          INFOT = 2
00302          CALL CHSEIN( 'R', '/', 'N', SEL, 0, A, 1, X, VL, 1, VR, 1,
00303      $                0, M, W, RW, IFAILL, IFAILR, INFO )
00304          CALL CHKXER( 'CHSEIN', INFOT, NOUT, LERR, OK )
00305          INFOT = 3
00306          CALL CHSEIN( 'R', 'N', '/', SEL, 0, A, 1, X, VL, 1, VR, 1,
00307      $                0, M, W, RW, IFAILL, IFAILR, INFO )
00308          CALL CHKXER( 'CHSEIN', INFOT, NOUT, LERR, OK )
00309          INFOT = 5
00310          CALL CHSEIN( 'R', 'N', 'N', SEL, -1, A, 1, X, VL, 1, VR,
00311      $                1, 0, M, W, RW, IFAILL, IFAILR, INFO )
00312          CALL CHKXER( 'CHSEIN', INFOT, NOUT, LERR, OK )
00313          INFOT = 7
00314          CALL CHSEIN( 'R', 'N', 'N', SEL, 2, A, 1, X, VL, 1, VR, 2,
00315      $                4, M, W, RW, IFAILL, IFAILR, INFO )
00316          CALL CHKXER( 'CHSEIN', INFOT, NOUT, LERR, OK )
00317          INFOT = 10
00318          CALL CHSEIN( 'L', 'N', 'N', SEL, 2, A, 2, X, VL, 1, VR, 1,
00319      $                4, M, W, RW, IFAILL, IFAILR, INFO )
00320          CALL CHKXER( 'CHSEIN', INFOT, NOUT, LERR, OK )
00321          INFOT = 12
00322          CALL CHSEIN( 'R', 'N', 'N', SEL, 2, A, 2, X, VL, 1, VR, 1,
00323      $                4, M, W, RW, IFAILL, IFAILR, INFO )
00324          CALL CHKXER( 'CHSEIN', INFOT, NOUT, LERR, OK )
00325          INFOT = 13
00326          CALL CHSEIN( 'R', 'N', 'N', SEL, 2, A, 2, X, VL, 1, VR, 2,
00327      $                1, M, W, RW, IFAILL, IFAILR, INFO )
00328          CALL CHKXER( 'CHSEIN', INFOT, NOUT, LERR, OK )
00329          NT = NT + 8
00330 *
00331 *        CTREVC
00332 *
00333          SRNAMT = 'CTREVC'
00334          INFOT = 1
00335          CALL CTREVC( '/', 'A', SEL, 0, A, 1, VL, 1, VR, 1, 0, M, W,
00336      $                RW, INFO )
00337          CALL CHKXER( 'CTREVC', INFOT, NOUT, LERR, OK )
00338          INFOT = 2
00339          CALL CTREVC( 'L', '/', SEL, 0, A, 1, VL, 1, VR, 1, 0, M, W,
00340      $                RW, INFO )
00341          CALL CHKXER( 'CTREVC', INFOT, NOUT, LERR, OK )
00342          INFOT = 4
00343          CALL CTREVC( 'L', 'A', SEL, -1, A, 1, VL, 1, VR, 1, 0, M, W,
00344      $                RW, INFO )
00345          CALL CHKXER( 'CTREVC', INFOT, NOUT, LERR, OK )
00346          INFOT = 6
00347          CALL CTREVC( 'L', 'A', SEL, 2, A, 1, VL, 2, VR, 1, 4, M, W,
00348      $                RW, INFO )
00349          CALL CHKXER( 'CTREVC', INFOT, NOUT, LERR, OK )
00350          INFOT = 8
00351          CALL CTREVC( 'L', 'A', SEL, 2, A, 2, VL, 1, VR, 1, 4, M, W,
00352      $                RW, INFO )
00353          CALL CHKXER( 'CTREVC', INFOT, NOUT, LERR, OK )
00354          INFOT = 10
00355          CALL CTREVC( 'R', 'A', SEL, 2, A, 2, VL, 1, VR, 1, 4, M, W,
00356      $                RW, INFO )
00357          CALL CHKXER( 'CTREVC', INFOT, NOUT, LERR, OK )
00358          INFOT = 11
00359          CALL CTREVC( 'L', 'A', SEL, 2, A, 2, VL, 2, VR, 1, 1, M, W,
00360      $                RW, INFO )
00361          CALL CHKXER( 'CTREVC', INFOT, NOUT, LERR, OK )
00362          NT = NT + 7
00363       END IF
00364 *
00365 *     Print a summary line.
00366 *
00367       IF( OK ) THEN
00368          WRITE( NOUT, FMT = 9999 )PATH, NT
00369       ELSE
00370          WRITE( NOUT, FMT = 9998 )PATH
00371       END IF
00372 *
00373  9999 FORMAT( 1X, A3, ' routines passed the tests of the error exits',
00374      $      ' (', I3, ' tests done)' )
00375  9998 FORMAT( ' *** ', A3, ' routines failed the tests of the error ',
00376      $      'exits ***' )
00377 *
00378       RETURN
00379 *
00380 *     End of CERRHS
00381 *
00382       END
 All Files Functions