LAPACK 3.3.0

derred.f

Go to the documentation of this file.
00001       SUBROUTINE DERRED( 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 *  DERRED tests the error exits for the eigenvalue driver routines for
00016 *  DOUBLE PRECISION matrices:
00017 *
00018 *  PATH  driver   description
00019 *  ----  ------   -----------
00020 *  SEV   DGEEV    find eigenvalues/eigenvectors for nonsymmetric A
00021 *  SES   DGEES    find eigenvalues/Schur form for nonsymmetric A
00022 *  SVX   DGEEVX   SGEEV + balancing and condition estimation
00023 *  SSX   DGEESX   SGEES + balancing and condition estimation
00024 *  DBD   DGESVD   compute SVD of an M-by-N matrix A
00025 *        DGESDD   compute SVD of an M-by-N matrix A (by divide and
00026 *                 conquer)
00027 *
00028 *  Arguments
00029 *  =========
00030 *
00031 *  PATH    (input) CHARACTER*3
00032 *          The LAPACK path name for the routines to be tested.
00033 *
00034 *  NUNIT   (input) INTEGER
00035 *          The unit number for output.
00036 *
00037 *  =====================================================================
00038 *
00039 *     .. Parameters ..
00040       INTEGER            NMAX
00041       DOUBLE PRECISION   ONE, ZERO
00042       PARAMETER          ( NMAX = 4, ONE = 1.0D0, ZERO = 0.0D0 )
00043 *     ..
00044 *     .. Local Scalars ..
00045       CHARACTER*2        C2
00046       INTEGER            I, IHI, ILO, INFO, J, NT, SDIM
00047       DOUBLE PRECISION   ABNRM
00048 *     ..
00049 *     .. Local Arrays ..
00050       LOGICAL            B( NMAX )
00051       INTEGER            IW( 2*NMAX )
00052       DOUBLE PRECISION   A( NMAX, NMAX ), R1( NMAX ), R2( NMAX ),
00053      $                   S( NMAX ), U( NMAX, NMAX ), VL( NMAX, NMAX ),
00054      $                   VR( NMAX, NMAX ), VT( NMAX, NMAX ),
00055      $                   W( 4*NMAX ), WI( NMAX ), WR( NMAX )
00056 *     ..
00057 *     .. External Subroutines ..
00058       EXTERNAL           CHKXER, DGEES, DGEESX, DGEEV, DGEEVX, DGESDD,
00059      $                   DGESVD
00060 *     ..
00061 *     .. External Functions ..
00062       LOGICAL            DSLECT, LSAMEN
00063       EXTERNAL           DSLECT, LSAMEN
00064 *     ..
00065 *     .. Intrinsic Functions ..
00066       INTRINSIC          LEN_TRIM
00067 *     ..
00068 *     .. Arrays in Common ..
00069       LOGICAL            SELVAL( 20 )
00070       DOUBLE PRECISION   SELWI( 20 ), SELWR( 20 )
00071 *     ..
00072 *     .. Scalars in Common ..
00073       LOGICAL            LERR, OK
00074       CHARACTER*32       SRNAMT
00075       INTEGER            INFOT, NOUT, SELDIM, SELOPT
00076 *     ..
00077 *     .. Common blocks ..
00078       COMMON             / INFOC / INFOT, NOUT, OK, LERR
00079       COMMON             / SRNAMC / SRNAMT
00080       COMMON             / SSLCT / SELOPT, SELDIM, SELVAL, SELWR, SELWI
00081 *     ..
00082 *     .. Executable Statements ..
00083 *
00084       NOUT = NUNIT
00085       WRITE( NOUT, FMT = * )
00086       C2 = PATH( 2: 3 )
00087 *
00088 *     Initialize A
00089 *
00090       DO 20 J = 1, NMAX
00091          DO 10 I = 1, NMAX
00092             A( I, J ) = ZERO
00093    10    CONTINUE
00094    20 CONTINUE
00095       DO 30 I = 1, NMAX
00096          A( I, I ) = ONE
00097    30 CONTINUE
00098       OK = .TRUE.
00099       NT = 0
00100 *
00101       IF( LSAMEN( 2, C2, 'EV' ) ) THEN
00102 *
00103 *        Test DGEEV
00104 *
00105          SRNAMT = 'DGEEV '
00106          INFOT = 1
00107          CALL DGEEV( 'X', 'N', 0, A, 1, WR, WI, VL, 1, VR, 1, W, 1,
00108      $               INFO )
00109          CALL CHKXER( 'DGEEV ', INFOT, NOUT, LERR, OK )
00110          INFOT = 2
00111          CALL DGEEV( 'N', 'X', 0, A, 1, WR, WI, VL, 1, VR, 1, W, 1,
00112      $               INFO )
00113          CALL CHKXER( 'DGEEV ', INFOT, NOUT, LERR, OK )
00114          INFOT = 3
00115          CALL DGEEV( 'N', 'N', -1, A, 1, WR, WI, VL, 1, VR, 1, W, 1,
00116      $               INFO )
00117          CALL CHKXER( 'DGEEV ', INFOT, NOUT, LERR, OK )
00118          INFOT = 5
00119          CALL DGEEV( 'N', 'N', 2, A, 1, WR, WI, VL, 1, VR, 1, W, 6,
00120      $               INFO )
00121          CALL CHKXER( 'DGEEV ', INFOT, NOUT, LERR, OK )
00122          INFOT = 9
00123          CALL DGEEV( 'V', 'N', 2, A, 2, WR, WI, VL, 1, VR, 1, W, 8,
00124      $               INFO )
00125          CALL CHKXER( 'DGEEV ', INFOT, NOUT, LERR, OK )
00126          INFOT = 11
00127          CALL DGEEV( 'N', 'V', 2, A, 2, WR, WI, VL, 1, VR, 1, W, 8,
00128      $               INFO )
00129          CALL CHKXER( 'DGEEV ', INFOT, NOUT, LERR, OK )
00130          INFOT = 13
00131          CALL DGEEV( 'V', 'V', 1, A, 1, WR, WI, VL, 1, VR, 1, W, 3,
00132      $               INFO )
00133          CALL CHKXER( 'DGEEV ', INFOT, NOUT, LERR, OK )
00134          NT = NT + 7
00135 *
00136       ELSE IF( LSAMEN( 2, C2, 'ES' ) ) THEN
00137 *
00138 *        Test DGEES
00139 *
00140          SRNAMT = 'DGEES '
00141          INFOT = 1
00142          CALL DGEES( 'X', 'N', DSLECT, 0, A, 1, SDIM, WR, WI, VL, 1, W,
00143      $               1, B, INFO )
00144          CALL CHKXER( 'DGEES ', INFOT, NOUT, LERR, OK )
00145          INFOT = 2
00146          CALL DGEES( 'N', 'X', DSLECT, 0, A, 1, SDIM, WR, WI, VL, 1, W,
00147      $               1, B, INFO )
00148          CALL CHKXER( 'DGEES ', INFOT, NOUT, LERR, OK )
00149          INFOT = 4
00150          CALL DGEES( 'N', 'S', DSLECT, -1, A, 1, SDIM, WR, WI, VL, 1, W,
00151      $               1, B, INFO )
00152          CALL CHKXER( 'DGEES ', INFOT, NOUT, LERR, OK )
00153          INFOT = 6
00154          CALL DGEES( 'N', 'S', DSLECT, 2, A, 1, SDIM, WR, WI, VL, 1, W,
00155      $               6, B, INFO )
00156          CALL CHKXER( 'DGEES ', INFOT, NOUT, LERR, OK )
00157          INFOT = 11
00158          CALL DGEES( 'V', 'S', DSLECT, 2, A, 2, SDIM, WR, WI, VL, 1, W,
00159      $               6, B, INFO )
00160          CALL CHKXER( 'DGEES ', INFOT, NOUT, LERR, OK )
00161          INFOT = 13
00162          CALL DGEES( 'N', 'S', DSLECT, 1, A, 1, SDIM, WR, WI, VL, 1, W,
00163      $               2, B, INFO )
00164          CALL CHKXER( 'DGEES ', INFOT, NOUT, LERR, OK )
00165          NT = NT + 6
00166 *
00167       ELSE IF( LSAMEN( 2, C2, 'VX' ) ) THEN
00168 *
00169 *        Test DGEEVX
00170 *
00171          SRNAMT = 'DGEEVX'
00172          INFOT = 1
00173          CALL DGEEVX( 'X', 'N', 'N', 'N', 0, A, 1, WR, WI, VL, 1, VR, 1,
00174      $                ILO, IHI, S, ABNRM, R1, R2, W, 1, IW, INFO )
00175          CALL CHKXER( 'DGEEVX', INFOT, NOUT, LERR, OK )
00176          INFOT = 2
00177          CALL DGEEVX( 'N', 'X', 'N', 'N', 0, A, 1, WR, WI, VL, 1, VR, 1,
00178      $                ILO, IHI, S, ABNRM, R1, R2, W, 1, IW, INFO )
00179          CALL CHKXER( 'DGEEVX', INFOT, NOUT, LERR, OK )
00180          INFOT = 3
00181          CALL DGEEVX( 'N', 'N', 'X', 'N', 0, A, 1, WR, WI, VL, 1, VR, 1,
00182      $                ILO, IHI, S, ABNRM, R1, R2, W, 1, IW, INFO )
00183          CALL CHKXER( 'DGEEVX', INFOT, NOUT, LERR, OK )
00184          INFOT = 4
00185          CALL DGEEVX( 'N', 'N', 'N', 'X', 0, A, 1, WR, WI, VL, 1, VR, 1,
00186      $                ILO, IHI, S, ABNRM, R1, R2, W, 1, IW, INFO )
00187          CALL CHKXER( 'DGEEVX', INFOT, NOUT, LERR, OK )
00188          INFOT = 5
00189          CALL DGEEVX( 'N', 'N', 'N', 'N', -1, A, 1, WR, WI, VL, 1, VR,
00190      $                1, ILO, IHI, S, ABNRM, R1, R2, W, 1, IW, INFO )
00191          CALL CHKXER( 'DGEEVX', INFOT, NOUT, LERR, OK )
00192          INFOT = 7
00193          CALL DGEEVX( 'N', 'N', 'N', 'N', 2, A, 1, WR, WI, VL, 1, VR, 1,
00194      $                ILO, IHI, S, ABNRM, R1, R2, W, 1, IW, INFO )
00195          CALL CHKXER( 'DGEEVX', INFOT, NOUT, LERR, OK )
00196          INFOT = 11
00197          CALL DGEEVX( 'N', 'V', 'N', 'N', 2, A, 2, WR, WI, VL, 1, VR, 1,
00198      $                ILO, IHI, S, ABNRM, R1, R2, W, 6, IW, INFO )
00199          CALL CHKXER( 'DGEEVX', INFOT, NOUT, LERR, OK )
00200          INFOT = 13
00201          CALL DGEEVX( 'N', 'N', 'V', 'N', 2, A, 2, WR, WI, VL, 1, VR, 1,
00202      $                ILO, IHI, S, ABNRM, R1, R2, W, 6, IW, INFO )
00203          CALL CHKXER( 'DGEEVX', INFOT, NOUT, LERR, OK )
00204          INFOT = 21
00205          CALL DGEEVX( 'N', 'N', 'N', 'N', 1, A, 1, WR, WI, VL, 1, VR, 1,
00206      $                ILO, IHI, S, ABNRM, R1, R2, W, 1, IW, INFO )
00207          CALL CHKXER( 'DGEEVX', INFOT, NOUT, LERR, OK )
00208          INFOT = 21
00209          CALL DGEEVX( 'N', 'V', 'N', 'N', 1, A, 1, WR, WI, VL, 1, VR, 1,
00210      $                ILO, IHI, S, ABNRM, R1, R2, W, 2, IW, INFO )
00211          CALL CHKXER( 'DGEEVX', INFOT, NOUT, LERR, OK )
00212          INFOT = 21
00213          CALL DGEEVX( 'N', 'N', 'V', 'V', 1, A, 1, WR, WI, VL, 1, VR, 1,
00214      $                ILO, IHI, S, ABNRM, R1, R2, W, 3, IW, INFO )
00215          CALL CHKXER( 'DGEEVX', INFOT, NOUT, LERR, OK )
00216          NT = NT + 11
00217 *
00218       ELSE IF( LSAMEN( 2, C2, 'SX' ) ) THEN
00219 *
00220 *        Test DGEESX
00221 *
00222          SRNAMT = 'DGEESX'
00223          INFOT = 1
00224          CALL DGEESX( 'X', 'N', DSLECT, 'N', 0, A, 1, SDIM, WR, WI, VL,
00225      $                1, R1( 1 ), R2( 1 ), W, 1, IW, 1, B, INFO )
00226          CALL CHKXER( 'DGEESX', INFOT, NOUT, LERR, OK )
00227          INFOT = 2
00228          CALL DGEESX( 'N', 'X', DSLECT, 'N', 0, A, 1, SDIM, WR, WI, VL,
00229      $                1, R1( 1 ), R2( 1 ), W, 1, IW, 1, B, INFO )
00230          CALL CHKXER( 'DGEESX', INFOT, NOUT, LERR, OK )
00231          INFOT = 4
00232          CALL DGEESX( 'N', 'N', DSLECT, 'X', 0, A, 1, SDIM, WR, WI, VL,
00233      $                1, R1( 1 ), R2( 1 ), W, 1, IW, 1, B, INFO )
00234          CALL CHKXER( 'DGEESX', INFOT, NOUT, LERR, OK )
00235          INFOT = 5
00236          CALL DGEESX( 'N', 'N', DSLECT, 'N', -1, A, 1, SDIM, WR, WI, VL,
00237      $                1, R1( 1 ), R2( 1 ), W, 1, IW, 1, B, INFO )
00238          CALL CHKXER( 'DGEESX', INFOT, NOUT, LERR, OK )
00239          INFOT = 7
00240          CALL DGEESX( 'N', 'N', DSLECT, 'N', 2, A, 1, SDIM, WR, WI, VL,
00241      $                1, R1( 1 ), R2( 1 ), W, 6, IW, 1, B, INFO )
00242          CALL CHKXER( 'DGEESX', INFOT, NOUT, LERR, OK )
00243          INFOT = 12
00244          CALL DGEESX( 'V', 'N', DSLECT, 'N', 2, A, 2, SDIM, WR, WI, VL,
00245      $                1, R1( 1 ), R2( 1 ), W, 6, IW, 1, B, INFO )
00246          CALL CHKXER( 'DGEESX', INFOT, NOUT, LERR, OK )
00247          INFOT = 16
00248          CALL DGEESX( 'N', 'N', DSLECT, 'N', 1, A, 1, SDIM, WR, WI, VL,
00249      $                1, R1( 1 ), R2( 1 ), W, 2, IW, 1, B, INFO )
00250          CALL CHKXER( 'DGEESX', INFOT, NOUT, LERR, OK )
00251          NT = NT + 7
00252 *
00253       ELSE IF( LSAMEN( 2, C2, 'BD' ) ) THEN
00254 *
00255 *        Test DGESVD
00256 *
00257          SRNAMT = 'DGESVD'
00258          INFOT = 1
00259          CALL DGESVD( 'X', 'N', 0, 0, A, 1, S, U, 1, VT, 1, W, 1, INFO )
00260          CALL CHKXER( 'DGESVD', INFOT, NOUT, LERR, OK )
00261          INFOT = 2
00262          CALL DGESVD( 'N', 'X', 0, 0, A, 1, S, U, 1, VT, 1, W, 1, INFO )
00263          CALL CHKXER( 'DGESVD', INFOT, NOUT, LERR, OK )
00264          INFOT = 2
00265          CALL DGESVD( 'O', 'O', 0, 0, A, 1, S, U, 1, VT, 1, W, 1, INFO )
00266          CALL CHKXER( 'DGESVD', INFOT, NOUT, LERR, OK )
00267          INFOT = 3
00268          CALL DGESVD( 'N', 'N', -1, 0, A, 1, S, U, 1, VT, 1, W, 1,
00269      $                INFO )
00270          CALL CHKXER( 'DGESVD', INFOT, NOUT, LERR, OK )
00271          INFOT = 4
00272          CALL DGESVD( 'N', 'N', 0, -1, A, 1, S, U, 1, VT, 1, W, 1,
00273      $                INFO )
00274          CALL CHKXER( 'DGESVD', INFOT, NOUT, LERR, OK )
00275          INFOT = 6
00276          CALL DGESVD( 'N', 'N', 2, 1, A, 1, S, U, 1, VT, 1, W, 5, INFO )
00277          CALL CHKXER( 'DGESVD', INFOT, NOUT, LERR, OK )
00278          INFOT = 9
00279          CALL DGESVD( 'A', 'N', 2, 1, A, 2, S, U, 1, VT, 1, W, 5, INFO )
00280          CALL CHKXER( 'DGESVD', INFOT, NOUT, LERR, OK )
00281          INFOT = 11
00282          CALL DGESVD( 'N', 'A', 1, 2, A, 1, S, U, 1, VT, 1, W, 5, INFO )
00283          CALL CHKXER( 'DGESVD', INFOT, NOUT, LERR, OK )
00284          NT = NT + 8
00285          IF( OK ) THEN
00286             WRITE( NOUT, FMT = 9999 )SRNAMT( 1:LEN_TRIM( SRNAMT ) ),
00287      $           NT
00288          ELSE
00289             WRITE( NOUT, FMT = 9998 )
00290          END IF
00291 *
00292 *        Test DGESDD
00293 *
00294          SRNAMT = 'DGESDD'
00295          INFOT = 1
00296          CALL DGESDD( 'X', 0, 0, A, 1, S, U, 1, VT, 1, W, 1, IW, INFO )
00297          CALL CHKXER( 'DGESDD', INFOT, NOUT, LERR, OK )
00298          INFOT = 2
00299          CALL DGESDD( 'N', -1, 0, A, 1, S, U, 1, VT, 1, W, 1, IW, INFO )
00300          CALL CHKXER( 'DGESDD', INFOT, NOUT, LERR, OK )
00301          INFOT = 3
00302          CALL DGESDD( 'N', 0, -1, A, 1, S, U, 1, VT, 1, W, 1, IW, INFO )
00303          CALL CHKXER( 'DGESDD', INFOT, NOUT, LERR, OK )
00304          INFOT = 5
00305          CALL DGESDD( 'N', 2, 1, A, 1, S, U, 1, VT, 1, W, 5, IW, INFO )
00306          CALL CHKXER( 'DGESDD', INFOT, NOUT, LERR, OK )
00307          INFOT = 8
00308          CALL DGESDD( 'A', 2, 1, A, 2, S, U, 1, VT, 1, W, 5, IW, INFO )
00309          CALL CHKXER( 'DGESDD', INFOT, NOUT, LERR, OK )
00310          INFOT = 10
00311          CALL DGESDD( 'A', 1, 2, A, 1, S, U, 1, VT, 1, W, 5, IW, INFO )
00312          CALL CHKXER( 'DGESDD', INFOT, NOUT, LERR, OK )
00313          NT = NT - 2
00314          IF( OK ) THEN
00315             WRITE( NOUT, FMT = 9999 )SRNAMT( 1:LEN_TRIM( SRNAMT ) ),
00316      $           NT
00317          ELSE
00318             WRITE( NOUT, FMT = 9998 )
00319          END IF
00320       END IF
00321 *
00322 *     Print a summary line.
00323 *
00324       IF( .NOT.LSAMEN( 2, C2, 'BD' ) ) THEN
00325          IF( OK ) THEN
00326             WRITE( NOUT, FMT = 9999 )SRNAMT( 1:LEN_TRIM( SRNAMT ) ),
00327      $           NT
00328          ELSE
00329             WRITE( NOUT, FMT = 9998 )
00330          END IF
00331       END IF
00332 *
00333  9999 FORMAT( 1X, A, ' passed the tests of the error exits (', I3,
00334      $      ' tests done)' )
00335  9998 FORMAT( ' *** ', A, ' failed the tests of the error exits ***' )
00336       RETURN
00337 *
00338 *     End of DERRED
00339       END
 All Files Functions