LAPACK 3.3.0

cerrpo.f

Go to the documentation of this file.
00001       SUBROUTINE CERRPO( 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 *  CERRPO tests the error exits for the COMPLEX routines
00016 *  for Hermitian positive definite matrices.
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
00031       PARAMETER          ( NMAX = 4 )
00032 *     ..
00033 *     .. Local Scalars ..
00034       CHARACTER*2        C2
00035       INTEGER            I, INFO, J
00036       REAL               ANRM, RCOND
00037 *     ..
00038 *     .. Local Arrays ..
00039       REAL               R( NMAX ), R1( NMAX ), R2( NMAX )
00040       COMPLEX            A( NMAX, NMAX ), AF( NMAX, NMAX ), B( NMAX ),
00041      $                   W( 2*NMAX ), X( NMAX )
00042 *     ..
00043 *     .. External Functions ..
00044       LOGICAL            LSAMEN
00045       EXTERNAL           LSAMEN
00046 *     ..
00047 *     .. External Subroutines ..
00048       EXTERNAL           ALAESM, CHKXER, CPBCON, CPBEQU, CPBRFS, CPBTF2,
00049      $                   CPBTRF, CPBTRS, CPOCON, CPOEQU, CPORFS, CPOTF2,
00050      $                   CPOTRF, CPOTRI, CPOTRS, CPPCON, CPPEQU, CPPRFS,
00051      $                   CPPTRF, CPPTRI, CPPTRS
00052 *     ..
00053 *     .. Scalars in Common ..
00054       LOGICAL            LERR, OK
00055       CHARACTER*32       SRNAMT
00056       INTEGER            INFOT, NOUT
00057 *     ..
00058 *     .. Common blocks ..
00059       COMMON             / INFOC / INFOT, NOUT, OK, LERR
00060       COMMON             / SRNAMC / SRNAMT
00061 *     ..
00062 *     .. Intrinsic Functions ..
00063       INTRINSIC          CMPLX, REAL
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 ) = CMPLX( 1. / REAL( I+J ), -1. / REAL( I+J ) )
00076             AF( I, J ) = CMPLX( 1. / REAL( I+J ), -1. / REAL( I+J ) )
00077    10    CONTINUE
00078          B( J ) = 0.
00079          R1( J ) = 0.
00080          R2( J ) = 0.
00081          W( J ) = 0.
00082          X( J ) = 0.
00083    20 CONTINUE
00084       ANRM = 1.
00085       OK = .TRUE.
00086 *
00087 *     Test error exits of the routines that use the Cholesky
00088 *     decomposition of a Hermitian positive definite matrix.
00089 *
00090       IF( LSAMEN( 2, C2, 'PO' ) ) THEN
00091 *
00092 *        CPOTRF
00093 *
00094          SRNAMT = 'CPOTRF'
00095          INFOT = 1
00096          CALL CPOTRF( '/', 0, A, 1, INFO )
00097          CALL CHKXER( 'CPOTRF', INFOT, NOUT, LERR, OK )
00098          INFOT = 2
00099          CALL CPOTRF( 'U', -1, A, 1, INFO )
00100          CALL CHKXER( 'CPOTRF', INFOT, NOUT, LERR, OK )
00101          INFOT = 4
00102          CALL CPOTRF( 'U', 2, A, 1, INFO )
00103          CALL CHKXER( 'CPOTRF', INFOT, NOUT, LERR, OK )
00104 *
00105 *        CPOTF2
00106 *
00107          SRNAMT = 'CPOTF2'
00108          INFOT = 1
00109          CALL CPOTF2( '/', 0, A, 1, INFO )
00110          CALL CHKXER( 'CPOTF2', INFOT, NOUT, LERR, OK )
00111          INFOT = 2
00112          CALL CPOTF2( 'U', -1, A, 1, INFO )
00113          CALL CHKXER( 'CPOTF2', INFOT, NOUT, LERR, OK )
00114          INFOT = 4
00115          CALL CPOTF2( 'U', 2, A, 1, INFO )
00116          CALL CHKXER( 'CPOTF2', INFOT, NOUT, LERR, OK )
00117 *
00118 *        CPOTRI
00119 *
00120          SRNAMT = 'CPOTRI'
00121          INFOT = 1
00122          CALL CPOTRI( '/', 0, A, 1, INFO )
00123          CALL CHKXER( 'CPOTRI', INFOT, NOUT, LERR, OK )
00124          INFOT = 2
00125          CALL CPOTRI( 'U', -1, A, 1, INFO )
00126          CALL CHKXER( 'CPOTRI', INFOT, NOUT, LERR, OK )
00127          INFOT = 4
00128          CALL CPOTRI( 'U', 2, A, 1, INFO )
00129          CALL CHKXER( 'CPOTRI', INFOT, NOUT, LERR, OK )
00130 *
00131 *        CPOTRS
00132 *
00133          SRNAMT = 'CPOTRS'
00134          INFOT = 1
00135          CALL CPOTRS( '/', 0, 0, A, 1, B, 1, INFO )
00136          CALL CHKXER( 'CPOTRS', INFOT, NOUT, LERR, OK )
00137          INFOT = 2
00138          CALL CPOTRS( 'U', -1, 0, A, 1, B, 1, INFO )
00139          CALL CHKXER( 'CPOTRS', INFOT, NOUT, LERR, OK )
00140          INFOT = 3
00141          CALL CPOTRS( 'U', 0, -1, A, 1, B, 1, INFO )
00142          CALL CHKXER( 'CPOTRS', INFOT, NOUT, LERR, OK )
00143          INFOT = 5
00144          CALL CPOTRS( 'U', 2, 1, A, 1, B, 2, INFO )
00145          CALL CHKXER( 'CPOTRS', INFOT, NOUT, LERR, OK )
00146          INFOT = 7
00147          CALL CPOTRS( 'U', 2, 1, A, 2, B, 1, INFO )
00148          CALL CHKXER( 'CPOTRS', INFOT, NOUT, LERR, OK )
00149 *
00150 *        CPORFS
00151 *
00152          SRNAMT = 'CPORFS'
00153          INFOT = 1
00154          CALL CPORFS( '/', 0, 0, A, 1, AF, 1, B, 1, X, 1, R1, R2, W, R,
00155      $                INFO )
00156          CALL CHKXER( 'CPORFS', INFOT, NOUT, LERR, OK )
00157          INFOT = 2
00158          CALL CPORFS( 'U', -1, 0, A, 1, AF, 1, B, 1, X, 1, R1, R2, W, R,
00159      $                INFO )
00160          CALL CHKXER( 'CPORFS', INFOT, NOUT, LERR, OK )
00161          INFOT = 3
00162          CALL CPORFS( 'U', 0, -1, A, 1, AF, 1, B, 1, X, 1, R1, R2, W, R,
00163      $                INFO )
00164          CALL CHKXER( 'CPORFS', INFOT, NOUT, LERR, OK )
00165          INFOT = 5
00166          CALL CPORFS( 'U', 2, 1, A, 1, AF, 2, B, 2, X, 2, R1, R2, W, R,
00167      $                INFO )
00168          CALL CHKXER( 'CPORFS', INFOT, NOUT, LERR, OK )
00169          INFOT = 7
00170          CALL CPORFS( 'U', 2, 1, A, 2, AF, 1, B, 2, X, 2, R1, R2, W, R,
00171      $                INFO )
00172          CALL CHKXER( 'CPORFS', INFOT, NOUT, LERR, OK )
00173          INFOT = 9
00174          CALL CPORFS( 'U', 2, 1, A, 2, AF, 2, B, 1, X, 2, R1, R2, W, R,
00175      $                INFO )
00176          CALL CHKXER( 'CPORFS', INFOT, NOUT, LERR, OK )
00177          INFOT = 11
00178          CALL CPORFS( 'U', 2, 1, A, 2, AF, 2, B, 2, X, 1, R1, R2, W, R,
00179      $                INFO )
00180          CALL CHKXER( 'CPORFS', INFOT, NOUT, LERR, OK )
00181 *
00182 *        CPOCON
00183 *
00184          SRNAMT = 'CPOCON'
00185          INFOT = 1
00186          CALL CPOCON( '/', 0, A, 1, ANRM, RCOND, W, R, INFO )
00187          CALL CHKXER( 'CPOCON', INFOT, NOUT, LERR, OK )
00188          INFOT = 2
00189          CALL CPOCON( 'U', -1, A, 1, ANRM, RCOND, W, R, INFO )
00190          CALL CHKXER( 'CPOCON', INFOT, NOUT, LERR, OK )
00191          INFOT = 4
00192          CALL CPOCON( 'U', 2, A, 1, ANRM, RCOND, W, R, INFO )
00193          CALL CHKXER( 'CPOCON', INFOT, NOUT, LERR, OK )
00194          INFOT = 5
00195          CALL CPOCON( 'U', 1, A, 1, -ANRM, RCOND, W, R, INFO )
00196          CALL CHKXER( 'CPOCON', INFOT, NOUT, LERR, OK )
00197 *
00198 *        CPOEQU
00199 *
00200          SRNAMT = 'CPOEQU'
00201          INFOT = 1
00202          CALL CPOEQU( -1, A, 1, R1, RCOND, ANRM, INFO )
00203          CALL CHKXER( 'CPOEQU', INFOT, NOUT, LERR, OK )
00204          INFOT = 3
00205          CALL CPOEQU( 2, A, 1, R1, RCOND, ANRM, INFO )
00206          CALL CHKXER( 'CPOEQU', INFOT, NOUT, LERR, OK )
00207 *
00208 *     Test error exits of the routines that use the Cholesky
00209 *     decomposition of a Hermitian positive definite packed matrix.
00210 *
00211       ELSE IF( LSAMEN( 2, C2, 'PP' ) ) THEN
00212 *
00213 *        CPPTRF
00214 *
00215          SRNAMT = 'CPPTRF'
00216          INFOT = 1
00217          CALL CPPTRF( '/', 0, A, INFO )
00218          CALL CHKXER( 'CPPTRF', INFOT, NOUT, LERR, OK )
00219          INFOT = 2
00220          CALL CPPTRF( 'U', -1, A, INFO )
00221          CALL CHKXER( 'CPPTRF', INFOT, NOUT, LERR, OK )
00222 *
00223 *        CPPTRI
00224 *
00225          SRNAMT = 'CPPTRI'
00226          INFOT = 1
00227          CALL CPPTRI( '/', 0, A, INFO )
00228          CALL CHKXER( 'CPPTRI', INFOT, NOUT, LERR, OK )
00229          INFOT = 2
00230          CALL CPPTRI( 'U', -1, A, INFO )
00231          CALL CHKXER( 'CPPTRI', INFOT, NOUT, LERR, OK )
00232 *
00233 *        CPPTRS
00234 *
00235          SRNAMT = 'CPPTRS'
00236          INFOT = 1
00237          CALL CPPTRS( '/', 0, 0, A, B, 1, INFO )
00238          CALL CHKXER( 'CPPTRS', INFOT, NOUT, LERR, OK )
00239          INFOT = 2
00240          CALL CPPTRS( 'U', -1, 0, A, B, 1, INFO )
00241          CALL CHKXER( 'CPPTRS', INFOT, NOUT, LERR, OK )
00242          INFOT = 3
00243          CALL CPPTRS( 'U', 0, -1, A, B, 1, INFO )
00244          CALL CHKXER( 'CPPTRS', INFOT, NOUT, LERR, OK )
00245          INFOT = 6
00246          CALL CPPTRS( 'U', 2, 1, A, B, 1, INFO )
00247          CALL CHKXER( 'CPPTRS', INFOT, NOUT, LERR, OK )
00248 *
00249 *        CPPRFS
00250 *
00251          SRNAMT = 'CPPRFS'
00252          INFOT = 1
00253          CALL CPPRFS( '/', 0, 0, A, AF, B, 1, X, 1, R1, R2, W, R, INFO )
00254          CALL CHKXER( 'CPPRFS', INFOT, NOUT, LERR, OK )
00255          INFOT = 2
00256          CALL CPPRFS( 'U', -1, 0, A, AF, B, 1, X, 1, R1, R2, W, R,
00257      $                INFO )
00258          CALL CHKXER( 'CPPRFS', INFOT, NOUT, LERR, OK )
00259          INFOT = 3
00260          CALL CPPRFS( 'U', 0, -1, A, AF, B, 1, X, 1, R1, R2, W, R,
00261      $                INFO )
00262          CALL CHKXER( 'CPPRFS', INFOT, NOUT, LERR, OK )
00263          INFOT = 7
00264          CALL CPPRFS( 'U', 2, 1, A, AF, B, 1, X, 2, R1, R2, W, R, INFO )
00265          CALL CHKXER( 'CPPRFS', INFOT, NOUT, LERR, OK )
00266          INFOT = 9
00267          CALL CPPRFS( 'U', 2, 1, A, AF, B, 2, X, 1, R1, R2, W, R, INFO )
00268          CALL CHKXER( 'CPPRFS', INFOT, NOUT, LERR, OK )
00269 *
00270 *        CPPCON
00271 *
00272          SRNAMT = 'CPPCON'
00273          INFOT = 1
00274          CALL CPPCON( '/', 0, A, ANRM, RCOND, W, R, INFO )
00275          CALL CHKXER( 'CPPCON', INFOT, NOUT, LERR, OK )
00276          INFOT = 2
00277          CALL CPPCON( 'U', -1, A, ANRM, RCOND, W, R, INFO )
00278          CALL CHKXER( 'CPPCON', INFOT, NOUT, LERR, OK )
00279          INFOT = 4
00280          CALL CPPCON( 'U', 1, A, -ANRM, RCOND, W, R, INFO )
00281          CALL CHKXER( 'CPPCON', INFOT, NOUT, LERR, OK )
00282 *
00283 *        CPPEQU
00284 *
00285          SRNAMT = 'CPPEQU'
00286          INFOT = 1
00287          CALL CPPEQU( '/', 0, A, R1, RCOND, ANRM, INFO )
00288          CALL CHKXER( 'CPPEQU', INFOT, NOUT, LERR, OK )
00289          INFOT = 2
00290          CALL CPPEQU( 'U', -1, A, R1, RCOND, ANRM, INFO )
00291          CALL CHKXER( 'CPPEQU', INFOT, NOUT, LERR, OK )
00292 *
00293 *     Test error exits of the routines that use the Cholesky
00294 *     decomposition of a Hermitian positive definite band matrix.
00295 *
00296       ELSE IF( LSAMEN( 2, C2, 'PB' ) ) THEN
00297 *
00298 *        CPBTRF
00299 *
00300          SRNAMT = 'CPBTRF'
00301          INFOT = 1
00302          CALL CPBTRF( '/', 0, 0, A, 1, INFO )
00303          CALL CHKXER( 'CPBTRF', INFOT, NOUT, LERR, OK )
00304          INFOT = 2
00305          CALL CPBTRF( 'U', -1, 0, A, 1, INFO )
00306          CALL CHKXER( 'CPBTRF', INFOT, NOUT, LERR, OK )
00307          INFOT = 3
00308          CALL CPBTRF( 'U', 1, -1, A, 1, INFO )
00309          CALL CHKXER( 'CPBTRF', INFOT, NOUT, LERR, OK )
00310          INFOT = 5
00311          CALL CPBTRF( 'U', 2, 1, A, 1, INFO )
00312          CALL CHKXER( 'CPBTRF', INFOT, NOUT, LERR, OK )
00313 *
00314 *        CPBTF2
00315 *
00316          SRNAMT = 'CPBTF2'
00317          INFOT = 1
00318          CALL CPBTF2( '/', 0, 0, A, 1, INFO )
00319          CALL CHKXER( 'CPBTF2', INFOT, NOUT, LERR, OK )
00320          INFOT = 2
00321          CALL CPBTF2( 'U', -1, 0, A, 1, INFO )
00322          CALL CHKXER( 'CPBTF2', INFOT, NOUT, LERR, OK )
00323          INFOT = 3
00324          CALL CPBTF2( 'U', 1, -1, A, 1, INFO )
00325          CALL CHKXER( 'CPBTF2', INFOT, NOUT, LERR, OK )
00326          INFOT = 5
00327          CALL CPBTF2( 'U', 2, 1, A, 1, INFO )
00328          CALL CHKXER( 'CPBTF2', INFOT, NOUT, LERR, OK )
00329 *
00330 *        CPBTRS
00331 *
00332          SRNAMT = 'CPBTRS'
00333          INFOT = 1
00334          CALL CPBTRS( '/', 0, 0, 0, A, 1, B, 1, INFO )
00335          CALL CHKXER( 'CPBTRS', INFOT, NOUT, LERR, OK )
00336          INFOT = 2
00337          CALL CPBTRS( 'U', -1, 0, 0, A, 1, B, 1, INFO )
00338          CALL CHKXER( 'CPBTRS', INFOT, NOUT, LERR, OK )
00339          INFOT = 3
00340          CALL CPBTRS( 'U', 1, -1, 0, A, 1, B, 1, INFO )
00341          CALL CHKXER( 'CPBTRS', INFOT, NOUT, LERR, OK )
00342          INFOT = 4
00343          CALL CPBTRS( 'U', 0, 0, -1, A, 1, B, 1, INFO )
00344          CALL CHKXER( 'CPBTRS', INFOT, NOUT, LERR, OK )
00345          INFOT = 6
00346          CALL CPBTRS( 'U', 2, 1, 1, A, 1, B, 1, INFO )
00347          CALL CHKXER( 'CPBTRS', INFOT, NOUT, LERR, OK )
00348          INFOT = 8
00349          CALL CPBTRS( 'U', 2, 0, 1, A, 1, B, 1, INFO )
00350          CALL CHKXER( 'CPBTRS', INFOT, NOUT, LERR, OK )
00351 *
00352 *        CPBRFS
00353 *
00354          SRNAMT = 'CPBRFS'
00355          INFOT = 1
00356          CALL CPBRFS( '/', 0, 0, 0, A, 1, AF, 1, B, 1, X, 1, R1, R2, W,
00357      $                R, INFO )
00358          CALL CHKXER( 'CPBRFS', INFOT, NOUT, LERR, OK )
00359          INFOT = 2
00360          CALL CPBRFS( 'U', -1, 0, 0, A, 1, AF, 1, B, 1, X, 1, R1, R2, W,
00361      $                R, INFO )
00362          CALL CHKXER( 'CPBRFS', INFOT, NOUT, LERR, OK )
00363          INFOT = 3
00364          CALL CPBRFS( 'U', 1, -1, 0, A, 1, AF, 1, B, 1, X, 1, R1, R2, W,
00365      $                R, INFO )
00366          CALL CHKXER( 'CPBRFS', INFOT, NOUT, LERR, OK )
00367          INFOT = 4
00368          CALL CPBRFS( 'U', 0, 0, -1, A, 1, AF, 1, B, 1, X, 1, R1, R2, W,
00369      $                R, INFO )
00370          CALL CHKXER( 'CPBRFS', INFOT, NOUT, LERR, OK )
00371          INFOT = 6
00372          CALL CPBRFS( 'U', 2, 1, 1, A, 1, AF, 2, B, 2, X, 2, R1, R2, W,
00373      $                R, INFO )
00374          CALL CHKXER( 'CPBRFS', INFOT, NOUT, LERR, OK )
00375          INFOT = 8
00376          CALL CPBRFS( 'U', 2, 1, 1, A, 2, AF, 1, B, 2, X, 2, R1, R2, W,
00377      $                R, INFO )
00378          CALL CHKXER( 'CPBRFS', INFOT, NOUT, LERR, OK )
00379          INFOT = 10
00380          CALL CPBRFS( 'U', 2, 0, 1, A, 1, AF, 1, B, 1, X, 2, R1, R2, W,
00381      $                R, INFO )
00382          CALL CHKXER( 'CPBRFS', INFOT, NOUT, LERR, OK )
00383          INFOT = 12
00384          CALL CPBRFS( 'U', 2, 0, 1, A, 1, AF, 1, B, 2, X, 1, R1, R2, W,
00385      $                R, INFO )
00386          CALL CHKXER( 'CPBRFS', INFOT, NOUT, LERR, OK )
00387 *
00388 *        CPBCON
00389 *
00390          SRNAMT = 'CPBCON'
00391          INFOT = 1
00392          CALL CPBCON( '/', 0, 0, A, 1, ANRM, RCOND, W, R, INFO )
00393          CALL CHKXER( 'CPBCON', INFOT, NOUT, LERR, OK )
00394          INFOT = 2
00395          CALL CPBCON( 'U', -1, 0, A, 1, ANRM, RCOND, W, R, INFO )
00396          CALL CHKXER( 'CPBCON', INFOT, NOUT, LERR, OK )
00397          INFOT = 3
00398          CALL CPBCON( 'U', 1, -1, A, 1, ANRM, RCOND, W, R, INFO )
00399          CALL CHKXER( 'CPBCON', INFOT, NOUT, LERR, OK )
00400          INFOT = 5
00401          CALL CPBCON( 'U', 2, 1, A, 1, ANRM, RCOND, W, R, INFO )
00402          CALL CHKXER( 'CPBCON', INFOT, NOUT, LERR, OK )
00403          INFOT = 6
00404          CALL CPBCON( 'U', 1, 0, A, 1, -ANRM, RCOND, W, R, INFO )
00405          CALL CHKXER( 'CPBCON', INFOT, NOUT, LERR, OK )
00406 *
00407 *        CPBEQU
00408 *
00409          SRNAMT = 'CPBEQU'
00410          INFOT = 1
00411          CALL CPBEQU( '/', 0, 0, A, 1, R1, RCOND, ANRM, INFO )
00412          CALL CHKXER( 'CPBEQU', INFOT, NOUT, LERR, OK )
00413          INFOT = 2
00414          CALL CPBEQU( 'U', -1, 0, A, 1, R1, RCOND, ANRM, INFO )
00415          CALL CHKXER( 'CPBEQU', INFOT, NOUT, LERR, OK )
00416          INFOT = 3
00417          CALL CPBEQU( 'U', 1, -1, A, 1, R1, RCOND, ANRM, INFO )
00418          CALL CHKXER( 'CPBEQU', INFOT, NOUT, LERR, OK )
00419          INFOT = 5
00420          CALL CPBEQU( 'U', 2, 1, A, 1, R1, RCOND, ANRM, INFO )
00421          CALL CHKXER( 'CPBEQU', INFOT, NOUT, LERR, OK )
00422       END IF
00423 *
00424 *     Print a summary line.
00425 *
00426       CALL ALAESM( PATH, OK, NOUT )
00427 *
00428       RETURN
00429 *
00430 *     End of CERRPO
00431 *
00432       END
 All Files Functions