summaryrefslogtreecommitdiff
path: root/TESTING/LIN/cerrhex.f
diff options
context:
space:
mode:
authorJulie <julie@cs.utk.edu>2016-11-15 20:39:35 -0800
committerJulie <julie@cs.utk.edu>2016-11-15 20:39:35 -0800
commitead2c73f1a6dad1342bf32987c0b2f2eaf61f18a (patch)
treeb82e9ad49e12960ad410a418d03d68adc7e2e653 /TESTING/LIN/cerrhex.f
parent39698bc46ca55081ebd94c81c5c95771c9f125cd (diff)
downloadlapack-ead2c73f1a6dad1342bf32987c0b2f2eaf61f18a.tar.gz
lapack-ead2c73f1a6dad1342bf32987c0b2f2eaf61f18a.tar.bz2
lapack-ead2c73f1a6dad1342bf32987c0b2f2eaf61f18a.zip
Added (S,D,C,Z) (SY,HE) routines, drivers for new rook code
Close #82 Added routines for new factorization code for symmetric indefinite ( or Hermitian indefinite ) matrices with bounded Bunch-Kaufman ( rook ) pivoting algorithm. New more efficient storage format for factors U ( or L ), block-diagonal matrix D, and pivoting information stored in IPIV: factor L is stored explicitly in lower triangle of A; diagonal of D is stored on the diagonal of A; subdiagonal elements of D are stored in array E; IPIV format is the same as in *_ROOK routines, but differs from SY Bunch-Kaufman routines (e.g. *SYTRF). The factorization output of these new rook _RK routines is not compatible with the existing _ROOK routines and vice versa. This new factorization format is designed in such a way, that there is a possibility in the future to write new Bunch-Kaufman routines that conform to this new factorization format. Then the future Bunch-Kaufman routines could share solver *TRS_3,inversion *TRI_3 and condition estimator *CON_3. To convert between the factorization formats in both ways the following routines are developed: CONVERSION ROUTINES BETWEEN FACTORIZATION FORMATS DOUBLE PRECISION (symmetric indefinite matrices): new file: SRC/dsyconvf.f new file: SRC/dsyconvf_rook.f REAL (symmetric indefinite matrices): new file: SRC/csyconvf.f new file: SRC/csyconvf_rook.f COMPLEX*16 (symmetric indefinite and Hermitian indefinite matrices): new file: SRC/zsyconvf.f new file: SRC/zsyconvf_rook.f COMPLEX (symmetric indefinite and Hermitian indefinite matrices): new file: SRC/ssyconvf.f new file: SRC/ssyconvf_rook.f *SYCONVF routine converts between old Bunch-Kaufman storage format ( denote (L1,D1,IPIV1) ) that is used by *SYTRF and new rook storage format ( denote (L2,D2, IPIV2)) that is used by *SYTRF_RK *SYCONVF_ROOK routine between old rook storage format ( denote (L1,D1,IPIV2) ) that is used by *SYTRF_ROOK and new rook storage format ( denote (L2,D2, IPIV2)) that is used by *SYTRF_RK ROUTINES AND DRIVERS DOUBLE PRECISION (symmetric indefinite matrices): new file: SRC/dsytf2_rk.f BLAS2 unblocked factorization new file: SRC/dlasyf_rk.f BLAS3 auxiliary blocked partial factorization new file: SRC/dsytrf_rk.f BLAS3 blocked factorization new file: SRC/dsytrs_3.f BLAS3 solver new file: SRC/dsycon_3.f BLAS3 condition number estimator new file: SRC/dsytri_3.f BLAS3 inversion, sets the size of work array and calls *sytri_3x new file: SRC/dsytri_3x.f BLAS3 auxiliary inversion, actually computes blocked inversion new file: SRC/dsysv_rk.f BLAS3 solver driver REAL (symmetric indefinite matrices): new file: SRC/ssytf2_rk.f BLAS2 unblocked factorization new file: SRC/slasyf_rk.f BLAS3 auxiliary blocked partial factorization new file: SRC/ssytrf_rk.f BLAS3 blocked factorization new file: SRC/ssytrs_3.f BLAS3 solver new file: SRC/ssycon_3.f BLAS3 condition number estimator new file: SRC/ssytri_3.f BLAS3 inversion, sets the size of work array and calls *sytri_3x new file: SRC/ssytri_3x.f BLAS3 auxiliary inversion, actually computes blocked inversion new file: SRC/ssysv_rk.f BLAS3 solver driver COMPLEX*16 (symmetric indefinite matrices): new file: SRC/zsytf2_rk.f BLAS2 unblocked factorization new file: SRC/zlasyf_rk.f BLAS3 auxiliary blocked partial factorization new file: SRC/zsytrf_rk.f BLAS3 blocked factorization new file: SRC/zsytrs_3.f BLAS3 solver new file: SRC/zsycon_3.f BLAS3 condition number estimator new file: SRC/zsytri_3.f BLAS3 inversion, sets the size of work array and calls *sytri_3x new file: SRC/zsytri_3x.f BLAS3 auxiliary inversion, actually computes blocked inversion new file: SRC/zsysv_rk.f BLAS3 solver driver COMPLEX*16 (Hermitian indefinite matrices): new file: SRC/zhetf2_rk.f BLAS2 unblocked factorization new file: SRC/zlahef_rk.f BLAS3 auxiliary blocked partial factorization new file: SRC/zhetrf_rk.f BLAS3 blocked factorization new file: SRC/zhetrs_3.f BLAS3 solver new file: SRC/zhecon_3.f BLAS3 condition number estimator new file: SRC/zhetri_3.f BLAS3 inversion, sets the size of work array and calls *sytri_3x new file: SRC/zhetri_3x.f BLAS3 auxiliary inversion, actually computes blocked inversion new file: SRC/zhesv_rk.f BLAS3 solver driver COMPLEX (symmetric indefinite matrices): new file: SRC/csytf2_rk.f BLAS2 unblocked factorization new file: SRC/clasyf_rk.f BLAS3 auxiliary blocked partial factorization new file: SRC/csytrf_rk.f BLAS3 blocked factorization new file: SRC/csytrs_3.f BLAS3 solver new file: SRC/csycon_3.f BLAS3 condition number estimator new file: SRC/csytri_3.f BLAS3 inversion, sets the size of work array and calls *sytri_3x new file: SRC/csytri_3x.f BLAS3 auxiliary inversion, actually computes blocked inversion new file: SRC/csysv_rk.f BLAS3 solver driver COMPLEX (Hermitian indefinite matrices): new file: SRC/chetf2_rk.f BLAS2 unblocked factorization new file: SRC/clahef_rk.f BLAS3 auxiliary blocked partial factorization new file: SRC/chetrf_rk.f BLAS3 blocked factorization new file: SRC/chetrs_3.f BLAS3 solver new file: SRC/checon_3.f BLAS3 condition number estimator new file: SRC/chetri_3.f BLAS3 inversion, sets the size of work array and calls *sytri_3x new file: SRC/chetri_3x.f BLAS3 auxiliary inversion, actually computes blocked inversion new file: SRC/chesv_rk.f BLAS3 solver driver MISC modified: SRC/CMakeLists.txt modified: SRC/Makefile TEST CODE modified: TESTING/LIN/CMakeLists.txt modified: TESTING/LIN/Makefile modified: TESTING/LIN/aladhd.f modified: TESTING/LIN/alaerh.f modified: TESTING/LIN/alahd.f DOUBLE PRECISION (symmetric indefinite matrices): modified: TESTING/LIN/dchkaa.f modified: TESTING/LIN/derrsy.f modified: TESTING/LIN/derrsyx.f modified: TESTING/LIN/derrvx.f modified: TESTING/LIN/derrvxx.f modified: TESTING/dtest.in new file: TESTING/LIN/dchksy_rk.f new file: TESTING/LIN/ddrvsy_rk.f new file: TESTING/LIN/dsyt01_3.f REAL (symmetric indefinite matrices): modified: TESTING/LIN/schkaa.f modified: TESTING/LIN/serrsy.f modified: TESTING/LIN/serrsyx.f modified: TESTING/LIN/serrvx.f modified: TESTING/LIN/serrvxx.f modified: TESTING/stest.in new file: TESTING/LIN/schksy_rk.f new file: TESTING/LIN/sdrvsy_rk.f new file: TESTING/LIN/ssyt01_3.f COMPLEX*16 (symmetric indefinite and Hermitian indefinite matrices): modified: TESTING/LIN/zchkaa.f modified: TESTING/LIN/zerrsy.f modified: TESTING/LIN/zerrsyx.f modified: TESTING/LIN/zerrhe.f modified: TESTING/LIN/zerrhex.f modified: TESTING/LIN/zerrvx.f modified: TESTING/LIN/zerrvxx.f modified: TESTING/ztest.in new file: TESTING/LIN/zchksy_rk.f new file: TESTING/LIN/zdrvsy_rk.f new file: TESTING/LIN/zsyt01_3.f new file: TESTING/LIN/zchkhe_rk.f new file: TESTING/LIN/zdrvhe_rk.f new file: TESTING/LIN/zhet01_3.f COMPLEX (symmetric indefinite and Hermitian indefinite matrices): modified: TESTING/LIN/cchkaa.f modified: TESTING/LIN/cerrsy.f modified: TESTING/LIN/cerrsyx.f modified: TESTING/LIN/cerrhe.f modified: TESTING/LIN/cerrhex.f modified: TESTING/LIN/cerrvx.f modified: TESTING/LIN/cerrvxx.f modified: TESTING/ctest.in new file: TESTING/LIN/cchksy_rk.f new file: TESTING/LIN/cdrvsy_rk.f new file: TESTING/LIN/csyt01_3.f new file: TESTING/LIN/cchkhe_rk.f new file: TESTING/LIN/cdrvhe_rk.f new file: TESTING/LIN/chet01_3.f
Diffstat (limited to 'TESTING/LIN/cerrhex.f')
-rw-r--r--TESTING/LIN/cerrhex.f183
1 files changed, 159 insertions, 24 deletions
diff --git a/TESTING/LIN/cerrhex.f b/TESTING/LIN/cerrhex.f
index a6ee9fa9..662892e3 100644
--- a/TESTING/LIN/cerrhex.f
+++ b/TESTING/LIN/cerrhex.f
@@ -51,17 +51,17 @@
*> \author Univ. of Colorado Denver
*> \author NAG Ltd.
*
-*> \date November 2015
+*> \date November 2016
*
*> \ingroup complex_lin
*
* =====================================================================
SUBROUTINE CERRHE( PATH, NUNIT )
*
-* -- LAPACK test routine (version 3.6.0) --
+* -- LAPACK test routine (version 3.7.0) --
* -- LAPACK is a software package provided by Univ. of Tennessee, --
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2015
+* November 2016
*
* .. Scalar Arguments ..
CHARACTER*3 PATH
@@ -87,18 +87,19 @@
$ S( NMAX ), ERR_BNDS_N( NMAX, 3 ),
$ ERR_BNDS_C( NMAX, 3 ), PARAMS( 1 )
COMPLEX A( NMAX, NMAX ), AF( NMAX, NMAX ), B( NMAX ),
- $ W( 2*NMAX ), X( NMAX )
+ $ E( NMAX ), W( 2*NMAX ), X( NMAX )
* ..
* .. External Functions ..
LOGICAL LSAMEN
EXTERNAL LSAMEN
* ..
* .. External Subroutines ..
- EXTERNAL ALAESM, CHECON, CHECON_ROOK, CHERFS, CHETF2,
- $ CHETF2_ROOK, CHETRF, CHETRF_ROOK, CHETRI,
- $ CHETRI_ROOK, CHETRI2, CHETRS, CHETRS_ROOK,
- $ CHKXER, CHPCON, CHPRFS, CHPTRF, CHPTRI, CHPTRS,
- $ CHERFSX
+ EXTERNAL ALAESM, CHECON, CHECON_3, CHECON_ROOK, CHERFS,
+ $ CHETF2, CHETF2_RK, CHETF2_ROOK, CHETRF,
+ $ CHETRF_RK, CHETRF_ROOK, CHETRI, CHETRI_3,
+ $ CHETRI_3X, CHETRI_ROOK, CHETRI2, CHETRI2X,
+ $ CHETRS, CHETRS_3, CHETRS_ROOK, CHKXER, CHPCON,
+ $ CHPRFS, CHPTRF, CHPTRI, CHPTRS, CHERFSX
* ..
* .. Scalars in Common ..
LOGICAL LERR, OK
@@ -125,23 +126,23 @@
A( I, J ) = CMPLX( 1. / REAL( I+J ), -1. / REAL( I+J ) )
AF( I, J ) = CMPLX( 1. / REAL( I+J ), -1. / REAL( I+J ) )
10 CONTINUE
- B( J ) = 0.
- R1( J ) = 0.
- R2( J ) = 0.
- W( J ) = 0.
- X( J ) = 0.
- S( J ) = 0.
+ B( J ) = 0.E+0
+ E( J ) = 0.E+0
+ R1( J ) = 0.E+0
+ R2( J ) = 0.E+0
+ W( J ) = 0.E+0
+ X( J ) = 0.E+0
IP( J ) = J
20 CONTINUE
ANRM = 1.0
OK = .TRUE.
*
-* Test error exits of the routines that use factorization
-* of a Hermitian indefinite matrix with patrial
-* (Bunch-Kaufman) diagonal pivoting method.
-*
IF( LSAMEN( 2, C2, 'HE' ) ) THEN
*
+* Test error exits of the routines that use factorization
+* of a Hermitian indefinite matrix with patrial
+* (Bunch-Kaufman) diagonal pivoting method.
+*
* CHETRF
*
SRNAMT = 'CHETRF'
@@ -154,6 +155,12 @@
INFOT = 4
CALL CHETRF( 'U', 2, A, 1, IP, W, 4, INFO )
CALL CHKXER( 'CHETRF', INFOT, NOUT, LERR, OK )
+ INFOT = 7
+ CALL CHETRF( 'U', 0, A, 1, IP, W, 0, INFO )
+ CALL CHKXER( 'CHETRF', INFOT, NOUT, LERR, OK )
+ INFOT = 7
+ CALL CHETRF( 'U', 0, A, 1, IP, W, -2, INFO )
+ CALL CHKXER( 'CHETRF', INFOT, NOUT, LERR, OK )
*
* CHETF2
*
@@ -194,6 +201,19 @@
CALL CHETRI2( 'U', 2, A, 1, IP, W, 1, INFO )
CALL CHKXER( 'CHETRI2', INFOT, NOUT, LERR, OK )
*
+* CHETRI2X
+*
+ SRNAMT = 'CHETRI2X'
+ INFOT = 1
+ CALL CHETRI2X( '/', 0, A, 1, IP, W, 1, INFO )
+ CALL CHKXER( 'CHETRI2X', INFOT, NOUT, LERR, OK )
+ INFOT = 2
+ CALL CHETRI2X( 'U', -1, A, 1, IP, W, 1, INFO )
+ CALL CHKXER( 'CHETRI2X', INFOT, NOUT, LERR, OK )
+ INFOT = 4
+ CALL CHETRI2X( 'U', 2, A, 1, IP, W, 1, INFO )
+ CALL CHKXER( 'CHETRI2X', INFOT, NOUT, LERR, OK )
+*
* CHETRS
*
SRNAMT = 'CHETRS'
@@ -308,12 +328,12 @@
$ PARAMS, W, R, INFO )
CALL CHKXER( 'CHERFSX', INFOT, NOUT, LERR, OK )
*
+ ELSE IF( LSAMEN( 2, C2, 'HR' ) ) THEN
+*
* Test error exits of the routines that use factorization
-* of a Hermitian indefinite matrix with "rook"
+* of a Hermitian indefinite matrix with rook
* (bounded Bunch-Kaufman) diagonal pivoting method.
*
- ELSE IF( LSAMEN( 2, C2, 'HR' ) ) THEN
-*
* CHETRF_ROOK
*
SRNAMT = 'CHETRF_ROOK'
@@ -326,6 +346,12 @@
INFOT = 4
CALL CHETRF_ROOK( 'U', 2, A, 1, IP, W, 4, INFO )
CALL CHKXER( 'CHETRF_ROOK', INFOT, NOUT, LERR, OK )
+ INFOT = 7
+ CALL CHETRF_ROOK( 'U', 0, A, 1, IP, W, 0, INFO )
+ CALL CHKXER( 'CHETRF_ROOK', INFOT, NOUT, LERR, OK )
+ INFOT = 7
+ CALL CHETRF_ROOK( 'U', 0, A, 1, IP, W, -2, INFO )
+ CALL CHKXER( 'CHETRF_ROOK', INFOT, NOUT, LERR, OK )
*
* CHETF2_ROOK
*
@@ -388,12 +414,121 @@
CALL CHECON_ROOK( 'U', 1, A, 1, IP, -ANRM, RCOND, W, INFO )
CALL CHKXER( 'CHECON_ROOK', INFOT, NOUT, LERR, OK )
*
+ ELSE IF( LSAMEN( 2, C2, 'HK' ) ) THEN
+*
+* Test error exits of the routines that use factorization
+* of a Hermitian indefinite matrix with rook
+* (bounded Bunch-Kaufman) pivoting with the new storage
+* format for factors L ( or U) and D.
+*
+* L (or U) is stored in A, diagonal of D is stored on the
+* diagonal of A, subdiagonal of D is stored in a separate array E.
+*
+* CHETRF_RK
+*
+ SRNAMT = 'CHETRF_RK'
+ INFOT = 1
+ CALL CHETRF_RK( '/', 0, A, 1, E, IP, W, 1, INFO )
+ CALL CHKXER( 'CHETRF_RK', INFOT, NOUT, LERR, OK )
+ INFOT = 2
+ CALL CHETRF_RK( 'U', -1, A, 1, E, IP, W, 1, INFO )
+ CALL CHKXER( 'CHETRF_RK', INFOT, NOUT, LERR, OK )
+ INFOT = 4
+ CALL CHETRF_RK( 'U', 2, A, 1, E, IP, W, 4, INFO )
+ CALL CHKXER( 'CHETRF_RK', INFOT, NOUT, LERR, OK )
+ INFOT = 8
+ CALL CHETRF_RK( 'U', 0, A, 1, E, IP, W, 0, INFO )
+ CALL CHKXER( 'CHETRF_RK', INFOT, NOUT, LERR, OK )
+ INFOT = 8
+ CALL CHETRF_RK( 'U', 0, A, 1, E, IP, W, -2, INFO )
+ CALL CHKXER( 'CHETRF_RK', INFOT, NOUT, LERR, OK )
+*
+* CHETF2_RK
+*
+ SRNAMT = 'CHETF2_RK'
+ INFOT = 1
+ CALL CHETF2_RK( '/', 0, A, 1, E, IP, INFO )
+ CALL CHKXER( 'CHETF2_RK', INFOT, NOUT, LERR, OK )
+ INFOT = 2
+ CALL CHETF2_RK( 'U', -1, A, 1, E, IP, INFO )
+ CALL CHKXER( 'CHETF2_RK', INFOT, NOUT, LERR, OK )
+ INFOT = 4
+ CALL CHETF2_RK( 'U', 2, A, 1, E, IP, INFO )
+ CALL CHKXER( 'CHETF2_RK', INFOT, NOUT, LERR, OK )
+*
+* CHETRI_3
+*
+ SRNAMT = 'CHETRI_3'
+ INFOT = 1
+ CALL CHETRI_3( '/', 0, A, 1, E, IP, W, 1, INFO )
+ CALL CHKXER( 'CHETRI_3', INFOT, NOUT, LERR, OK )
+ INFOT = 2
+ CALL CHETRI_3( 'U', -1, A, 1, E, IP, W, 1, INFO )
+ CALL CHKXER( 'CHETRI_3', INFOT, NOUT, LERR, OK )
+ INFOT = 4
+ CALL CHETRI_3( 'U', 2, A, 1, E, IP, W, 1, INFO )
+ CALL CHKXER( 'CHETRI_3', INFOT, NOUT, LERR, OK )
+ INFOT = 8
+ CALL CHETRI_3( 'U', 0, A, 1, E, IP, W, 0, INFO )
+ CALL CHKXER( 'CHETRI_3', INFOT, NOUT, LERR, OK )
+ INFOT = 8
+ CALL CHETRI_3( 'U', 0, A, 1, E, IP, W, -2, INFO )
+ CALL CHKXER( 'CHETRI_3', INFOT, NOUT, LERR, OK )
+*
+* CHETRI_3X
+*
+ SRNAMT = 'CHETRI_3X'
+ INFOT = 1
+ CALL CHETRI_3X( '/', 0, A, 1, E, IP, W, 1, INFO )
+ CALL CHKXER( 'CHETRI_3X', INFOT, NOUT, LERR, OK )
+ INFOT = 2
+ CALL CHETRI_3X( 'U', -1, A, 1, E, IP, W, 1, INFO )
+ CALL CHKXER( 'CHETRI_3X', INFOT, NOUT, LERR, OK )
+ INFOT = 4
+ CALL CHETRI_3X( 'U', 2, A, 1, E, IP, W, 1, INFO )
+ CALL CHKXER( 'CHETRI_3X', INFOT, NOUT, LERR, OK )
+*
+* CHETRS_3
+*
+ SRNAMT = 'CHETRS_3'
+ INFOT = 1
+ CALL CHETRS_3( '/', 0, 0, A, 1, E, IP, B, 1, INFO )
+ CALL CHKXER( 'CHETRS_3', INFOT, NOUT, LERR, OK )
+ INFOT = 2
+ CALL CHETRS_3( 'U', -1, 0, A, 1, E, IP, B, 1, INFO )
+ CALL CHKXER( 'CHETRS_3', INFOT, NOUT, LERR, OK )
+ INFOT = 3
+ CALL CHETRS_3( 'U', 0, -1, A, 1, E, IP, B, 1, INFO )
+ CALL CHKXER( 'CHETRS_3', INFOT, NOUT, LERR, OK )
+ INFOT = 5
+ CALL CHETRS_3( 'U', 2, 1, A, 1, E, IP, B, 2, INFO )
+ CALL CHKXER( 'CHETRS_3', INFOT, NOUT, LERR, OK )
+ INFOT = 9
+ CALL CHETRS_3( 'U', 2, 1, A, 2, E, IP, B, 1, INFO )
+ CALL CHKXER( 'CHETRS_3', INFOT, NOUT, LERR, OK )
+*
+* CHECON_3
+*
+ SRNAMT = 'CHECON_3'
+ INFOT = 1
+ CALL CHECON_3( '/', 0, A, 1, E, IP, ANRM, RCOND, W, INFO )
+ CALL CHKXER( 'CHECON_3', INFOT, NOUT, LERR, OK )
+ INFOT = 2
+ CALL CHECON_3( 'U', -1, A, 1, E, IP, ANRM, RCOND, W, INFO )
+ CALL CHKXER( 'CHECON_3', INFOT, NOUT, LERR, OK )
+ INFOT = 4
+ CALL CHECON_3( 'U', 2, A, 1, E, IP, ANRM, RCOND, W, INFO )
+ CALL CHKXER( 'CHECON_3', INFOT, NOUT, LERR, OK )
+ INFOT = 7
+ CALL CHECON_3( 'U', 1, A, 1, E, IP, -1.0E0, RCOND, W, INFO)
+ CALL CHKXER( 'CHECON_3', INFOT, NOUT, LERR, OK )
+*
+ ELSE IF( LSAMEN( 2, C2, 'HP' ) ) THEN
+*
* Test error exits of the routines that use factorization
* of a Hermitian indefinite packed matrix with patrial
* (Bunch-Kaufman) diagonal pivoting method.
*
- ELSE IF( LSAMEN( 2, C2, 'HP' ) ) THEN
-*
* CHPTRF
*
SRNAMT = 'CHPTRF'