summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlangou <julien.langou@ucdenver.edu>2017-03-27 06:13:09 (GMT)
committerGitHub <noreply@github.com>2017-03-27 06:13:09 (GMT)
commitce2261daabdee2e0b8532d1fabf879e5418db03a (patch)
tree172c46dd4a11ff83c37aa48a9cf8e601a06353a2
parent33b899f4eaff19eee091c0c0d81361b74923dc04 (diff)
parentee09e0720e729c268f91e42ec1bcb6c26402283b (diff)
downloadlapack-ce2261daabdee2e0b8532d1fabf879e5418db03a.zip
lapack-ce2261daabdee2e0b8532d1fabf879e5418db03a.tar.gz
lapack-ce2261daabdee2e0b8532d1fabf879e5418db03a.tar.bz2
Merge pull request #136 from echeresh/370_fix
A number of fixes for routines and testing sources integrated in LAPACK 3.7.0
-rw-r--r--SRC/chb2st_kernels.f98
-rw-r--r--SRC/clasyf_aa.f54
-rw-r--r--SRC/dlasyf_aa.f54
-rw-r--r--SRC/dsb2st_kernels.f98
-rw-r--r--SRC/slasyf_aa.f54
-rw-r--r--SRC/ssb2st_kernels.f101
-rw-r--r--SRC/zhb2st_kernels.f98
-rw-r--r--SRC/zlasyf_aa.f54
-rw-r--r--TESTING/EIG/cchkhb2stg.f2
-rw-r--r--TESTING/EIG/cdrvst2stg.f3
-rw-r--r--TESTING/EIG/cerrst.f8
-rw-r--r--TESTING/EIG/cget02.f4
-rw-r--r--TESTING/EIG/clarhs.f4
-rw-r--r--TESTING/EIG/dchksb2stg.f2
-rw-r--r--TESTING/EIG/dget02.f2
-rw-r--r--TESTING/EIG/dlarhs.f4
-rw-r--r--TESTING/EIG/schksb2stg.f2
-rw-r--r--TESTING/EIG/sget02.f2
-rw-r--r--TESTING/EIG/slarhs.f4
-rw-r--r--TESTING/EIG/zget02.f4
-rw-r--r--TESTING/EIG/zlarhs.f4
-rw-r--r--TESTING/LIN/cchkhe_aa.f13
-rw-r--r--TESTING/LIN/cchkrfp.f5
-rw-r--r--TESTING/LIN/cchksy_aa.f11
-rw-r--r--TESTING/LIN/cdrvls.f109
-rw-r--r--TESTING/LIN/cdrvsy_aa.f4
-rw-r--r--TESTING/LIN/chkxer.f22
-rw-r--r--TESTING/LIN/clahilb.f18
-rw-r--r--TESTING/LIN/clarhs.f2
-rw-r--r--TESTING/LIN/dchklqtp.f2
-rw-r--r--TESTING/LIN/dchkrfp.f5
-rw-r--r--TESTING/LIN/dchksy_aa.f11
-rw-r--r--TESTING/LIN/ddrvls.f93
-rw-r--r--TESTING/LIN/ddrvsy_aa.f2
-rw-r--r--TESTING/LIN/dlahilb.f12
-rw-r--r--TESTING/LIN/schklqtp.f2
-rw-r--r--TESTING/LIN/schkrfp.f5
-rw-r--r--TESTING/LIN/schksy_aa.f11
-rw-r--r--TESTING/LIN/sdrvls.f93
-rw-r--r--TESTING/LIN/sdrvsy_aa.f2
-rw-r--r--TESTING/LIN/serrsy.f2
-rw-r--r--TESTING/LIN/slahilb.f6
-rw-r--r--TESTING/LIN/zchkhe_aa.f11
-rw-r--r--TESTING/LIN/zchkrfp.f5
-rw-r--r--TESTING/LIN/zchksy_aa.f11
-rw-r--r--TESTING/LIN/zchktsqr.f4
-rw-r--r--TESTING/LIN/zdrvls.f109
-rw-r--r--TESTING/LIN/zdrvsy_aa.f4
-rw-r--r--TESTING/LIN/zerrsy.f2
-rw-r--r--TESTING/LIN/zlahilb.f14
-rw-r--r--TESTING/LIN/zlarhs.f2
-rw-r--r--TESTING/MATGEN/clahilb.f13
-rw-r--r--TESTING/MATGEN/dlahilb.f14
-rw-r--r--TESTING/MATGEN/slahilb.f15
-rw-r--r--TESTING/MATGEN/zlahilb.f12
55 files changed, 772 insertions, 530 deletions
diff --git a/SRC/chb2st_kernels.f b/SRC/chb2st_kernels.f
index 77ddaed..fef90ad 100644
--- a/SRC/chb2st_kernels.f
+++ b/SRC/chb2st_kernels.f
@@ -47,45 +47,87 @@
* Arguments:
* ==========
*
-*> @param[in] n
-*> The order of the matrix A.
-*>
-*> @param[in] nb
-*> The size of the band.
-*>
-*> @param[in, out] A
-*> A pointer to the matrix A.
-*>
-*> @param[in] lda
-*> The leading dimension of the matrix A.
+*> \param[in] UPLO
+*> \verbatim
+*> UPLO is CHARACTER*1
+*> \endverbatim
*>
-*> @param[out] V
-*> COMPLEX array, dimension 2*n if eigenvalues only are
-*> requested or to be queried for vectors.
+*> \param[in] WANTZ
+*> \verbatim
+*> WANTZ is LOGICAL which indicate if Eigenvalue are requested or both
+*> Eigenvalue/Eigenvectors.
+*> \endverbatim
*>
-*> @param[out] TAU
-*> COMPLEX array, dimension (2*n).
-*> The scalar factors of the Householder reflectors are stored
-*> in this array.
+*> \param[in] TTYPE
+*> \verbatim
+*> TTYPE is INTEGER
+*> \endverbatim
*>
-*> @param[in] st
+*> \param[in] ST
+*> \verbatim
+*> ST is INTEGER
*> internal parameter for indices.
+*> \endverbatim
*>
-*> @param[in] ed
+*> \param[in] ED
+*> \verbatim
+*> ED is INTEGER
*> internal parameter for indices.
+*> \endverbatim
*>
-*> @param[in] sweep
+*> \param[in] SWEEP
+*> \verbatim
+*> SWEEP is INTEGER
*> internal parameter for indices.
+*> \endverbatim
*>
-*> @param[in] Vblksiz
-*> internal parameter for indices.
+*> \param[in] N
+*> \verbatim
+*> N is INTEGER. The order of the matrix A.
+*> \endverbatim
*>
-*> @param[in] wantz
-*> logical which indicate if Eigenvalue are requested or both
-*> Eigenvalue/Eigenvectors.
+*> \param[in] NB
+*> \verbatim
+*> NB is INTEGER. The size of the band.
+*> \endverbatim
+*>
+*> \param[in] IB
+*> \verbatim
+*> IB is INTEGER.
+*> \endverbatim
+*>
+*> \param[in, out] A
+*> \verbatim
+*> A is COMPLEX array. A pointer to the matrix A.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER. The leading dimension of the matrix A.
+*> \endverbatim
+*>
+*> \param[out] V
+*> \verbatim
+*> V is COMPLEX array, dimension 2*n if eigenvalues only are
+*> requested or to be queried for vectors.
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX array, dimension (2*n).
+*> The scalar factors of the Householder reflectors are stored
+*> in this array.
+*> \endverbatim
+*>
+*> \param[in] LDVT
+*> \verbatim
+*> LDVT is INTEGER.
+*> \endverbatim
*>
-*> @param[in] work
-*> Workspace of size nb.
+*> \param[in] WORK
+*> \verbatim
+*> WORK is COMPLEX array. Workspace of size nb.
+*> \endverbatim
*>
*> \par Further Details:
* =====================
diff --git a/SRC/clasyf_aa.f b/SRC/clasyf_aa.f
index 2c8cdc4..860a023 100644
--- a/SRC/clasyf_aa.f
+++ b/SRC/clasyf_aa.f
@@ -99,12 +99,12 @@
*> \param[in] LDA
*> \verbatim
*> LDA is INTEGER
-*> The leading dimension of the array A. LDA >= max(1,N).
+*> The leading dimension of the array A. LDA >= max(1,M).
*> \endverbatim
*>
*> \param[out] IPIV
*> \verbatim
-*> IPIV is INTEGER array, dimension (N)
+*> IPIV is INTEGER array, dimension (M)
*> Details of the row and column interchanges,
*> the row and column k were interchanged with the row and
*> column IPIV(k).
@@ -217,8 +217,8 @@
*
K = J1+J-1
*
-* H(J:N, J) := A(J, J:N) - H(J:N, 1:(J-1)) * L(J1:(J-1), J),
-* where H(J:N, J) has been initialized to be A(J, J:N)
+* H(J:M, J) := A(J, J:M) - H(J:M, 1:(J-1)) * L(J1:(J-1), J),
+* where H(J:M, J) has been initialized to be A(J, J:M)
*
IF( K.GT.2 ) THEN
*
@@ -234,14 +234,14 @@
$ ONE, H( J, J ), 1 )
END IF
*
-* Copy H(i:n, i) into WORK
+* Copy H(i:M, i) into WORK
*
CALL CCOPY( M-J+1, H( J, J ), 1, WORK( 1 ), 1 )
*
IF( J.GT.K1 ) THEN
*
-* Compute WORK := WORK - L(J-1, J:N) * T(J-1,J),
-* where A(J-1, J) stores T(J-1, J) and A(J-2, J:N) stores U(J-1, J:N)
+* Compute WORK := WORK - L(J-1, J:M) * T(J-1,J),
+* where A(J-1, J) stores T(J-1, J) and A(J-2, J:M) stores U(J-1, J:M)
*
ALPHA = -A( K-1, J )
CALL CAXPY( M-J+1, ALPHA, A( K-2, J ), LDA, WORK( 1 ), 1 )
@@ -253,8 +253,8 @@
*
IF( J.LT.M ) THEN
*
-* Compute WORK(2:N) = T(J, J) L(J, (J+1):N)
-* where A(J, J) stores T(J, J) and A(J-1, (J+1):N) stores U(J, (J+1):N)
+* Compute WORK(2:M) = T(J, J) L(J, (J+1):M)
+* where A(J, J) stores T(J, J) and A(J-1, (J+1):M) stores U(J, (J+1):M)
*
IF( K.GT.1 ) THEN
ALPHA = -A( K, J )
@@ -262,7 +262,7 @@
$ WORK( 2 ), 1 )
ENDIF
*
-* Find max(|WORK(2:n)|)
+* Find max(|WORK(2:M)|)
*
I2 = ICAMAX( M-J, WORK( 2 ), 1 ) + 1
PIV = WORK( I2 )
@@ -277,14 +277,14 @@
WORK( I2 ) = WORK( I1 )
WORK( I1 ) = PIV
*
-* Swap A(I1, I1+1:N) with A(I1+1:N, I2)
+* Swap A(I1, I1+1:M) with A(I1+1:M, I2)
*
I1 = I1+J-1
I2 = I2+J-1
CALL CSWAP( I2-I1-1, A( J1+I1-1, I1+1 ), LDA,
$ A( J1+I1, I2 ), 1 )
*
-* Swap A(I1, I2+1:N) with A(I2, I2+1:N)
+* Swap A(I1, I2+1:M) with A(I2, I2+1:M)
*
CALL CSWAP( M-I2, A( J1+I1-1, I2+1 ), LDA,
$ A( J1+I2-1, I2+1 ), LDA )
@@ -324,14 +324,14 @@
*
IF( J.LT.NB ) THEN
*
-* Copy A(J+1:N, J+1) into H(J:N, J),
+* Copy A(J+1:M, J+1) into H(J:M, J),
*
CALL CCOPY( M-J, A( K+1, J+1 ), LDA,
$ H( J+1, J+1 ), 1 )
END IF
*
-* Compute L(J+2, J+1) = WORK( 3:N ) / T(J, J+1),
-* where A(J, J+1) = T(J, J+1) and A(J+2:N, J) = L(J+2:N, J+1)
+* Compute L(J+2, J+1) = WORK( 3:M ) / T(J, J+1),
+* where A(J, J+1) = T(J, J+1) and A(J+2:M, J) = L(J+2:M, J+1)
*
IF( A( K, J+1 ).NE.ZERO ) THEN
ALPHA = ONE / A( K, J+1 )
@@ -367,8 +367,8 @@
*
K = J1+J-1
*
-* H(J:N, J) := A(J:N, J) - H(J:N, 1:(J-1)) * L(J, J1:(J-1))^T,
-* where H(J:N, J) has been initialized to be A(J:N, J)
+* H(J:M, J) := A(J:M, J) - H(J:M, 1:(J-1)) * L(J, J1:(J-1))^T,
+* where H(J:M, J) has been initialized to be A(J:M, J)
*
IF( K.GT.2 ) THEN
*
@@ -384,13 +384,13 @@
$ ONE, H( J, J ), 1 )
END IF
*
-* Copy H(J:N, J) into WORK
+* Copy H(J:M, J) into WORK
*
CALL CCOPY( M-J+1, H( J, J ), 1, WORK( 1 ), 1 )
*
IF( J.GT.K1 ) THEN
*
-* Compute WORK := WORK - L(J:N, J-1) * T(J-1,J),
+* Compute WORK := WORK - L(J:M, J-1) * T(J-1,J),
* where A(J-1, J) = T(J-1, J) and A(J, J-2) = L(J, J-1)
*
ALPHA = -A( J, K-1 )
@@ -403,8 +403,8 @@
*
IF( J.LT.M ) THEN
*
-* Compute WORK(2:N) = T(J, J) L((J+1):N, J)
-* where A(J, J) = T(J, J) and A((J+1):N, J-1) = L((J+1):N, J)
+* Compute WORK(2:M) = T(J, J) L((J+1):M, J)
+* where A(J, J) = T(J, J) and A((J+1):M, J-1) = L((J+1):M, J)
*
IF( K.GT.1 ) THEN
ALPHA = -A( J, K )
@@ -412,7 +412,7 @@
$ WORK( 2 ), 1 )
ENDIF
*
-* Find max(|WORK(2:n)|)
+* Find max(|WORK(2:M)|)
*
I2 = ICAMAX( M-J, WORK( 2 ), 1 ) + 1
PIV = WORK( I2 )
@@ -427,14 +427,14 @@
WORK( I2 ) = WORK( I1 )
WORK( I1 ) = PIV
*
-* Swap A(I1+1:N, I1) with A(I2, I1+1:N)
+* Swap A(I1+1:M, I1) with A(I2, I1+1:M)
*
I1 = I1+J-1
I2 = I2+J-1
CALL CSWAP( I2-I1-1, A( I1+1, J1+I1-1 ), 1,
$ A( I2, J1+I1 ), LDA )
*
-* Swap A(I2+1:N, I1) with A(I2+1:N, I2)
+* Swap A(I2+1:M, I1) with A(I2+1:M, I2)
*
CALL CSWAP( M-I2, A( I2+1, J1+I1-1 ), 1,
$ A( I2+1, J1+I2-1 ), 1 )
@@ -473,14 +473,14 @@
*
IF( J.LT.NB ) THEN
*
-* Copy A(J+1:N, J+1) into H(J+1:N, J),
+* Copy A(J+1:M, J+1) into H(J+1:M, J),
*
CALL CCOPY( M-J, A( J+1, K+1 ), 1,
$ H( J+1, J+1 ), 1 )
END IF
*
-* Compute L(J+2, J+1) = WORK( 3:N ) / T(J, J+1),
-* where A(J, J+1) = T(J, J+1) and A(J+2:N, J) = L(J+2:N, J+1)
+* Compute L(J+2, J+1) = WORK( 3:M ) / T(J, J+1),
+* where A(J, J+1) = T(J, J+1) and A(J+2:M, J) = L(J+2:M, J+1)
*
IF( A( J+1, K ).NE.ZERO ) THEN
ALPHA = ONE / A( J+1, K )
diff --git a/SRC/dlasyf_aa.f b/SRC/dlasyf_aa.f
index 0bd2d6d..d9550e1 100644
--- a/SRC/dlasyf_aa.f
+++ b/SRC/dlasyf_aa.f
@@ -99,12 +99,12 @@
*> \param[in] LDA
*> \verbatim
*> LDA is INTEGER
-*> The leading dimension of the array A. LDA >= max(1,N).
+*> The leading dimension of the array A. LDA >= max(1,M).
*> \endverbatim
*>
*> \param[out] IPIV
*> \verbatim
-*> IPIV is INTEGER array, dimension (N)
+*> IPIV is INTEGER array, dimension (M)
*> Details of the row and column interchanges,
*> the row and column k were interchanged with the row and
*> column IPIV(k).
@@ -217,8 +217,8 @@
*
K = J1+J-1
*
-* H(J:N, J) := A(J, J:N) - H(J:N, 1:(J-1)) * L(J1:(J-1), J),
-* where H(J:N, J) has been initialized to be A(J, J:N)
+* H(J:M, J) := A(J, J:M) - H(J:M, 1:(J-1)) * L(J1:(J-1), J),
+* where H(J:M, J) has been initialized to be A(J, J:M)
*
IF( K.GT.2 ) THEN
*
@@ -234,14 +234,14 @@
$ ONE, H( J, J ), 1 )
END IF
*
-* Copy H(i:n, i) into WORK
+* Copy H(i:M, i) into WORK
*
CALL DCOPY( M-J+1, H( J, J ), 1, WORK( 1 ), 1 )
*
IF( J.GT.K1 ) THEN
*
-* Compute WORK := WORK - L(J-1, J:N) * T(J-1,J),
-* where A(J-1, J) stores T(J-1, J) and A(J-2, J:N) stores U(J-1, J:N)
+* Compute WORK := WORK - L(J-1, J:M) * T(J-1,J),
+* where A(J-1, J) stores T(J-1, J) and A(J-2, J:M) stores U(J-1, J:M)
*
ALPHA = -A( K-1, J )
CALL DAXPY( M-J+1, ALPHA, A( K-2, J ), LDA, WORK( 1 ), 1 )
@@ -253,8 +253,8 @@
*
IF( J.LT.M ) THEN
*
-* Compute WORK(2:N) = T(J, J) L(J, (J+1):N)
-* where A(J, J) stores T(J, J) and A(J-1, (J+1):N) stores U(J, (J+1):N)
+* Compute WORK(2:M) = T(J, J) L(J, (J+1):M)
+* where A(J, J) stores T(J, J) and A(J-1, (J+1):M) stores U(J, (J+1):M)
*
IF( K.GT.1 ) THEN
ALPHA = -A( K, J )
@@ -262,7 +262,7 @@
$ WORK( 2 ), 1 )
ENDIF
*
-* Find max(|WORK(2:n)|)
+* Find max(|WORK(2:M)|)
*
I2 = IDAMAX( M-J, WORK( 2 ), 1 ) + 1
PIV = WORK( I2 )
@@ -277,14 +277,14 @@
WORK( I2 ) = WORK( I1 )
WORK( I1 ) = PIV
*
-* Swap A(I1, I1+1:N) with A(I1+1:N, I2)
+* Swap A(I1, I1+1:M) with A(I1+1:M, I2)
*
I1 = I1+J-1
I2 = I2+J-1
CALL DSWAP( I2-I1-1, A( J1+I1-1, I1+1 ), LDA,
$ A( J1+I1, I2 ), 1 )
*
-* Swap A(I1, I2+1:N) with A(I2, I2+1:N)
+* Swap A(I1, I2+1:M) with A(I2, I2+1:M)
*
CALL DSWAP( M-I2, A( J1+I1-1, I2+1 ), LDA,
$ A( J1+I2-1, I2+1 ), LDA )
@@ -324,14 +324,14 @@
*
IF( J.LT.NB ) THEN
*
-* Copy A(J+1:N, J+1) into H(J:N, J),
+* Copy A(J+1:M, J+1) into H(J:M, J),
*
CALL DCOPY( M-J, A( K+1, J+1 ), LDA,
$ H( J+1, J+1 ), 1 )
END IF
*
-* Compute L(J+2, J+1) = WORK( 3:N ) / T(J, J+1),
-* where A(J, J+1) = T(J, J+1) and A(J+2:N, J) = L(J+2:N, J+1)
+* Compute L(J+2, J+1) = WORK( 3:M ) / T(J, J+1),
+* where A(J, J+1) = T(J, J+1) and A(J+2:M, J) = L(J+2:M, J+1)
*
IF( A( K, J+1 ).NE.ZERO ) THEN
ALPHA = ONE / A( K, J+1 )
@@ -367,8 +367,8 @@
*
K = J1+J-1
*
-* H(J:N, J) := A(J:N, J) - H(J:N, 1:(J-1)) * L(J, J1:(J-1))^T,
-* where H(J:N, J) has been initialized to be A(J:N, J)
+* H(J:M, J) := A(J:M, J) - H(J:M, 1:(J-1)) * L(J, J1:(J-1))^T,
+* where H(J:M, J) has been initialized to be A(J:M, J)
*
IF( K.GT.2 ) THEN
*
@@ -384,13 +384,13 @@
$ ONE, H( J, J ), 1 )
END IF
*
-* Copy H(J:N, J) into WORK
+* Copy H(J:M, J) into WORK
*
CALL DCOPY( M-J+1, H( J, J ), 1, WORK( 1 ), 1 )
*
IF( J.GT.K1 ) THEN
*
-* Compute WORK := WORK - L(J:N, J-1) * T(J-1,J),
+* Compute WORK := WORK - L(J:M, J-1) * T(J-1,J),
* where A(J-1, J) = T(J-1, J) and A(J, J-2) = L(J, J-1)
*
ALPHA = -A( J, K-1 )
@@ -403,8 +403,8 @@
*
IF( J.LT.M ) THEN
*
-* Compute WORK(2:N) = T(J, J) L((J+1):N, J)
-* where A(J, J) = T(J, J) and A((J+1):N, J-1) = L((J+1):N, J)
+* Compute WORK(2:M) = T(J, J) L((J+1):M, J)
+* where A(J, J) = T(J, J) and A((J+1):M, J-1) = L((J+1):M, J)
*
IF( K.GT.1 ) THEN
ALPHA = -A( J, K )
@@ -412,7 +412,7 @@
$ WORK( 2 ), 1 )
ENDIF
*
-* Find max(|WORK(2:n)|)
+* Find max(|WORK(2:M)|)
*
I2 = IDAMAX( M-J, WORK( 2 ), 1 ) + 1
PIV = WORK( I2 )
@@ -427,14 +427,14 @@
WORK( I2 ) = WORK( I1 )
WORK( I1 ) = PIV
*
-* Swap A(I1+1:N, I1) with A(I2, I1+1:N)
+* Swap A(I1+1:M, I1) with A(I2, I1+1:M)
*
I1 = I1+J-1
I2 = I2+J-1
CALL DSWAP( I2-I1-1, A( I1+1, J1+I1-1 ), 1,
$ A( I2, J1+I1 ), LDA )
*
-* Swap A(I2+1:N, I1) with A(I2+1:N, I2)
+* Swap A(I2+1:M, I1) with A(I2+1:M, I2)
*
CALL DSWAP( M-I2, A( I2+1, J1+I1-1 ), 1,
$ A( I2+1, J1+I2-1 ), 1 )
@@ -473,14 +473,14 @@
*
IF( J.LT.NB ) THEN
*
-* Copy A(J+1:N, J+1) into H(J+1:N, J),
+* Copy A(J+1:M, J+1) into H(J+1:M, J),
*
CALL DCOPY( M-J, A( J+1, K+1 ), 1,
$ H( J+1, J+1 ), 1 )
END IF
*
-* Compute L(J+2, J+1) = WORK( 3:N ) / T(J, J+1),
-* where A(J, J+1) = T(J, J+1) and A(J+2:N, J) = L(J+2:N, J+1)
+* Compute L(J+2, J+1) = WORK( 3:M ) / T(J, J+1),
+* where A(J, J+1) = T(J, J+1) and A(J+2:M, J) = L(J+2:M, J+1)
*
IF( A( J+1, K ).NE.ZERO ) THEN
ALPHA = ONE / A( J+1, K )
diff --git a/SRC/dsb2st_kernels.f b/SRC/dsb2st_kernels.f
index afed526..988ffc8 100644
--- a/SRC/dsb2st_kernels.f
+++ b/SRC/dsb2st_kernels.f
@@ -47,45 +47,87 @@
* Arguments:
* ==========
*
-*> @param[in] n
-*> The order of the matrix A.
-*>
-*> @param[in] nb
-*> The size of the band.
-*>
-*> @param[in, out] A
-*> A pointer to the matrix A.
-*>
-*> @param[in] lda
-*> The leading dimension of the matrix A.
+*> \param[in] UPLO
+*> \verbatim
+*> UPLO is CHARACTER*1
+*> \endverbatim
*>
-*> @param[out] V
-*> DOUBLE PRECISION array, dimension 2*n if eigenvalues only are
-*> requested or to be queried for vectors.
+*> \param[in] WANTZ
+*> \verbatim
+*> WANTZ is LOGICAL which indicate if Eigenvalue are requested or both
+*> Eigenvalue/Eigenvectors.
+*> \endverbatim
*>
-*> @param[out] TAU
-*> DOUBLE PRECISION array, dimension (2*n).
-*> The scalar factors of the Householder reflectors are stored
-*> in this array.
+*> \param[in] TTYPE
+*> \verbatim
+*> TTYPE is INTEGER
+*> \endverbatim
*>
-*> @param[in] st
+*> \param[in] ST
+*> \verbatim
+*> ST is INTEGER
*> internal parameter for indices.
+*> \endverbatim
*>
-*> @param[in] ed
+*> \param[in] ED
+*> \verbatim
+*> ED is INTEGER
*> internal parameter for indices.
+*> \endverbatim
*>
-*> @param[in] sweep
+*> \param[in] SWEEP
+*> \verbatim
+*> SWEEP is INTEGER
*> internal parameter for indices.
+*> \endverbatim
*>
-*> @param[in] Vblksiz
-*> internal parameter for indices.
+*> \param[in] N
+*> \verbatim
+*> N is INTEGER. The order of the matrix A.
+*> \endverbatim
*>
-*> @param[in] wantz
-*> logical which indicate if Eigenvalue are requested or both
-*> Eigenvalue/Eigenvectors.
+*> \param[in] NB
+*> \verbatim
+*> NB is INTEGER. The size of the band.
+*> \endverbatim
+*>
+*> \param[in] IB
+*> \verbatim
+*> IB is INTEGER.
+*> \endverbatim
+*>
+*> \param[in, out] A
+*> \verbatim
+*> A is DOUBLE PRECISION array. A pointer to the matrix A.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER. The leading dimension of the matrix A.
+*> \endverbatim
+*>
+*> \param[out] V
+*> \verbatim
+*> V is DOUBLE PRECISION array, dimension 2*n if eigenvalues only are
+*> requested or to be queried for vectors.
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is DOUBLE PRECISION array, dimension (2*n).
+*> The scalar factors of the Householder reflectors are stored
+*> in this array.
+*> \endverbatim
+*>
+*> \param[in] LDVT
+*> \verbatim
+*> LDVT is INTEGER.
+*> \endverbatim
*>
-*> @param[in] work
-*> Workspace of size nb.
+*> \param[in] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array. Workspace of size nb.
+*> \endverbatim
*>
*> \par Further Details:
* =====================
diff --git a/SRC/slasyf_aa.f b/SRC/slasyf_aa.f
index 5fb3cc9..3b4bc4b 100644
--- a/SRC/slasyf_aa.f
+++ b/SRC/slasyf_aa.f
@@ -99,12 +99,12 @@
*> \param[in] LDA
*> \verbatim
*> LDA is INTEGER
-*> The leading dimension of the array A. LDA >= max(1,N).
+*> The leading dimension of the array A. LDA >= max(1,M).
*> \endverbatim
*>
*> \param[out] IPIV
*> \verbatim
-*> IPIV is INTEGER array, dimension (N)
+*> IPIV is INTEGER array, dimension (M)
*> Details of the row and column interchanges,
*> the row and column k were interchanged with the row and
*> column IPIV(k).
@@ -217,8 +217,8 @@
*
K = J1+J-1
*
-* H(J:N, J) := A(J, J:N) - H(J:N, 1:(J-1)) * L(J1:(J-1), J),
-* where H(J:N, J) has been initialized to be A(J, J:N)
+* H(J:M, J) := A(J, J:M) - H(J:M, 1:(J-1)) * L(J1:(J-1), J),
+* where H(J:M, J) has been initialized to be A(J, J:M)
*
IF( K.GT.2 ) THEN
*
@@ -234,14 +234,14 @@
$ ONE, H( J, J ), 1 )
END IF
*
-* Copy H(i:n, i) into WORK
+* Copy H(i:M, i) into WORK
*
CALL SCOPY( M-J+1, H( J, J ), 1, WORK( 1 ), 1 )
*
IF( J.GT.K1 ) THEN
*
-* Compute WORK := WORK - L(J-1, J:N) * T(J-1,J),
-* where A(J-1, J) stores T(J-1, J) and A(J-2, J:N) stores U(J-1, J:N)
+* Compute WORK := WORK - L(J-1, J:M) * T(J-1,J),
+* where A(J-1, J) stores T(J-1, J) and A(J-2, J:M) stores U(J-1, J:M)
*
ALPHA = -A( K-1, J )
CALL SAXPY( M-J+1, ALPHA, A( K-2, J ), LDA, WORK( 1 ), 1 )
@@ -253,8 +253,8 @@
*
IF( J.LT.M ) THEN
*
-* Compute WORK(2:N) = T(J, J) L(J, (J+1):N)
-* where A(J, J) stores T(J, J) and A(J-1, (J+1):N) stores U(J, (J+1):N)
+* Compute WORK(2:M) = T(J, J) L(J, (J+1):M)
+* where A(J, J) stores T(J, J) and A(J-1, (J+1):M) stores U(J, (J+1):M)
*
IF( K.GT.1 ) THEN
ALPHA = -A( K, J )
@@ -262,7 +262,7 @@
$ WORK( 2 ), 1 )
ENDIF
*
-* Find max(|WORK(2:n)|)
+* Find max(|WORK(2:M)|)
*
I2 = ISAMAX( M-J, WORK( 2 ), 1 ) + 1
PIV = WORK( I2 )
@@ -277,14 +277,14 @@
WORK( I2 ) = WORK( I1 )
WORK( I1 ) = PIV
*
-* Swap A(I1, I1+1:N) with A(I1+1:N, I2)
+* Swap A(I1, I1+1:M) with A(I1+1:M, I2)
*
I1 = I1+J-1
I2 = I2+J-1
CALL SSWAP( I2-I1-1, A( J1+I1-1, I1+1 ), LDA,
$ A( J1+I1, I2 ), 1 )
*
-* Swap A(I1, I2+1:N) with A(I2, I2+1:N)
+* Swap A(I1, I2+1:M) with A(I2, I2+1:M)
*
CALL SSWAP( M-I2, A( J1+I1-1, I2+1 ), LDA,
$ A( J1+I2-1, I2+1 ), LDA )
@@ -324,14 +324,14 @@
*
IF( J.LT.NB ) THEN
*
-* Copy A(J+1:N, J+1) into H(J:N, J),
+* Copy A(J+1:M, J+1) into H(J:M, J),
*
CALL SCOPY( M-J, A( K+1, J+1 ), LDA,
$ H( J+1, J+1 ), 1 )
END IF
*
-* Compute L(J+2, J+1) = WORK( 3:N ) / T(J, J+1),
-* where A(J, J+1) = T(J, J+1) and A(J+2:N, J) = L(J+2:N, J+1)
+* Compute L(J+2, J+1) = WORK( 3:M ) / T(J, J+1),
+* where A(J, J+1) = T(J, J+1) and A(J+2:M, J) = L(J+2:M, J+1)
*
IF( A( K, J+1 ).NE.ZERO ) THEN
ALPHA = ONE / A( K, J+1 )
@@ -367,8 +367,8 @@
*
K = J1+J-1
*
-* H(J:N, J) := A(J:N, J) - H(J:N, 1:(J-1)) * L(J, J1:(J-1))^T,
-* where H(J:N, J) has been initialized to be A(J:N, J)
+* H(J:M, J) := A(J:M, J) - H(J:M, 1:(J-1)) * L(J, J1:(J-1))^T,
+* where H(J:M, J) has been initialized to be A(J:M, J)
*
IF( K.GT.2 ) THEN
*
@@ -384,13 +384,13 @@
$ ONE, H( J, J ), 1 )
END IF
*
-* Copy H(J:N, J) into WORK
+* Copy H(J:M, J) into WORK
*
CALL SCOPY( M-J+1, H( J, J ), 1, WORK( 1 ), 1 )
*
IF( J.GT.K1 ) THEN
*
-* Compute WORK := WORK - L(J:N, J-1) * T(J-1,J),
+* Compute WORK := WORK - L(J:M, J-1) * T(J-1,J),
* where A(J-1, J) = T(J-1, J) and A(J, J-2) = L(J, J-1)
*
ALPHA = -A( J, K-1 )
@@ -403,8 +403,8 @@
*
IF( J.LT.M ) THEN
*
-* Compute WORK(2:N) = T(J, J) L((J+1):N, J)
-* where A(J, J) = T(J, J) and A((J+1):N, J-1) = L((J+1):N, J)
+* Compute WORK(2:M) = T(J, J) L((J+1):M, J)
+* where A(J, J) = T(J, J) and A((J+1):M, J-1) = L((J+1):M, J)
*
IF( K.GT.1 ) THEN
ALPHA = -A( J, K )
@@ -412,7 +412,7 @@
$ WORK( 2 ), 1 )
ENDIF
*
-* Find max(|WORK(2:n)|)
+* Find max(|WORK(2:M)|)
*
I2 = ISAMAX( M-J, WORK( 2 ), 1 ) + 1
PIV = WORK( I2 )
@@ -427,14 +427,14 @@
WORK( I2 ) = WORK( I1 )
WORK( I1 ) = PIV
*
-* Swap A(I1+1:N, I1) with A(I2, I1+1:N)
+* Swap A(I1+1:M, I1) with A(I2, I1+1:M)
*
I1 = I1+J-1
I2 = I2+J-1
CALL SSWAP( I2-I1-1, A( I1+1, J1+I1-1 ), 1,
$ A( I2, J1+I1 ), LDA )
*
-* Swap A(I2+1:N, I1) with A(I2+1:N, I2)
+* Swap A(I2+1:M, I1) with A(I2+1:M, I2)
*
CALL SSWAP( M-I2, A( I2+1, J1+I1-1 ), 1,
$ A( I2+1, J1+I2-1 ), 1 )
@@ -473,14 +473,14 @@
*
IF( J.LT.NB ) THEN
*
-* Copy A(J+1:N, J+1) into H(J+1:N, J),
+* Copy A(J+1:M, J+1) into H(J+1:M, J),
*
CALL SCOPY( M-J, A( J+1, K+1 ), 1,
$ H( J+1, J+1 ), 1 )
END IF
*
-* Compute L(J+2, J+1) = WORK( 3:N ) / T(J, J+1),
-* where A(J, J+1) = T(J, J+1) and A(J+2:N, J) = L(J+2:N, J+1)
+* Compute L(J+2, J+1) = WORK( 3:M ) / T(J, J+1),
+* where A(J, J+1) = T(J, J+1) and A(J+2:M, J) = L(J+2:M, J+1)
*
IF( A( J+1, K ).NE.ZERO ) THEN
ALPHA = ONE / A( J+1, K )
diff --git a/SRC/ssb2st_kernels.f b/SRC/ssb2st_kernels.f
index 7183c9a..4d046d8 100644
--- a/SRC/ssb2st_kernels.f
+++ b/SRC/ssb2st_kernels.f
@@ -47,45 +47,90 @@
* Arguments:
* ==========
*
-*> @param[in] n
-*> The order of the matrix A.
-*>
-*> @param[in] nb
-*> The size of the band.
-*>
-*> @param[in, out] A
-*> A pointer to the matrix A.
-*>
-*> @param[in] lda
-*> The leading dimension of the matrix A.
+*> \param[in] UPLO
+*> \verbatim
+*> UPLO is CHARACTER*1
+*> \endverbatim
*>
-*> @param[out] V
-*> REAL array, dimension 2*n if eigenvalues only are
-*> requested or to be queried for vectors.
+*> \param[in] WANTZ
+*> \verbatim
+*> WANTZ is LOGICAL which indicate if Eigenvalue are requested or both
+*> Eigenvalue/Eigenvectors.
+*> \endverbatim
*>
-*> @param[out] TAU
-*> REAL array, dimension (2*n).
-*> The scalar factors of the Householder reflectors are stored
-*> in this array.
+*> \param[in] TTYPE
+*> \verbatim
+*> TTYPE is INTEGER
+*> \endverbatim
*>
-*> @param[in] st
+*> \param[in] ST
+*> \verbatim
+*> ST is INTEGER
*> internal parameter for indices.
+*> \endverbatim
*>
-*> @param[in] ed
+*> \param[in] ED
+*> \verbatim
+*> ED is INTEGER
*> internal parameter for indices.
+*> \endverbatim
*>
-*> @param[in] sweep
+*> \param[in] SWEEP
+*> \verbatim
+*> SWEEP is INTEGER
*> internal parameter for indices.
+*> \endverbatim
*>
-*> @param[in] Vblksiz
-*> internal parameter for indices.
+*> \param[in] N
+*> \verbatim
+*> N is INTEGER. The order of the matrix A.
+*> \endverbatim
*>
-*> @param[in] wantz
-*> logical which indicate if Eigenvalue are requested or both
-*> Eigenvalue/Eigenvectors.
+*> \param[in] NB
+*> \verbatim
+*> NB is INTEGER. The size of the band.
+*> \endverbatim
+*>
+*> \param[in] IB
+*> \verbatim
+*> IB is INTEGER.
+*> \endverbatim
+*>
+*> \param[in, out] A
+*> \verbatim
+*> A is REAL array. A pointer to the matrix A.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER. The leading dimension of the matrix A.
+*> \endverbatim
+*>
+*> \param[out] V
+*> \verbatim
+*> V is REAL array, dimension 2*n if eigenvalues only are
+*> requested or to be queried for vectors.
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is REAL array, dimension (2*n).
+*> The scalar factors of the Householder reflectors are stored
+*> in this array.
+*> \endverbatim
+*>
+*> \param[in] LDVT
+*> \verbatim
+*> LDVT is INTEGER.
+*> \endverbatim
+*>
+*> \param[in] WORK
+*> \verbatim
+*> WORK is REAL array. Workspace of size nb.
+*> \endverbatim
+*> @param[in] n
+*> The order of the matrix A.
*>
-*> @param[in] work
-*> Workspace of size nb.
*>
*> \par Further Details:
* =====================
diff --git a/SRC/zhb2st_kernels.f b/SRC/zhb2st_kernels.f
index e4114b5..862eb9d 100644
--- a/SRC/zhb2st_kernels.f
+++ b/SRC/zhb2st_kernels.f
@@ -47,45 +47,87 @@
* Arguments:
* ==========
*
-*> @param[in] n
-*> The order of the matrix A.
-*>
-*> @param[in] nb
-*> The size of the band.
-*>
-*> @param[in, out] A
-*> A pointer to the matrix A.
-*>
-*> @param[in] lda
-*> The leading dimension of the matrix A.
+*> \param[in] UPLO
+*> \verbatim
+*> UPLO is CHARACTER*1
+*> \endverbatim
*>
-*> @param[out] V
-*> COMPLEX*16 array, dimension 2*n if eigenvalues only are
-*> requested or to be queried for vectors.
+*> \param[in] WANTZ
+*> \verbatim
+*> WANTZ is LOGICAL which indicate if Eigenvalue are requested or both
+*> Eigenvalue/Eigenvectors.
+*> \endverbatim
*>
-*> @param[out] TAU
-*> COMPLEX*16 array, dimension (2*n).
-*> The scalar factors of the Householder reflectors are stored
-*> in this array.
+*> \param[in] TTYPE
+*> \verbatim
+*> TTYPE is INTEGER
+*> \endverbatim
*>
-*> @param[in] st
+*> \param[in] ST
+*> \verbatim
+*> ST is INTEGER
*> internal parameter for indices.
+*> \endverbatim
*>
-*> @param[in] ed
+*> \param[in] ED
+*> \verbatim
+*> ED is INTEGER
*> internal parameter for indices.
+*> \endverbatim
*>
-*> @param[in] sweep
+*> \param[in] SWEEP
+*> \verbatim
+*> SWEEP is INTEGER
*> internal parameter for indices.
+*> \endverbatim
*>
-*> @param[in] Vblksiz
-*> internal parameter for indices.
+*> \param[in] N
+*> \verbatim
+*> N is INTEGER. The order of the matrix A.
+*> \endverbatim
*>
-*> @param[in] wantz
-*> logical which indicate if Eigenvalue are requested or both
-*> Eigenvalue/Eigenvectors.
+*> \param[in] NB
+*> \verbatim
+*> NB is INTEGER. The size of the band.
+*> \endverbatim
+*>
+*> \param[in] IB
+*> \verbatim
+*> IB is INTEGER.
+*> \endverbatim
+*>
+*> \param[in, out] A
+*> \verbatim
+*> A is COMPLEX*16 array. A pointer to the matrix A.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER. The leading dimension of the matrix A.
+*> \endverbatim
+*>
+*> \param[out] V
+*> \verbatim
+*> V is COMPLEX*16 array, dimension 2*n if eigenvalues only are
+*> requested or to be queried for vectors.
+*> \endverbatim
+*>
+*> \param[out] TAU
+*> \verbatim
+*> TAU is COMPLEX*16 array, dimension (2*n).
+*> The scalar factors of the Householder reflectors are stored
+*> in this array.
+*> \endverbatim
+*>
+*> \param[in] LDVT
+*> \verbatim
+*> LDVT is INTEGER.
+*> \endverbatim
*>
-*> @param[in] work
-*> Workspace of size nb.
+*> \param[in] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 array. Workspace of size nb.
+*> \endverbatim
*>
*> \par Further Details:
* =====================
diff --git a/SRC/zlasyf_aa.f b/SRC/zlasyf_aa.f
index 7ac4ff3..dff7104 100644
--- a/SRC/zlasyf_aa.f
+++ b/SRC/zlasyf_aa.f
@@ -99,12 +99,12 @@
*> \param[in] LDA
*> \verbatim
*> LDA is INTEGER
-*> The leading dimension of the array A. LDA >= max(1,N).
+*> The leading dimension of the array A. LDA >= max(1,M).
*> \endverbatim
*>
*> \param[out] IPIV
*> \verbatim
-*> IPIV is INTEGER array, dimension (N)
+*> IPIV is INTEGER array, dimension (M)
*> Details of the row and column interchanges,
*> the row and column k were interchanged with the row and
*> column IPIV(k).
@@ -217,8 +217,8 @@
*
K = J1+J-1
*
-* H(J:N, J) := A(J, J:N) - H(J:N, 1:(J-1)) * L(J1:(J-1), J),
-* where H(J:N, J) has been initialized to be A(J, J:N)
+* H(J:M, J) := A(J, J:M) - H(J:M, 1:(J-1)) * L(J1:(J-1), J),
+* where H(J:M, J) has been initialized to be A(J, J:M)
*
IF( K.GT.2 ) THEN
*
@@ -234,14 +234,14 @@
$ ONE, H( J, J ), 1 )
END IF
*
-* Copy H(i:n, i) into WORK
+* Copy H(i:M, i) into WORK
*
CALL ZCOPY( M-J+1, H( J, J ), 1, WORK( 1 ), 1 )
*
IF( J.GT.K1 ) THEN
*
-* Compute WORK := WORK - L(J-1, J:N) * T(J-1,J),
-* where A(J-1, J) stores T(J-1, J) and A(J-2, J:N) stores U(J-1, J:N)
+* Compute WORK := WORK - L(J-1, J:M) * T(J-1,J),
+* where A(J-1, J) stores T(J-1, J) and A(J-2, J:M) stores U(J-1, J:M)
*
ALPHA = -A( K-1, J )
CALL ZAXPY( M-J+1, ALPHA, A( K-2, J ), LDA, WORK( 1 ), 1 )
@@ -253,8 +253,8 @@
*
IF( J.LT.M ) THEN
*
-* Compute WORK(2:N) = T(J, J) L(J, (J+1):N)
-* where A(J, J) stores T(J, J) and A(J-1, (J+1):N) stores U(J, (J+1):N)
+* Compute WORK(2:M) = T(J, J) L(J, (J+1):M)
+* where A(J, J) stores T(J, J) and A(J-1, (J+1):M) stores U(J, (J+1):M)
*
IF( K.GT.1 ) THEN
ALPHA = -A( K, J )
@@ -262,7 +262,7 @@
$ WORK( 2 ), 1 )
ENDIF
*
-* Find max(|WORK(2:n)|)
+* Find max(|WORK(2:M)|)
*
I2 = IZAMAX( M-J, WORK( 2 ), 1 ) + 1
PIV = WORK( I2 )
@@ -277,14 +277,14 @@
WORK( I2 ) = WORK( I1 )
WORK( I1 ) = PIV
*
-* Swap A(I1, I1+1:N) with A(I1+1:N, I2)
+* Swap A(I1, I1+1:M) with A(I1+1:M, I2)
*
I1 = I1+J-1
I2 = I2+J-1
CALL ZSWAP( I2-I1-1, A( J1+I1-1, I1+1 ), LDA,
$ A( J1+I1, I2 ), 1 )
*
-* Swap A(I1, I2+1:N) with A(I2, I2+1:N)
+* Swap A(I1, I2+1:M) with A(I2, I2+1:M)
*
CALL ZSWAP( M-I2, A( J1+I1-1, I2+1 ), LDA,
$ A( J1+I2-1, I2+1 ), LDA )
@@ -324,14 +324,14 @@
*
IF( J.LT.NB ) THEN
*
-* Copy A(J+1:N, J+1) into H(J:N, J),
+* Copy A(J+1:M, J+1) into H(J:M, J),
*
CALL ZCOPY( M-J, A( K+1, J+1 ), LDA,
$ H( J+1, J+1 ), 1 )
END IF
*
-* Compute L(J+2, J+1) = WORK( 3:N ) / T(J, J+1),
-* where A(J, J+1) = T(J, J+1) and A(J+2:N, J) = L(J+2:N, J+1)
+* Compute L(J+2, J+1) = WORK( 3:M ) / T(J, J+1),
+* where A(J, J+1) = T(J, J+1) and A(J+2:M, J) = L(J+2:M, J+1)
*
IF( A( K, J+1 ).NE.ZERO ) THEN
ALPHA = ONE / A( K, J+1 )
@@ -367,8 +367,8 @@
*
K = J1+J-1
*
-* H(J:N, J) := A(J:N, J) - H(J:N, 1:(J-1)) * L(J, J1:(J-1))^T,
-* where H(J:N, J) has been initialized to be A(J:N, J)
+* H(J:M, J) := A(J:M, J) - H(J:M, 1:(J-1)) * L(J, J1:(J-1))^T,
+* where H(J:M, J) has been initialized to be A(J:M, J)
*
IF( K.GT.2 ) THEN
*
@@ -384,13 +384,13 @@
$ ONE, H( J, J ), 1 )
END IF
*
-* Copy H(J:N, J) into WORK
+* Copy H(J:M, J) into WORK
*
CALL ZCOPY( M-J+1, H( J, J ), 1, WORK( 1 ), 1 )
*
IF( J.GT.K1 ) THEN
*
-* Compute WORK := WORK - L(J:N, J-1) * T(J-1,J),
+* Compute WORK := WORK - L(J:M, J-1) * T(J-1,J),
* where A(J-1, J) = T(J-1, J) and A(J, J-2) = L(J, J-1)
*
ALPHA = -A( J, K-1 )
@@ -403,8 +403,8 @@
*
IF( J.LT.M ) THEN
*
-* Compute WORK(2:N) = T(J, J) L((J+1):N, J)
-* where A(J, J) = T(J, J) and A((J+1):N, J-1) = L((J+1):N, J)
+* Compute WORK(2:M) = T(J, J) L((J+1):M, J)
+* where A(J, J) = T(J, J) and A((J+1):M, J-1) = L((J+1):M, J)
*
IF( K.GT.1 ) THEN
ALPHA = -A( J, K )
@@ -412,7 +412,7 @@
$ WORK( 2 ), 1 )
ENDIF
*
-* Find max(|WORK(2:n)|)
+* Find max(|WORK(2:M)|)
*
I2 = IZAMAX( M-J, WORK( 2 ), 1 ) + 1
PIV = WORK( I2 )
@@ -427,14 +427,14 @@
WORK( I2 ) = WORK( I1 )
WORK( I1 ) = PIV
*
-* Swap A(I1+1:N, I1) with A(I2, I1+1:N)
+* Swap A(I1+1:M, I1) with A(I2, I1+1:M)
*
I1 = I1+J-1
I2 = I2+J-1
CALL ZSWAP( I2-I1-1, A( I1+1, J1+I1-1 ), 1,
$ A( I2, J1+I1 ), LDA )
*
-* Swap A(I2+1:N, I1) with A(I2+1:N, I2)
+* Swap A(I2+1:M, I1) with A(I2+1:M, I2)
*
CALL ZSWAP( M-I2, A( I2+1, J1+I1-1 ), 1,
$ A( I2+1, J1+I2-1 ), 1 )
@@ -473,14 +473,14 @@
*
IF( J.LT.NB ) THEN
*
-* Copy A(J+1:N, J+1) into H(J+1:N, J),
+* Copy A(J+1:M, J+1) into H(J+1:M, J),
*
CALL ZCOPY( M-J, A( J+1, K+1 ), 1,
$ H( J+1, J+1 ), 1 )
END IF
*
-* Compute L(J+2, J+1) = WORK( 3:N ) / T(J, J+1),
-* where A(J, J+1) = T(J, J+1) and A(J+2:N, J) = L(J+2:N, J+1)
+* Compute L(J+2, J+1) = WORK( 3:M ) / T(J, J+1),
+* where A(J, J+1) = T(J, J+1) and A(J+2:M, J) = L(J+2:M, J+1)
*
IF( A( J+1, K ).NE.ZERO ) THEN
ALPHA = ONE / A( J+1, K )
diff --git a/TESTING/EIG/cchkhb2stg.f b/TESTING/EIG/cchkhb2stg.f
index 975217f..7a77f36 100644
--- a/TESTING/EIG/cchkhb2stg.f
+++ b/TESTING/EIG/cchkhb2stg.f
@@ -373,7 +373,7 @@
* ..
* .. External Subroutines ..
EXTERNAL SLASUM, XERBLA, CHBT21, CHBTRD, CLACPY, CLASET,
- $ CLATMR, CLATMS, CHBTRD_HB2ST, CSTEQR
+ $ CLATMR, CLATMS, CHETRD_HB2ST, CSTEQR
* ..
* .. Intrinsic Functions ..
INTRINSIC ABS, REAL, CONJG, MAX, MIN, SQRT
diff --git a/TESTING/EIG/cdrvst2stg.f b/TESTING/EIG/cdrvst2stg.f
index 12a27e5..bb8fcac 100644
--- a/TESTING/EIG/cdrvst2stg.f
+++ b/TESTING/EIG/cdrvst2stg.f
@@ -399,8 +399,7 @@
$ CHET22, CHPEV, CHPEVD, CHPEVX, CLACPY, CLASET,
$ CHEEVD_2STAGE, CHEEVR_2STAGE, CHEEVX_2STAGE,
$ CHEEV_2STAGE, CHBEV_2STAGE, CHBEVD_2STAGE,
- $ CHBEVX_2STAGE, CHETRD_2STAGE, CHETRD_SY2SB,
- $ CHETRD_SB2ST, CLATMR, CLATMS
+ $ CHBEVX_2STAGE, CLATMR, CLATMS
* ..
* .. Intrinsic Functions ..
INTRINSIC ABS, REAL, INT, LOG, MAX, MIN, SQRT
diff --git a/TESTING/EIG/cerrst.f b/TESTING/EIG/cerrst.f
index 10b2de4..b9b487c 100644
--- a/TESTING/EIG/cerrst.f
+++ b/TESTING/EIG/cerrst.f
@@ -27,8 +27,8 @@
*> CHPEV, CHPEVX, CHPEVD, and CSTEDC.
*> CHEEVD_2STAGE, CHEEVR_2STAGE, CHEEVX_2STAGE,
*> CHEEV_2STAGE, CHBEV_2STAGE, CHBEVD_2STAGE,
-*> CHBEVX_2STAGE, CHETRD_2STAGE, CHETRD_SY2SB,
-*> CHETRD_SB2ST
+*> CHBEVX_2STAGE, CHETRD_2STAGE, CHETRD_HE2HB,
+*> CHETRD_HB2ST
*> \endverbatim
*
* Arguments:
@@ -100,8 +100,8 @@
$ CUNGTR, CUNMTR, CUPGTR, CUPMTR,
$ CHEEVD_2STAGE, CHEEVR_2STAGE, CHEEVX_2STAGE,
$ CHEEV_2STAGE, CHBEV_2STAGE, CHBEVD_2STAGE,
- $ CHBEVX_2STAGE, CHETRD_2STAGE, CHETRD_SY2SB,
- $ CHETRD_SB2ST
+ $ CHBEVX_2STAGE, CHETRD_2STAGE, CHETRD_HE2HB,
+ $ CHETRD_HB2ST
* ..
* .. Scalars in Common ..
LOGICAL LERR, OK
diff --git a/TESTING/EIG/cget02.f b/TESTING/EIG/cget02.f
index f79585d..276680c 100644
--- a/TESTING/EIG/cget02.f
+++ b/TESTING/EIG/cget02.f
@@ -154,7 +154,7 @@
REAL ZERO, ONE
PARAMETER ( ZERO = 0.0E+0, ONE = 1.0E+0 )
COMPLEX CONE
- PARAMETER ( CONE = 1.0E+0 )
+ PARAMETER ( CONE = ( 1.0E+0, 0.0E+0 ) )
* ..
* .. Local Scalars ..
INTEGER J, N1, N2
@@ -191,7 +191,7 @@
* Exit with RESID = 1/EPS if ANORM = 0.
*
EPS = SLAMCH( 'Epsilon' )
- ANORM = CLANGE( '1', N1, N2, A, LDA, RWORK )
+ ANORM = CLANGE( '1', M, N, A, LDA, RWORK )
IF( ANORM.LE.ZERO ) THEN
RESID = ONE / EPS
RETURN
diff --git a/TESTING/EIG/clarhs.f b/TESTING/EIG/clarhs.f
index 6cb6547..064438b 100644
--- a/TESTING/EIG/clarhs.f
+++ b/TESTING/EIG/clarhs.f
@@ -189,8 +189,8 @@
*> \param[out] INFO
*> \verbatim
*> INFO is INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
*> \endverbatim
*
* Authors:
diff --git a/TESTING/EIG/dchksb2stg.f b/TESTING/EIG/dchksb2stg.f
index 8cd1944..9c896cf 100644
--- a/TESTING/EIG/dchksb2stg.f
+++ b/TESTING/EIG/dchksb2stg.f
@@ -363,7 +363,7 @@
* ..
* .. External Subroutines ..
EXTERNAL DLACPY, DLASET, DLASUM, DLATMR, DLATMS, DSBT21,
- $ DSBTRD, XERBLA, DSBTRD_SB2ST, DSTEQR
+ $ DSBTRD, XERBLA, DSYTRD_SB2ST, DSTEQR
* ..
* .. Intrinsic Functions ..
INTRINSIC ABS, DBLE, MAX, MIN, SQRT
diff --git a/TESTING/EIG/dget02.f b/TESTING/EIG/dget02.f
index c992b52..7b8bdd8 100644
--- a/TESTING/EIG/dget02.f
+++ b/TESTING/EIG/dget02.f
@@ -189,7 +189,7 @@
* Exit with RESID = 1/EPS if ANORM = 0.
*
EPS = DLAMCH( 'Epsilon' )
- ANORM = DLANGE( '1', N1, N2, A, LDA, RWORK )
+ ANORM = DLANGE( '1', M, N, A, LDA, RWORK )
IF( ANORM.LE.ZERO ) THEN
RESID = ONE / EPS
RETURN
diff --git a/TESTING/EIG/dlarhs.f b/TESTING/EIG/dlarhs.f
index 435f7d6..bcf3e43 100644
--- a/TESTING/EIG/dlarhs.f
+++ b/TESTING/EIG/dlarhs.f
@@ -184,8 +184,8 @@
*> \param[out] INFO
*> \verbatim
*> INFO is INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
*> \endverbatim
*
* Authors:
diff --git a/TESTING/EIG/schksb2stg.f b/TESTING/EIG/schksb2stg.f
index 07dfc83..637a018 100644
--- a/TESTING/EIG/schksb2stg.f
+++ b/TESTING/EIG/schksb2stg.f
@@ -363,7 +363,7 @@
* ..
* .. External Subroutines ..
EXTERNAL SLACPY, SLASET, SLASUM, SLATMR, SLATMS, SSBT21,
- $ SSBTRD, XERBLA, SSBTRD_SB2ST, SSTEQR
+ $ SSBTRD, XERBLA, SSYTRD_SB2ST, SSTEQR
* ..
* .. Intrinsic Functions ..
INTRINSIC ABS, REAL, MAX, MIN, SQRT
diff --git a/TESTING/EIG/sget02.f b/TESTING/EIG/sget02.f
index 5054686..430e8d0 100644
--- a/TESTING/EIG/sget02.f
+++ b/TESTING/EIG/sget02.f
@@ -189,7 +189,7 @@
* Exit with RESID = 1/EPS if ANORM = 0.
*
EPS = SLAMCH( 'Epsilon' )
- ANORM = SLANGE( '1', N1, N2, A, LDA, RWORK )
+ ANORM = SLANGE( '1', M, N, A, LDA, RWORK )
IF( ANORM.LE.ZERO ) THEN
RESID = ONE / EPS
RETURN
diff --git a/TESTING/EIG/slarhs.f b/TESTING/EIG/slarhs.f
index e4a8159..1da24c7 100644
--- a/TESTING/EIG/slarhs.f
+++ b/TESTING/EIG/slarhs.f
@@ -184,8 +184,8 @@
*> \param[out] INFO
*> \verbatim
*> INFO is INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
*> \endverbatim
*
* Authors:
diff --git a/TESTING/EIG/zget02.f b/TESTING/EIG/zget02.f
index b157379..49ea2ca 100644
--- a/TESTING/EIG/zget02.f
+++ b/TESTING/EIG/zget02.f
@@ -154,7 +154,7 @@
DOUBLE PRECISION ZERO, ONE
PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 )
COMPLEX*16 CONE
- PARAMETER ( CONE = 1.0D+0 )
+ PARAMETER ( CONE = ( 1.0D+0, 0.0D+0 ) )
* ..
* .. Local Scalars ..
INTEGER J, N1, N2
@@ -191,7 +191,7 @@
* Exit with RESID = 1/EPS if ANORM = 0.
*
EPS = DLAMCH( 'Epsilon' )
- ANORM = ZLANGE( '1', N1, N2, A, LDA, RWORK )
+ ANORM = ZLANGE( '1', M, N, A, LDA, RWORK )
IF( ANORM.LE.ZERO ) THEN
RESID = ONE / EPS
RETURN
diff --git a/TESTING/EIG/zlarhs.f b/TESTING/EIG/zlarhs.f
index 76bd2cb..19bc349 100644
--- a/TESTING/EIG/zlarhs.f
+++ b/TESTING/EIG/zlarhs.f
@@ -189,8 +189,8 @@
*> \param[out] INFO
*> \verbatim
*> INFO is INTEGER
-*> = 0: successful exit
-*> < 0: if INFO = -i, the i-th argument had an illegal value
+*> = 0: successful exit
+*> < 0: if INFO = -i, the i-th argument had an illegal value
*> \endverbatim
*
* Authors:
diff --git a/TESTING/LIN/cchkhe_aa.f b/TESTING/LIN/cchkhe_aa.f
index cb1f07b..8b6308c 100644
--- a/TESTING/LIN/cchkhe_aa.f
+++ b/TESTING/LIN/cchkhe_aa.f
@@ -218,18 +218,13 @@
INTEGER ISEED( 4 ), ISEEDY( 4 )
REAL RESULT( NTESTS )
* ..
-* .. External Functions ..
- REAL DGET06, CLANHE
- EXTERNAL DGET06, CLANHE
-* ..
* .. External Subroutines ..
- EXTERNAL ALAERH, ALAHD, ALASUM, XLAENV, CERRHE, CGET04,
- $ ZHECON, CHERFS, CHET01_AA, CHETRF_AA, ZHETRI2,
- $ CHETRS_AA, CLACPY, CLAIPD, CLARHS, CLATB4,
- $ CLATMS, CPOT02, ZPOT03, ZPOT05
+ EXTERNAL ALAERH, ALAHD, ALASUM, XLAENV, CERRHE, CHET01_AA,
+ $ CHETRF_AA, CHETRS_AA, CLACPY, CLAIPD, CLARHS,
+ $ CLATB4, CLATMS, CPOT02
* ..
* .. Intrinsic Functions ..
- INTRINSIC REAL, IMAG, MAX, MIN
+ INTRINSIC MAX, MIN
* ..
* .. Scalars in Common ..
LOGICAL LERR, OK
diff --git a/TESTING/LIN/cchkrfp.f b/TESTING/LIN/cchkrfp.f
index 6e903eb..df16ad7 100644
--- a/TESTING/LIN/cchkrfp.f
+++ b/TESTING/LIN/cchkrfp.f
@@ -218,11 +218,6 @@
STOP
END IF
*
- IF( FATAL ) THEN
- WRITE( NOUT, FMT = 9999 )
- STOP
- END IF
-*
* Calculate and print the machine dependent constants.
*
EPS = SLAMCH( 'Underflow threshold' )
diff --git a/TESTING/LIN/cchksy_aa.f b/TESTING/LIN/cchksy_aa.f
index 33bbad1..0b29117 100644
--- a/TESTING/LIN/cchksy_aa.f
+++ b/TESTING/LIN/cchksy_aa.f
@@ -218,15 +218,10 @@
INTEGER ISEED( 4 ), ISEEDY( 4 )
REAL RESULT( NTESTS )
* ..
-* .. External Functions ..
- REAL DGET06, CLANSY
- EXTERNAL DGET06, CLANSY
-* ..
* .. External Subroutines ..
- EXTERNAL ALAERH, ALAHD, ALASUM, CERRSY, CGET04, CLACPY,
- $ CLARHS, CLATB4, CLATMS, CSYT02, DSYT03, DSYT05,
- $ DSYCON, CSYRFS, CSYT01_AA, CSYTRF_AA,
- $ DSYTRI2, CSYTRS_AA, XLAENV
+ EXTERNAL ALAERH, ALAHD, ALASUM, CERRSY, CLACPY, CLARHS,
+ $ CLATB4, CLATMS, CSYT02, CSYT01_AA, CSYTRF_AA,
+ $ CSYTRS_AA, XLAENV
* ..
* .. Intrinsic Functions ..
INTRINSIC MAX, MIN
diff --git a/TESTING/LIN/cdrvls.f b/TESTING/LIN/cdrvls.f
index b9b8e0f..180e26d 100644
--- a/TESTING/LIN/cdrvls.f
+++ b/TESTING/LIN/cdrvls.f
@@ -237,9 +237,9 @@
REAL EPS, NORMA, NORMB, RCOND
* ..
* .. Local Arrays ..
- INTEGER ISEED( 4 ), ISEEDY( 4 ), IWORKQUERY
- REAL RESULT( NTESTS ), RWORKQUERY
- COMPLEX WORKQUERY
+ INTEGER ISEED( 4 ), ISEEDY( 4 ), IWQ
+ REAL RESULT( NTESTS ), RWQ
+ COMPLEX WQ
* ..
* .. Allocatable Arrays ..
COMPLEX, ALLOCATABLE :: WORK (:)
@@ -324,48 +324,85 @@
M = MMAX
N = NMAX
NRHS = NSMAX
- LDA = MAX( 1, M )
- LDB = MAX( 1, M, N )
MNMIN = MAX( MIN( M, N ), 1 )
*
* Compute workspace needed for routines
* CQRT14, CQRT17 (two side cases), CQRT15 and CQRT12
*
- LWORK = MAX( ( M+N )*NRHS,
+ LWORK = MAX( 1, ( M+N )*NRHS,
$ ( N+NRHS )*( M+2 ), ( M+NRHS )*( N+2 ),
$ MAX( M+MNMIN, NRHS*MNMIN,2*N+M ),
$ MAX( M*N+4*MNMIN+MAX(M,N), M*N+2*MNMIN+4*N ) )
+ LRWORK = 1
+ LIWORK = 1
+*
+* Iterate through all test cases and compute necessary workspace
+* sizes for ?GELS, ?GETSLS, ?GELSY, ?GELSS and ?GELSD routines.
+*
+ DO IM = 1, NM
+ M = MVAL( IM )
+ LDA = MAX( 1, M )
+ DO IN = 1, NN
+ N = NVAL( IN )
+ MNMIN = MAX(MIN( M, N ),1)
+ LDB = MAX( 1, M, N )
+ DO INS = 1, NNS
+ NRHS = NSVAL( INS )
+ DO IRANK = 1, 2
+ DO ISCALE = 1, 3
+ ITYPE = ( IRANK-1 )*3 + ISCALE
+ IF( DOTYPE( ITYPE ) ) THEN
+ IF( IRANK.EQ.1 ) THEN
+ DO ITRAN = 1, 2
+ IF( ITRAN.EQ.1 ) THEN
+ TRANS = 'N'
+ ELSE
+ TRANS = 'C'
+ END IF
+*
+* Compute workspace needed for CGELS
+ CALL CGELS( TRANS, M, N, NRHS, A, LDA,
+ $ B, LDB, WQ, -1, INFO )
+ LWORK_CGELS = INT( WQ )
+* Compute workspace needed for CGETSLS
+ CALL CGETSLS( TRANS, M, N, NRHS, A, LDA,
+ $ B, LDB, WQ, -1, INFO )
+ LWORK_CGETSLS = INT( WQ )
+ ENDDO
+ END IF
+* Compute workspace needed for CGELSY
+ CALL CGELSY( M, N, NRHS, A, LDA, B, LDB,
+ $ IWQ, RCOND, CRANK, WQ, -1, RWORK,
+ $ INFO )
+ LWORK_CGELSY = INT( WQ )
+ LRWORK_CGELSY = 2*N
+* Compute workspace needed for CGELSS
+ CALL CGELSS( M, N, NRHS, A, LDA, B, LDB, S,
+ $ RCOND, CRANK, WQ, -1, RWORK, INFO )
+ LWORK_CGELSS = INT( WQ )
+ LRWORK_CGELSS = 5*MNMIN
+* Compute workspace needed for CGELSD
+ CALL CGELSD( M, N, NRHS, A, LDA, B, LDB, S,
+ $ RCOND, CRANK, WQ, -1, RWQ, IWQ,
+ $ INFO )
+ LWORK_CGELSD = INT( WQ )
+ LRWORK_CGELSD = INT( RWQ )
+* Compute LIWORK workspace needed for CGELSY and CGELSD
+ LIWORK = MAX( LIWORK, N, IWQ )
+* Compute LRWORK workspace needed for CGELSY, CGELSS and CGELSD
+ LRWORK = MAX( LRWORK, LRWORK_CGELSY,
+ $ LRWORK_CGELSS, LRWORK_CGELSD )
+* Compute LWORK workspace needed for all functions
+ LWORK = MAX( LWORK, LWORK_CGELS, LWORK_CGETSLS,
+ $ LWORK_CGELSY, LWORK_CGELSS,
+ $ LWORK_CGELSD )
+ END IF
+ ENDDO
+ ENDDO
+ ENDDO
+ ENDDO
+ ENDDO
*
-* Compute workspace needed for CGELS
- CALL CGELS( 'N', M, N, NRHS, A, LDA, B, LDB,
- $ WORKQUERY, -1, INFO )
- LWORK_CGELS = INT( WORKQUERY )
-* Compute workspace needed for CGETSLS
- CALL CGETSLS( 'N', M, N, NRHS, A, LDA, B, LDB,
- $ WORKQUERY, -1, INFO )
- LWORK_CGETSLS = INT( WORKQUERY )
-* Compute workspace needed for CGELSY
- CALL CGELSY( M, N, NRHS, A, LDA, B, LDB, IWORKQUERY,
- $ RCOND, CRANK, WORKQUERY, -1, RWORK, INFO )
- LWORK_CGELSY = INT( WORKQUERY )
- LRWORK_CGELSY = 2*N
-* Compute workspace needed for CGELSS
- CALL CGELSS( M, N, NRHS, A, LDA, B, LDB, S,
- $ RCOND, CRANK, WORKQUERY, -1, RWORK, INFO )
- LWORK_CGELSS = INT( WORKQUERY )
- LRWORK_CGELSS = 5*MNMIN
-* Compute workspace needed for CGELSD
- CALL CGELSD( M, N, NRHS, A, LDA, B, LDB, S, RCOND, CRANK,
- $ WORKQUERY, -1, RWORKQUERY, IWORKQUERY, INFO )
- LWORK_CGELSD = INT( WORKQUERY )
- LRWORK_CGELSD = INT( RWORKQUERY )
-* Compute LIWORK workspace needed for CGELSY and CGELSD
- LIWORK = MAX( 1, N, IWORKQUERY )
-* Compute LRWORK workspace needed for CGELSY, CGELSS and CGELSD
- LRWORK = MAX( 1, LRWORK_CGELSY, LRWORK_CGELSS, LRWORK_CGELSD )
-* Compute LWORK workspace needed for all functions
- LWORK = MAX( 1, LWORK, LWORK_CGELS, LWORK_CGETSLS, LWORK_CGELSY,
- $ LWORK_CGELSS, LWORK_CGELSD )
LWLSY = LWORK
*
ALLOCATE( WORK( LWORK ) )
diff --git a/TESTING/LIN/cdrvsy_aa.f b/TESTING/LIN/cdrvsy_aa.f
index b1a5f11..ee8f16e 100644
--- a/TESTING/LIN/cdrvsy_aa.f
+++ b/TESTING/LIN/cdrvsy_aa.f
@@ -204,8 +204,8 @@
EXTERNAL DGET06, CLANSY
* ..
* .. External Subroutines ..
- EXTERNAL ALADHD, ALAERH, ALASVM, DERRVX, CGET04, CLACPY,
- $ CLARHS, CLASET, CLATB4, CLATMS, CSYT02, DSYT05,
+ EXTERNAL ALADHD, ALAERH, ALASVM, CERRVX, CGET04, CLACPY,
+ $ CLARHS, CLASET, CLATB4, CLATMS, CSYT02,
$ CSYSV_AA, CSYT01_AA, CSYTRF_AA, XLAENV
* ..
* .. Scalars in Common ..
diff --git a/TESTING/LIN/chkxer.f b/TESTING/LIN/chkxer.f
index 86a44e3..44c1be4 100644
--- a/TESTING/LIN/chkxer.f
+++ b/TESTING/LIN/chkxer.f
@@ -14,25 +14,7 @@
* LOGICAL LERR, OK
* CHARACTER*(*) SRNAMT
* INTEGER INFOT, NOUT
-* ..
-* .. Intrinsic Functions ..
-* INTRINSIC LEN_TRIM
-* ..
-* .. Executable Statements ..
-* IF( .NOT.LERR ) THEN
-* WRITE( NOUT, FMT = 9999 )INFOT,
-* $ SRNAMT( 1:LEN_TRIM( SRNAMT ) )
-* OK = .FALSE.
-* END IF
-* LERR = .FALSE.
-* RETURN
-*
-* 9999 FORMAT( ' *** Illegal value of parameter number ', I2,
-* $ ' not detected by ', A6, ' ***' )
-*
-* End of CHKXER.
-*
-* END
+*
*
*> \par Purpose:
* =============
@@ -59,7 +41,7 @@
* =====================================================================
SUBROUTINE CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
*
-* -- LAPACK test routine (input) --
+* -- 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..--
* December 2016
diff --git a/TESTING/LIN/clahilb.f b/TESTING/LIN/clahilb.f
index 0ce9eb1..65c1340 100644
--- a/TESTING/LIN/clahilb.f
+++ b/TESTING/LIN/clahilb.f
@@ -8,11 +8,11 @@
* Definition:
* ===========
*
-* SUBROUTINE CLAHILB(N, NRHS, A, LDA, X, LDX, B, LDB, WORK,
+* SUBROUTINE CLAHILB( N, NRHS, A, LDA, X, LDX, B, LDB, WORK,
* INFO, PATH)
*
* .. Scalar Arguments ..
-* INTEGER T, N, NRHS, LDA, LDX, LDB, INFO
+* INTEGER N, NRHS, LDA, LDX, LDB, INFO
* .. Array Arguments ..
* REAL WORK(N)
* COMPLEX A(LDA,N), X(LDX, NRHS), B(LDB, NRHS)
@@ -56,7 +56,7 @@
*>
*> \param[in] NRHS
*> \verbatim
-*> NRHS is NRHS
+*> NRHS is INTEGER
*> The requested number of right-hand sides.
*> \endverbatim
*>
@@ -131,7 +131,7 @@
*> \ingroup complex_lin
*
* =====================================================================
- SUBROUTINE CLAHILB(N, NRHS, A, LDA, X, LDX, B, LDB, WORK,
+ SUBROUTINE CLAHILB( N, NRHS, A, LDA, X, LDX, B, LDB, WORK,
$ INFO, PATH)
*
* -- LAPACK test routine (version 3.7.0) --
@@ -140,7 +140,7 @@
* December 2016
*
* .. Scalar Arguments ..
- INTEGER T, N, NRHS, LDA, LDX, LDB, INFO
+ INTEGER N, NRHS, LDA, LDX, LDB, INFO
* .. Array Arguments ..
REAL WORK(N)
COMPLEX A(LDA,N), X(LDX, NRHS), B(LDB, NRHS)
@@ -220,7 +220,8 @@
END DO
*
* Generate the scaled Hilbert matrix in A
-* If we are testing SY routines, take D1_i = D2_i, else, D1_i = D2_i*
+* If we are testing SY routines, take
+* D1_i = D2_i, else, D1_i = D2_i*
IF ( LSAMEN( 2, C2, 'SY' ) ) THEN
DO J = 1, N
DO I = 1, N
@@ -250,8 +251,9 @@
WORK(J) = ( ( (WORK(J-1)/(J-1)) * (J-1 - N) ) /(J-1) )
$ * (N +J -1)
END DO
-*
-* If we are testing SY routines, take D1_i = D2_i, else, D1_i = D2_i*
+
+* If we are testing SY routines,
+* take D1_i = D2_i, else, D1_i = D2_i*
IF ( LSAMEN( 2, C2, 'SY' ) ) THEN
DO J = 1, NRHS
DO I = 1, N
diff --git a/TESTING/LIN/clarhs.f b/TESTING/LIN/clarhs.f
index ddf5706..e7c4b74 100644
--- a/TESTING/LIN/clarhs.f
+++ b/TESTING/LIN/clarhs.f
@@ -190,7 +190,7 @@
*> \verbatim
*> INFO is INTEGER
*> = 0: successful exit
-*> < 0: if INFO = -k, the k-th argument had an illegal value
+*> < 0: if INFO = -i, the i-th argument had an illegal value
*> \endverbatim
*
* Authors:
diff --git a/TESTING/LIN/dchklqtp.f b/TESTING/LIN/dchklqtp.f
index 42ebc96..936b22f 100644
--- a/TESTING/LIN/dchklqtp.f
+++ b/TESTING/LIN/dchklqtp.f
@@ -132,7 +132,7 @@
DOUBLE PRECISION RESULT( NTESTS )
* ..
* .. External Subroutines ..
- EXTERNAL ALAERH, ALAHD, ALASUM, DERRLQTP, DLQT04
+ EXTERNAL ALAERH, ALAHD, ALASUM, DERRLQTP, DLQT05
* ..
* .. Scalars in Common ..
LOGICAL LERR, OK
diff --git a/TESTING/LIN/dchkrfp.f b/TESTING/LIN/dchkrfp.f
index d6c50fb..2b3a883 100644
--- a/TESTING/LIN/dchkrfp.f
+++ b/TESTING/LIN/dchkrfp.f
@@ -217,11 +217,6 @@
STOP
END IF
*
- IF( FATAL ) THEN
- WRITE( NOUT, FMT = 9999 )
- STOP
- END IF
-*
* Calculate and print the machine dependent constants.
*
EPS = DLAMCH( 'Underflow threshold' )
diff --git a/TESTING/LIN/dchksy_aa.f b/TESTING/LIN/dchksy_aa.f
index 53d7db6..f30495a 100644
--- a/TESTING/LIN/dchksy_aa.f
+++ b/TESTING/LIN/dchksy_aa.f
@@ -215,15 +215,10 @@
INTEGER ISEED( 4 ), ISEEDY( 4 )
DOUBLE PRECISION RESULT( NTESTS )
* ..
-* .. External Functions ..
- DOUBLE PRECISION DGET06, DLANSY
- EXTERNAL DGET06, DLANSY
-* ..
* .. External Subroutines ..
- EXTERNAL ALAERH, ALAHD, ALASUM, DERRSY, DGET04, DLACPY,
- $ DLARHS, DLATB4, DLATMS, DPOT02, DPOT03, DPOT05,
- $ DSYCON, DSYRFS, DSYT01_AA, DSYTRF_AA,
- $ DSYTRI2, DSYTRS_AA, XLAENV
+ EXTERNAL ALAERH, ALAHD, ALASUM, DERRSY, DLACPY, DLARHS,
+ $ DLATB4, DLATMS, DPOT02, DSYT01_AA, DSYTRF_AA,
+ $ DSYTRS_AA, XLAENV
* ..
* .. Intrinsic Functions ..
INTRINSIC MAX, MIN
diff --git a/TESTING/LIN/ddrvls.f b/TESTING/LIN/ddrvls.f
index 5d190e1..a06701b 100644
--- a/TESTING/LIN/ddrvls.f
+++ b/TESTING/LIN/ddrvls.f
@@ -233,8 +233,8 @@
DOUBLE PRECISION EPS, NORMA, NORMB, RCOND
* ..
* .. Local Arrays ..
- INTEGER ISEED( 4 ), ISEEDY( 4 ), IWORKQUERY
- DOUBLE PRECISION RESULT( NTESTS ), WORKQUERY
+ INTEGER ISEED( 4 ), ISEEDY( 4 ), IWQ
+ DOUBLE PRECISION RESULT( NTESTS ), WQ
* ..
* .. Allocatable Arrays ..
DOUBLE PRECISION, ALLOCATABLE :: WORK (:)
@@ -321,43 +321,76 @@
M = MMAX
N = NMAX
NRHS = NSMAX
- LDA = MAX( 1, M )
- LDB = MAX( 1, M, N )
MNMIN = MAX( MIN( M, N ), 1 )
*
* Compute workspace needed for routines
* DQRT14, DQRT17 (two side cases), DQRT15 and DQRT12
*
- LWORK = MAX( ( M+N )*NRHS,
+ LWORK = MAX( 1, ( M+N )*NRHS,
$ ( N+NRHS )*( M+2 ), ( M+NRHS )*( N+2 ),
$ MAX( M+MNMIN, NRHS*MNMIN,2*N+M ),
$ MAX( M*N+4*MNMIN+MAX(M,N), M*N+2*MNMIN+4*N ) )
+ LIWORK = 1
+*
+* Iterate through all test cases and compute necessary workspace
+* sizes for ?GELS, ?GETSLS, ?GELSY, ?GELSS and ?GELSD routines.
+*
+ DO IM = 1, NM
+ M = MVAL( IM )
+ LDA = MAX( 1, M )
+ DO IN = 1, NN
+ N = NVAL( IN )
+ MNMIN = MAX(MIN( M, N ),1)
+ LDB = MAX( 1, M, N )
+ DO INS = 1, NNS
+ NRHS = NSVAL( INS )
+ DO IRANK = 1, 2
+ DO ISCALE = 1, 3
+ ITYPE = ( IRANK-1 )*3 + ISCALE
+ IF( DOTYPE( ITYPE ) ) THEN
+ IF( IRANK.EQ.1 ) THEN
+ DO ITRAN = 1, 2
+ IF( ITRAN.EQ.1 ) THEN
+ TRANS = 'N'
+ ELSE
+ TRANS = 'T'
+ END IF
+*
+* Compute workspace needed for DGELS
+ CALL DGELS( TRANS, M, N, NRHS, A, LDA,
+ $ B, LDB, WQ, -1, INFO )
+ LWORK_DGELS = INT ( WQ )
+* Compute workspace needed for DGETSLS
+ CALL DGETSLS( TRANS, M, N, NRHS, A, LDA,
+ $ B, LDB, WQ, -1, INFO )
+ LWORK_DGETSLS = INT( WQ )
+ ENDDO
+ END IF
+* Compute workspace needed for DGELSY
+ CALL DGELSY( M, N, NRHS, A, LDA, B, LDB, IWQ,
+ $ RCOND, CRANK, WQ, -1, INFO )
+ LWORK_DGELSY = INT( WQ )
+* Compute workspace needed for DGELSS
+ CALL DGELSS( M, N, NRHS, A, LDA, B, LDB, S,
+ $ RCOND, CRANK, WQ, -1 , INFO )
+ LWORK_DGELSS = INT( WQ )
+* Compute workspace needed for DGELSD
+ CALL DGELSD( M, N, NRHS, A, LDA, B, LDB, S,
+ $ RCOND, CRANK, WQ, -1, IWQ, INFO )
+ LWORK_DGELSD = INT( WQ )
+* Compute LIWORK workspace needed for DGELSY and DGELSD
+ LIWORK = MAX( LIWORK, N, IWQ )
+* Compute LWORK workspace needed for all functions
+ LWORK = MAX( LWORK, LWORK_DGELS, LWORK_DGETSLS,
+ $ LWORK_DGELSY, LWORK_DGELSS,
+ $ LWORK_DGELSD )
+ END IF
+ ENDDO
+ ENDDO
+ ENDDO
+ ENDDO
+ ENDDO
*
-* Compute workspace needed for DGELS
- CALL DGELS( 'N', M, N, NRHS, A, LDA, B, LDB,
- $ WORKQUERY, -1, INFO )
- LWORK_DGELS = INT ( WORKQUERY )
-* Compute workspace needed for DGETSLS
- CALL DGETSLS( 'N', M, N, NRHS, A, LDA, B, LDB,
- $ WORKQUERY, -1, INFO )
- LWORK_DGETSLS = INT( WORKQUERY )
-* Compute workspace needed for DGELSY
- CALL DGELSY( M, N, NRHS, A, LDA, B, LDB, IWORKQUERY,
- $ RCOND, CRANK, WORKQUERY, -1, INFO )
- LWORK_DGELSY = INT( WORKQUERY )
-* Compute workspace needed for DGELSS
- CALL DGELSS( M, N, NRHS, A, LDA, B, LDB, S,
- $ RCOND, CRANK, WORKQUERY, -1 , INFO )
- LWORK_DGELSS = INT( WORKQUERY )
-* Compute workspace needed for DGELSD
- CALL DGELSD( M, N, NRHS, A, LDA, B, LDB, S,
- $ RCOND, CRANK, WORKQUERY, -1, IWORKQUERY, INFO )
- LWORK_DGELSD = INT( WORKQUERY )
-* Compute LIWORK workspace needed for DGELSY and DGELSD
- LIWORK = MAX( 1, N, IWORKQUERY )
-* Compute LWORK workspace needed for all functions
- LWORK = MAX( 1, LWORK, LWORK_DGELS, LWORK_DGETSLS, LWORK_DGELSY,
- $ LWORK_DGELSS, LWORK_DGELSD )
LWLSY = LWORK
*
ALLOCATE( WORK( LWORK ) )
diff --git a/TESTING/LIN/ddrvsy_aa.f b/TESTING/LIN/ddrvsy_aa.f
index af39303..51860d8 100644
--- a/TESTING/LIN/ddrvsy_aa.f
+++ b/TESTING/LIN/ddrvsy_aa.f
@@ -201,7 +201,7 @@
* ..
* .. External Subroutines ..
EXTERNAL ALADHD, ALAERH, ALASVM, DERRVX, DGET04, DLACPY,
- $ DLARHS, DLASET, DLATB4, DLATMS, DPOT02, DPOT05,
+ $ DLARHS, DLASET, DLATB4, DLATMS, DPOT02,
$ DSYSV_AA, DSYT01_AA, DSYTRF_AA, XLAENV
* ..
* .. Scalars in Common ..
diff --git a/TESTING/LIN/dlahilb.f b/TESTING/LIN/dlahilb.f
index a1989d5..60b9c27 100644
--- a/TESTING/LIN/dlahilb.f
+++ b/TESTING/LIN/dlahilb.f
@@ -8,7 +8,7 @@
* Definition:
* ===========
*
-* SUBROUTINE DLAHILB(N, NRHS, A, LDA, X, LDX, B, LDB, WORK, INFO)
+* SUBROUTINE DLAHILB( N, NRHS, A, LDA, X, LDX, B, LDB, WORK, INFO)
*
* .. Scalar Arguments ..
* INTEGER N, NRHS, LDA, LDX, LDB, INFO
@@ -53,7 +53,7 @@
*>
*> \param[in] NRHS
*> \verbatim
-*> NRHS is NRHS
+*> NRHS is INTEGER
*> The requested number of right-hand sides.
*> \endverbatim
*>
@@ -122,7 +122,7 @@
*> \ingroup double_lin
*
* =====================================================================
- SUBROUTINE DLAHILB(N, NRHS, A, LDA, X, LDX, B, LDB, WORK, INFO)
+ SUBROUTINE DLAHILB( N, NRHS, A, LDA, X, LDX, B, LDB, WORK, INFO)
*
* -- LAPACK test routine (version 3.7.0) --
* -- LAPACK is a software package provided by Univ. of Tennessee, --
@@ -140,7 +140,6 @@
INTEGER TM, TI, R
INTEGER M
INTEGER I, J
- COMPLEX*16 TMP
* ..
* .. Parameters ..
* NMAX_EXACT the largest dimension where the generated data is
@@ -203,9 +202,8 @@
*
* Generate matrix B as simply the first NRHS columns of M * the
* identity.
- TMP = DBLE(M)
- CALL DLASET('Full', N, NRHS, 0.0D+0, TMP, B, LDB)
-*
+ CALL DLASET('Full', N, NRHS, 0.0D+0, DBLE(M), B, LDB)
+
* Generate the true solutions in X. Because B = the first NRHS
* columns of M*I, the true solutions are just the first NRHS columns
* of the inverse Hilbert matrix.
diff --git a/TESTING/LIN/schklqtp.f b/TESTING/LIN/schklqtp.f
index 183882e..f09440d 100644
--- a/TESTING/LIN/schklqtp.f
+++ b/TESTING/LIN/schklqtp.f
@@ -132,7 +132,7 @@
REAL RESULT( NTESTS )
* ..
* .. External Subroutines ..
- EXTERNAL ALAERH, ALAHD, ALASUM, DERRLQTP, DLQT04
+ EXTERNAL ALAERH, ALAHD, ALASUM, SERRLQTP, SLQT05
* ..
* .. Scalars in Common ..
LOGICAL LERR, OK
diff --git a/TESTING/LIN/schkrfp.f b/TESTING/LIN/schkrfp.f
index 75d19e3..e3406f1 100644
--- a/TESTING/LIN/schkrfp.f
+++ b/TESTING/LIN/schkrfp.f
@@ -216,11 +216,6 @@
STOP
END IF
*
- IF( FATAL ) THEN
- WRITE( NOUT, FMT = 9999 )
- STOP
- END IF
-*
* Calculate and print the machine dependent constants.
*
EPS = SLAMCH( 'Underflow threshold' )
diff --git a/TESTING/LIN/schksy_aa.f b/TESTING/LIN/schksy_aa.f
index 35b1d95..304cfc4 100644
--- a/TESTING/LIN/schksy_aa.f
+++ b/TESTING/LIN/schksy_aa.f
@@ -215,15 +215,10 @@
INTEGER ISEED( 4 ), ISEEDY( 4 )
REAL RESULT( NTESTS )
* ..
-* .. External Functions ..
- REAL DGET06, SLANSY
- EXTERNAL DGET06, SLANSY
-* ..
* .. External Subroutines ..
- EXTERNAL ALAERH, ALAHD, ALASUM, SERRSY, SGET04, SLACPY,
- $ SLARHS, SLATB4, SLATMS, SPOT02, DPOT03, DPOT05,
- $ DSYCON, SSYRFS, SSYT01_AA, SSYTRF_AA,
- $ DSYTRI2, SSYTRS_AA, XLAENV
+ EXTERNAL ALAERH, ALAHD, ALASUM, SERRSY, SLACPY, SLARHS,
+ $ SLATB4, SLATMS, SPOT02, SSYT01_AA, SSYTRF_AA,
+ $ SSYTRS_AA, XLAENV
* ..
* .. Intrinsic Functions ..
INTRINSIC MAX, MIN
diff --git a/TESTING/LIN/sdrvls.f b/TESTING/LIN/sdrvls.f
index c408a9b..a7ecdbc 100644
--- a/TESTING/LIN/sdrvls.f
+++ b/TESTING/LIN/sdrvls.f
@@ -233,8 +233,8 @@
REAL EPS, NORMA, NORMB, RCOND
* ..
* .. Local Arrays ..
- INTEGER ISEED( 4 ), ISEEDY( 4 ), IWORKQUERY
- REAL RESULT( NTESTS ), WORKQUERY
+ INTEGER ISEED( 4 ), ISEEDY( 4 ), IWQ
+ REAL RESULT( NTESTS ), WQ
* ..
* .. Allocatable Arrays ..
REAL, ALLOCATABLE :: WORK (:)
@@ -321,43 +321,76 @@
M = MMAX
N = NMAX
NRHS = NSMAX
- LDA = MAX( 1, M )
- LDB = MAX( 1, M, N )
MNMIN = MAX( MIN( M, N ), 1 )
*
* Compute workspace needed for routines
* SQRT14, SQRT17 (two side cases), SQRT15 and SQRT12
*
- LWORK = MAX( ( M+N )*NRHS,
+ LWORK = MAX( 1, ( M+N )*NRHS,
$ ( N+NRHS )*( M+2 ), ( M+NRHS )*( N+2 ),
$ MAX( M+MNMIN, NRHS*MNMIN,2*N+M ),
$ MAX( M*N+4*MNMIN+MAX(M,N), M*N+2*MNMIN+4*N ) )
+ LIWORK = 1
+*
+* Iterate through all test cases and compute necessary workspace
+* sizes for ?GELS, ?GETSLS, ?GELSY, ?GELSS and ?GELSD routines.
+*
+ DO IM = 1, NM
+ M = MVAL( IM )
+ LDA = MAX( 1, M )
+ DO IN = 1, NN
+ N = NVAL( IN )
+ MNMIN = MAX(MIN( M, N ),1)
+ LDB = MAX( 1, M, N )
+ DO INS = 1, NNS
+ NRHS = NSVAL( INS )
+ DO IRANK = 1, 2
+ DO ISCALE = 1, 3
+ ITYPE = ( IRANK-1 )*3 + ISCALE
+ IF( DOTYPE( ITYPE ) ) THEN
+ IF( IRANK.EQ.1 ) THEN
+ DO ITRAN = 1, 2
+ IF( ITRAN.EQ.1 ) THEN
+ TRANS = 'N'
+ ELSE
+ TRANS = 'T'
+ END IF
+*
+* Compute workspace needed for SGELS
+ CALL SGELS( TRANS, M, N, NRHS, A, LDA,
+ $ B, LDB, WQ, -1, INFO )
+ LWORK_SGELS = INT ( WQ )
+* Compute workspace needed for SGETSLS
+ CALL SGETSLS( TRANS, M, N, NRHS, A, LDA,
+ $ B, LDB, WQ, -1, INFO )
+ LWORK_SGETSLS = INT( WQ )
+ ENDDO
+ END IF
+* Compute workspace needed for SGELSY
+ CALL SGELSY( M, N, NRHS, A, LDA, B, LDB, IWQ,
+ $ RCOND, CRANK, WQ, -1, INFO )
+ LWORK_SGELSY = INT( WQ )
+* Compute workspace needed for SGELSS
+ CALL SGELSS( M, N, NRHS, A, LDA, B, LDB, S,
+ $ RCOND, CRANK, WQ, -1 , INFO )
+ LWORK_SGELSS = INT( WQ )
+* Compute workspace needed for SGELSD
+ CALL SGELSD( M, N, NRHS, A, LDA, B, LDB, S,
+ $ RCOND, CRANK, WQ, -1, IWQ, INFO )
+ LWORK_SGELSD = INT( WQ )
+* Compute LIWORK workspace needed for SGELSY and SGELSD
+ LIWORK = MAX( LIWORK, N, IWQ )
+* Compute LWORK workspace needed for all functions
+ LWORK = MAX( LWORK, LWORK_SGELS, LWORK_SGETSLS,
+ $ LWORK_SGELSY, LWORK_SGELSS,
+ $ LWORK_SGELSD )
+ END IF
+ ENDDO
+ ENDDO
+ ENDDO
+ ENDDO
+ ENDDO
*
-* Compute workspace needed for SGELS
- CALL SGELS( 'N', M, N, NRHS, A, LDA, B, LDB,
- $ WORKQUERY, -1, INFO )
- LWORK_SGELS = INT ( WORKQUERY )
-* Compute workspace needed for SGETSLS
- CALL SGETSLS( 'N', M, N, NRHS, A, LDA, B, LDB,
- $ WORKQUERY, -1, INFO )
- LWORK_SGETSLS = INT( WORKQUERY )
-* Compute workspace needed for SGELSY
- CALL SGELSY( M, N, NRHS, A, LDA, B, LDB, IWORKQUERY,
- $ RCOND, CRANK, WORKQUERY, -1, INFO )
- LWORK_SGELSY = INT( WORKQUERY )
-* Compute workspace needed for SGELSS
- CALL SGELSS( M, N, NRHS, A, LDA, B, LDB, S,
- $ RCOND, CRANK, WORKQUERY, -1 , INFO )
- LWORK_SGELSS = INT( WORKQUERY )
-* Compute workspace needed for SGELSD
- CALL SGELSD( M, N, NRHS, A, LDA, B, LDB, S,
- $ RCOND, CRANK, WORKQUERY, -1, IWORKQUERY, INFO )
- LWORK_SGELSD = INT( WORKQUERY )
-* Compute LIWORK workspace needed for SGELSY and SGELSD
- LIWORK = MAX( 1, N, IWORKQUERY )
-* Compute LWORK workspace needed for all functions
- LWORK = MAX( 1, LWORK, LWORK_SGELS, LWORK_SGETSLS, LWORK_SGELSY,
- $ LWORK_SGELSS, LWORK_SGELSD )
LWLSY = LWORK
*
ALLOCATE( WORK( LWORK ) )
diff --git a/TESTING/LIN/sdrvsy_aa.f b/TESTING/LIN/sdrvsy_aa.f
index 8e5686f..f826e20 100644
--- a/TESTING/LIN/sdrvsy_aa.f
+++ b/TESTING/LIN/sdrvsy_aa.f
@@ -199,7 +199,7 @@
* ..
* .. External Subroutines ..
EXTERNAL ALADHD, ALAERH, ALASVM, SERRVX, SGET04, SLACPY,
- $ SLARHS, SLASET, SLATB4, SLATMS, SPOT02, DPOT05,
+ $ SLARHS, SLASET, SLATB4, SLATMS, SPOT02,
$ SSYSV_AA, SSYT01_AA, SSYTRF_AA, XLAENV
* ..
* .. Scalars in Common ..
diff --git a/TESTING/LIN/serrsy.f b/TESTING/LIN/serrsy.f
index ce6975d..a4184cf 100644
--- a/TESTING/LIN/serrsy.f
+++ b/TESTING/LIN/serrsy.f
@@ -92,7 +92,7 @@
$ SSYTF2_RK, SSYTF2_ROOK, SSYTRF, SSYTRF_RK,
$ SSYTRF_ROOK, SSYTRI, SSYTF2, SSYTRI_3,
$ SSYTRI_3X, SSYTRI_ROOK, SSYTRF_AA, SSYTRI2,
- $ SYTRI2X, SSYTRS, SSYTRS_3, SSYTRS_ROOK,
+ $ SSYTRI2X, SSYTRS, SSYTRS_3, SSYTRS_ROOK,
$ SSYTRS_AA
* ..
* .. Scalars in Common ..
diff --git a/TESTING/LIN/slahilb.f b/TESTING/LIN/slahilb.f
index be7af41..4a42aaa 100644
--- a/TESTING/LIN/slahilb.f
+++ b/TESTING/LIN/slahilb.f
@@ -8,7 +8,7 @@
* Definition:
* ===========
*
-* SUBROUTINE SLAHILB(N, NRHS, A, LDA, X, LDX, B, LDB, WORK, INFO)
+* SUBROUTINE SLAHILB( N, NRHS, A, LDA, X, LDX, B, LDB, WORK, INFO)
*
* .. Scalar Arguments ..
* INTEGER N, NRHS, LDA, LDX, LDB, INFO
@@ -53,7 +53,7 @@
*>
*> \param[in] NRHS
*> \verbatim
-*> NRHS is NRHS
+*> NRHS is INTEGER
*> The requested number of right-hand sides.
*> \endverbatim
*>
@@ -122,7 +122,7 @@
*> \ingroup single_lin
*
* =====================================================================
- SUBROUTINE SLAHILB(N, NRHS, A, LDA, X, LDX, B, LDB, WORK, INFO)
+ SUBROUTINE SLAHILB( N, NRHS, A, LDA, X, LDX, B, LDB, WORK, INFO)
*
* -- LAPACK test routine (version 3.7.0) --
* -- LAPACK is a software package provided by Univ. of Tennessee, --
diff --git a/TESTING/LIN/zchkhe_aa.f b/TESTING/LIN/zchkhe_aa.f
index 36125cc..85d194a 100644
--- a/TESTING/LIN/zchkhe_aa.f
+++ b/TESTING/LIN/zchkhe_aa.f
@@ -218,15 +218,10 @@
INTEGER ISEED( 4 ), ISEEDY( 4 )
DOUBLE PRECISION RESULT( NTESTS )
* ..
-* .. External Functions ..
- DOUBLE PRECISION DGET06, ZLANHE
- EXTERNAL DGET06, ZLANHE
-* ..
* .. External Subroutines ..
- EXTERNAL ALAERH, ALAHD, ALASUM, XLAENV, ZERRHE, ZGET04,
- $ ZHECON, ZHERFS, ZHET01_AA, ZHETRF_AA, ZHETRI2,
- $ ZHETRS_AA, ZLACPY, ZLAIPD, ZLARHS, ZLATB4,
- $ ZLATMS, ZPOT02, ZPOT03, ZPOT05
+ EXTERNAL ALAERH, ALAHD, ALASUM, XLAENV, ZERRHE,
+ $ ZHET01_AA, ZHETRF_AA, ZHETRS_AA, ZLACPY,
+ $ ZLAIPD, ZLARHS, ZLATB4, ZLATMS, ZPOT02
* ..
* .. Intrinsic Functions ..
INTRINSIC MAX, MIN
diff --git a/TESTING/LIN/zchkrfp.f b/TESTING/LIN/zchkrfp.f
index 27586a4..ece4a34 100644
--- a/TESTING/LIN/zchkrfp.f
+++ b/TESTING/LIN/zchkrfp.f
@@ -218,11 +218,6 @@
STOP
END IF
*
- IF( FATAL ) THEN
- WRITE( NOUT, FMT = 9999 )
- STOP
- END IF
-*
* Calculate and print the machine dependent constants.
*
EPS = DLAMCH( 'Underflow threshold' )
diff --git a/TESTING/LIN/zchksy_aa.f b/TESTING/LIN/zchksy_aa.f
index 465f06d..ff4f6be 100644
--- a/TESTING/LIN/zchksy_aa.f
+++ b/TESTING/LIN/zchksy_aa.f
@@ -218,15 +218,10 @@
INTEGER ISEED( 4 ), ISEEDY( 4 )
DOUBLE PRECISION RESULT( NTESTS )
* ..
-* .. External Functions ..
- DOUBLE PRECISION DGET06, ZLANSY
- EXTERNAL DGET06, ZLANSY
-* ..
* .. External Subroutines ..
- EXTERNAL ALAERH, ALAHD, ALASUM, ZERRSY, ZGET04, ZLACPY,
- $ ZLARHS, ZLATB4, ZLATMS, ZSYT02, DSYT03, DSYT05,
- $ DSYCON, ZSYRFS, ZSYT01_AA, ZSYTRF_AA,
- $ DSYTRI2, ZSYTRS_AA, XLAENV
+ EXTERNAL ALAERH, ALAHD, ALASUM, ZERRSY, ZLACPY, ZLARHS,
+ $ ZLATB4, ZLATMS, ZSYT02, ZSYT01_AA, ZSYTRF_AA,
+ $ ZSYTRS_AA, XLAENV
* ..
* .. Intrinsic Functions ..
INTRINSIC MAX, MIN
diff --git a/TESTING/LIN/zchktsqr.f b/TESTING/LIN/zchktsqr.f
index 2361609..3945d7a 100644
--- a/TESTING/LIN/zchktsqr.f
+++ b/TESTING/LIN/zchktsqr.f
@@ -132,8 +132,8 @@
DOUBLE PRECISION RESULT( NTESTS )
* ..
* .. External Subroutines ..
- EXTERNAL ALAERH, ALAHD, ALASUM, DERRTSQR,
- $ DTSQR01, XLAENV
+ EXTERNAL ALAERH, ALAHD, ALASUM, ZERRTSQR,
+ $ ZTSQR01, XLAENV
* ..
* .. Intrinsic Functions ..
INTRINSIC MAX, MIN
diff --git a/TESTING/LIN/zdrvls.f b/TESTING/LIN/zdrvls.f
index c9485e4..b4c376d 100644
--- a/TESTING/LIN/zdrvls.f
+++ b/TESTING/LIN/zdrvls.f
@@ -237,9 +237,9 @@
DOUBLE PRECISION EPS, NORMA, NORMB, RCOND
* ..
* .. Local Arrays ..
- INTEGER ISEED( 4 ), ISEEDY( 4 ), IWORKQUERY
- DOUBLE PRECISION RESULT( NTESTS ), RWORKQUERY
- COMPLEX*16 WORKQUERY
+ INTEGER ISEED( 4 ), ISEEDY( 4 ), IWQ
+ DOUBLE PRECISION RESULT( NTESTS ), RWQ
+ COMPLEX*16 WQ
* ..
* .. Allocatable Arrays ..
COMPLEX*16, ALLOCATABLE :: WORK (:)
@@ -324,48 +324,85 @@
M = MMAX
N = NMAX
NRHS = NSMAX
- LDA = MAX( 1, M )
- LDB = MAX( 1, M, N )
MNMIN = MAX( MIN( M, N ), 1 )
*
* Compute workspace needed for routines
* ZQRT14, ZQRT17 (two side cases), ZQRT15 and ZQRT12
*
- LWORK = MAX( ( M+N )*NRHS,
+ LWORK = MAX( 1, ( M+N )*NRHS,
$ ( N+NRHS )*( M+2 ), ( M+NRHS )*( N+2 ),
$ MAX( M+MNMIN, NRHS*MNMIN,2*N+M ),
$ MAX( M*N+4*MNMIN+MAX(M,N), M*N+2*MNMIN+4*N ) )
+ LRWORK = 1
+ LIWORK = 1
+*
+* Iterate through all test cases and compute necessary workspace
+* sizes for ?GELS, ?GETSLS, ?GELSY, ?GELSS and ?GELSD routines.
+*
+ DO IM = 1, NM
+ M = MVAL( IM )
+ LDA = MAX( 1, M )
+ DO IN = 1, NN
+ N = NVAL( IN )
+ MNMIN = MAX(MIN( M, N ),1)
+ LDB = MAX( 1, M, N )
+ DO INS = 1, NNS
+ NRHS = NSVAL( INS )
+ DO IRANK = 1, 2
+ DO ISCALE = 1, 3
+ ITYPE = ( IRANK-1 )*3 + ISCALE
+ IF( DOTYPE( ITYPE ) ) THEN
+ IF( IRANK.EQ.1 ) THEN
+ DO ITRAN = 1, 2
+ IF( ITRAN.EQ.1 ) THEN
+ TRANS = 'N'
+ ELSE
+ TRANS = 'C'
+ END IF
+*
+* Compute workspace needed for ZGELS
+ CALL ZGELS( TRANS, M, N, NRHS, A, LDA,
+ $ B, LDB, WQ, -1, INFO )
+ LWORK_ZGELS = INT ( WQ )
+* Compute workspace needed for ZGETSLS
+ CALL ZGETSLS( TRANS, M, N, NRHS, A, LDA,
+ $ B, LDB, WQ, -1, INFO )
+ LWORK_ZGETSLS = INT( WQ )
+ ENDDO
+ END IF
+* Compute workspace needed for ZGELSY
+ CALL ZGELSY( M, N, NRHS, A, LDA, B, LDB, IWQ,
+ $ RCOND, CRANK, WQ, -1, RWORK, INFO )
+ LWORK_ZGELSY = INT( WQ )
+ LRWORK_ZGELSY = 2*N
+* Compute workspace needed for ZGELSS
+ CALL ZGELSS( M, N, NRHS, A, LDA, B, LDB, S,
+ $ RCOND, CRANK, WQ, -1 , RWORK,
+ $ INFO )
+ LWORK_ZGELSS = INT( WQ )
+ LRWORK_ZGELSS = 5*MNMIN
+* Compute workspace needed for ZGELSD
+ CALL ZGELSD( M, N, NRHS, A, LDA, B, LDB, S,
+ $ RCOND, CRANK, WQ, -1, RWQ, IWQ,
+ $ INFO )
+ LWORK_ZGELSD = INT( WQ )
+ LRWORK_ZGELSD = INT( RWQ )
+* Compute LIWORK workspace needed for ZGELSY and ZGELSD
+ LIWORK = MAX( LIWORK, N, IWQ )
+* Compute LRWORK workspace needed for ZGELSY, ZGELSS and ZGELSD
+ LRWORK = MAX( LRWORK, LRWORK_ZGELSY,
+ $ LRWORK_ZGELSS, LRWORK_ZGELSD )
+* Compute LWORK workspace needed for all functions
+ LWORK = MAX( LWORK, LWORK_ZGELS, LWORK_ZGETSLS,
+ $ LWORK_ZGELSY, LWORK_ZGELSS,
+ $ LWORK_ZGELSD )
+ END IF
+ ENDDO
+ ENDDO
+ ENDDO
+ ENDDO
+ ENDDO
*
-* Compute workspace needed for ZGELS
- CALL ZGELS( 'N', M, N, NRHS, A, LDA, B, LDB,
- $ WORKQUERY, -1, INFO )
- LWORK_ZGELS = INT ( WORKQUERY )
-* Compute workspace needed for ZGETSLS
- CALL ZGETSLS( 'N', M, N, NRHS, A, LDA, B, LDB,
- $ WORKQUERY, -1, INFO )
- LWORK_ZGETSLS = INT( WORKQUERY )
-* Compute workspace needed for ZGELSY
- CALL ZGELSY( M, N, NRHS, A, LDA, B, LDB, IWORKQUERY,
- $ RCOND, CRANK, WORKQUERY, -1, RWORK, INFO )
- LWORK_ZGELSY = INT( WORKQUERY )
- LRWORK_ZGELSY = 2*N
-* Compute workspace needed for ZGELSS
- CALL ZGELSS( M, N, NRHS, A, LDA, B, LDB, S,
- $ RCOND, CRANK, WORKQUERY, -1 , RWORK, INFO )
- LWORK_ZGELSS = INT( WORKQUERY )
- LRWORK_ZGELSS = 5*MNMIN
-* Compute workspace needed for ZGELSD
- CALL ZGELSD( M, N, NRHS, A, LDA, B, LDB, S, RCOND, CRANK,
- $ WORKQUERY, -1, RWORKQUERY, IWORKQUERY, INFO )
- LWORK_ZGELSD = INT( WORKQUERY )
- LRWORK_ZGELSD = INT( RWORKQUERY )
-* Compute LIWORK workspace needed for ZGELSY and ZGELSD
- LIWORK = MAX( 1, N, IWORKQUERY )
-* Compute LRWORK workspace needed for ZGELSY, ZGELSS and ZGELSD
- LRWORK = MAX( 1, LRWORK_ZGELSY, LRWORK_ZGELSS, LRWORK_ZGELSD )
-* Compute LWORK workspace needed for all functions
- LWORK = MAX( 1, LWORK, LWORK_ZGELS, LWORK_ZGETSLS, LWORK_ZGELSY,
- $ LWORK_ZGELSS, LWORK_ZGELSD )
LWLSY = LWORK
*
ALLOCATE( WORK( LWORK ) )
diff --git a/TESTING/LIN/zdrvsy_aa.f b/TESTING/LIN/zdrvsy_aa.f
index 7b96267..3963782 100644
--- a/TESTING/LIN/zdrvsy_aa.f
+++ b/TESTING/LIN/zdrvsy_aa.f
@@ -204,8 +204,8 @@
EXTERNAL DGET06, ZLANSY
* ..
* .. External Subroutines ..
- EXTERNAL ALADHD, ALAERH, ALASVM, DERRVX, ZGET04, ZLACPY,
- $ ZLARHS, ZLASET, ZLATB4, ZLATMS, ZSYT02, DSYT05,
+ EXTERNAL ALADHD, ALAERH, ALASVM, ZERRVX, ZGET04, ZLACPY,
+ $ ZLARHS, ZLASET, ZLATB4, ZLATMS, ZSYT02,
$ ZSYSV_AA, ZSYT01_AA, ZSYTRF_AA, XLAENV
* ..
* .. Scalars in Common ..
diff --git a/TESTING/LIN/zerrsy.f b/TESTING/LIN/zerrsy.f
index 4179e98..fbbe7d7 100644
--- a/TESTING/LIN/zerrsy.f
+++ b/TESTING/LIN/zerrsy.f
@@ -91,7 +91,7 @@
$ ZSPTRS, ZSYCON, ZSYCON_3, ZSYCON_ROOK, ZSYRFS,
$ ZSYTF2, ZSYTF2_RK, ZSYTF2_ROOK, ZSYTRF,
$ ZSYTRF_RK, ZSYTRF_ROOK, ZSYTRI, ZSYTRI_3,
- $ ZSYTRI_3X, ZSYTRI_ROOK, ZSYTRI2, ZSYTRI2Z,
+ $ ZSYTRI_3X, ZSYTRI_ROOK, ZSYTRI2, ZSYTRI2X,
$ ZSYTRS, ZSYTRS_3, ZSYTRS_ROOK
* ..
* .. Scalars in Common ..
diff --git a/TESTING/LIN/zlahilb.f b/TESTING/LIN/zlahilb.f
index 98c0303..a2361cd 100644
--- a/TESTING/LIN/zlahilb.f
+++ b/TESTING/LIN/zlahilb.f
@@ -8,7 +8,7 @@
* Definition:
* ===========
*
-* SUBROUTINE ZLAHILB(N, NRHS, A, LDA, X, LDX, B, LDB, WORK,
+* SUBROUTINE ZLAHILB( N, NRHS, A, LDA, X, LDX, B, LDB, WORK,
* INFO, PATH)
*
* .. Scalar Arguments ..
@@ -56,7 +56,7 @@
*>
*> \param[in] NRHS
*> \verbatim
-*> NRHS is NRHS
+*> NRHS is INTEGER
*> The requested number of right-hand sides.
*> \endverbatim
*>
@@ -131,7 +131,7 @@
*> \ingroup complex16_lin
*
* =====================================================================
- SUBROUTINE ZLAHILB(N, NRHS, A, LDA, X, LDX, B, LDB, WORK,
+ SUBROUTINE ZLAHILB( N, NRHS, A, LDA, X, LDX, B, LDB, WORK,
$ INFO, PATH)
*
* -- LAPACK test routine (version 3.7.0) --
@@ -220,7 +220,8 @@
END DO
*
* Generate the scaled Hilbert matrix in A
-* If we are testing SY routines, take D1_i = D2_i, else, D1_i = D2_i*
+* If we are testing SY routines,
+* take D1_i = D2_i, else, D1_i = D2_i*
IF ( LSAMEN( 2, C2, 'SY' ) ) THEN
DO J = 1, N
DO I = 1, N
@@ -250,8 +251,9 @@
WORK(J) = ( ( (WORK(J-1)/(J-1)) * (J-1 - N) ) /(J-1) )
$ * (N +J -1)
END DO
-*
-* If we are testing SY routines, take D1_i = D2_i, else, D1_i = D2_i*
+
+* If we are testing SY routines,
+* take D1_i = D2_i, else, D1_i = D2_i*
IF ( LSAMEN( 2, C2, 'SY' ) ) THEN
DO J = 1, NRHS
DO I = 1, N
diff --git a/TESTING/LIN/zlarhs.f b/TESTING/LIN/zlarhs.f
index a2f5f9b..d7d70c7 100644
--- a/TESTING/LIN/zlarhs.f
+++ b/TESTING/LIN/zlarhs.f
@@ -190,7 +190,7 @@
*> \verbatim
*> INFO is INTEGER
*> = 0: successful exit
-*> < 0: if INFO = -k, the k-th argument had an illegal value
+*> < 0: if INFO = -i, the i-th argument had an illegal value
*> \endverbatim
*
* Authors:
diff --git a/TESTING/MATGEN/clahilb.f b/TESTING/MATGEN/clahilb.f
index 612c6c6..f75ef3a 100644
--- a/TESTING/MATGEN/clahilb.f
+++ b/TESTING/MATGEN/clahilb.f
@@ -154,7 +154,7 @@
INTEGER I, J
COMPLEX TMP
CHARACTER*2 C2
-
+* ..
* .. Parameters ..
* NMAX_EXACT the largest dimension where the generated data is
* exact.
@@ -163,7 +163,7 @@
* ??? complex uses how many bits ???
INTEGER NMAX_EXACT, NMAX_APPROX, SIZE_D
PARAMETER (NMAX_EXACT = 6, NMAX_APPROX = 11, SIZE_D = 8)
-
+*
* d's are generated from random permuation of those eight elements.
COMPLEX D1(8), D2(8), INVD1(8), INVD2(8)
DATA D1 /(-1,0),(0,1),(-1,-1),(0,-1),(1,0),(-1,1),(1,1),(1,-1)/
@@ -173,7 +173,6 @@
$ (-.5,-.5),(.5,-.5),(.5,.5)/
DATA INVD2 /(-1,0),(0,1),(-.5,-.5),(0,-1),(1,0),
$ (-.5,.5),(.5,.5),(.5,-.5)/
-
* ..
* .. External Functions
EXTERNAL CLASET, LSAMEN
@@ -204,7 +203,7 @@
IF (N .GT. NMAX_EXACT) THEN
INFO = 1
END IF
-
+*
* Compute M = the LCM of the integers [1, 2*N-1]. The largest
* reasonable N is small enough that integers suffice (up to N = 11).
M = 1
@@ -219,7 +218,7 @@
END DO
M = (M / TI) * I
END DO
-
+*
* Generate the scaled Hilbert matrix in A
* If we are testing SY routines, take
* D1_i = D2_i, else, D1_i = D2_i*
@@ -238,12 +237,12 @@
END DO
END DO
END IF
-
+*
* Generate matrix B as simply the first NRHS columns of M * the
* identity.
TMP = REAL(M)
CALL CLASET('Full', N, NRHS, (0.0,0.0), TMP, B, LDB)
-
+*
* Generate the true solutions in X. Because B = the first NRHS
* columns of M*I, the true solutions are just the first NRHS columns
* of the inverse Hilbert matrix.
diff --git a/TESTING/MATGEN/dlahilb.f b/TESTING/MATGEN/dlahilb.f
index 7b2bada..7e30b3b 100644
--- a/TESTING/MATGEN/dlahilb.f
+++ b/TESTING/MATGEN/dlahilb.f
@@ -1,4 +1,4 @@
-C> \brief \b DLAHILB
+*> \brief \b DLAHILB
*
* =========== DOCUMENTATION ===========
*
@@ -140,7 +140,7 @@ C> \brief \b DLAHILB
INTEGER TM, TI, R
INTEGER M
INTEGER I, J
-
+* ..
* .. Parameters ..
* NMAX_EXACT the largest dimension where the generated data is
* exact.
@@ -177,7 +177,7 @@ C> \brief \b DLAHILB
IF (N .GT. NMAX_EXACT) THEN
INFO = 1
END IF
-
+*
* Compute M = the LCM of the integers [1, 2*N-1]. The largest
* reasonable N is small enough that integers suffice (up to N = 11).
M = 1
@@ -192,14 +192,14 @@ C> \brief \b DLAHILB
END DO
M = (M / TI) * I
END DO
-
+*
* Generate the scaled Hilbert matrix in A
DO J = 1, N
DO I = 1, N
A(I, J) = DBLE(M) / (I + J - 1)
END DO
END DO
-
+*
* Generate matrix B as simply the first NRHS columns of M * the
* identity.
CALL DLASET('Full', N, NRHS, 0.0D+0, DBLE(M), B, LDB)
@@ -212,12 +212,12 @@ C> \brief \b DLAHILB
WORK(J) = ( ( (WORK(J-1)/(J-1)) * (J-1 - N) ) /(J-1) )
$ * (N +J -1)
END DO
-
+*
DO J = 1, NRHS
DO I = 1, N
X(I, J) = (WORK(I)*WORK(J)) / (I + J - 1)
END DO
END DO
-
+*
END
diff --git a/TESTING/MATGEN/slahilb.f b/TESTING/MATGEN/slahilb.f
index 170cce6..471e2e7 100644
--- a/TESTING/MATGEN/slahilb.f
+++ b/TESTING/MATGEN/slahilb.f
@@ -140,7 +140,7 @@
INTEGER TM, TI, R
INTEGER M
INTEGER I, J
-
+* ..
* .. Parameters ..
* NMAX_EXACT the largest dimension where the generated data is
* exact.
@@ -148,7 +148,6 @@
* a small componentwise relative error.
INTEGER NMAX_EXACT, NMAX_APPROX
PARAMETER (NMAX_EXACT = 6, NMAX_APPROX = 11)
-
* ..
* .. External Functions
EXTERNAL SLASET
@@ -177,7 +176,7 @@
IF (N .GT. NMAX_EXACT) THEN
INFO = 1
END IF
-
+*
* Compute M = the LCM of the integers [1, 2*N-1]. The largest
* reasonable N is small enough that integers suffice (up to N = 11).
M = 1
@@ -192,18 +191,18 @@
END DO
M = (M / TI) * I
END DO
-
+*
* Generate the scaled Hilbert matrix in A
DO J = 1, N
DO I = 1, N
A(I, J) = REAL(M) / (I + J - 1)
END DO
END DO
-
+*
* Generate matrix B as simply the first NRHS columns of M * the
* identity.
CALL SLASET('Full', N, NRHS, 0.0, REAL(M), B, LDB)
-
+*
* Generate the true solutions in X. Because B = the first NRHS
* columns of M*I, the true solutions are just the first NRHS columns
* of the inverse Hilbert matrix.
@@ -212,12 +211,12 @@
WORK(J) = ( ( (WORK(J-1)/(J-1)) * (J-1 - N) ) /(J-1) )
$ * (N +J -1)
END DO
-
+*
DO J = 1, NRHS
DO I = 1, N
X(I, J) = (WORK(I)*WORK(J)) / (I + J - 1)
END DO
END DO
-
+*
END
diff --git a/TESTING/MATGEN/zlahilb.f b/TESTING/MATGEN/zlahilb.f
index 8921092..24233d7 100644
--- a/TESTING/MATGEN/zlahilb.f
+++ b/TESTING/MATGEN/zlahilb.f
@@ -154,7 +154,7 @@
INTEGER I, J
COMPLEX*16 TMP
CHARACTER*2 C2
-
+* ..
* .. Parameters ..
* NMAX_EXACT the largest dimension where the generated data is
* exact.
@@ -163,7 +163,7 @@
* ??? complex uses how many bits ???
INTEGER NMAX_EXACT, NMAX_APPROX, SIZE_D
PARAMETER (NMAX_EXACT = 6, NMAX_APPROX = 11, SIZE_D = 8)
-
+*
* d's are generated from random permuation of those eight elements.
COMPLEX*16 d1(8), d2(8), invd1(8), invd2(8)
DATA D1 /(-1,0),(0,1),(-1,-1),(0,-1),(1,0),(-1,1),(1,1),(1,-1)/
@@ -203,7 +203,7 @@
IF (N .GT. NMAX_EXACT) THEN
INFO = 1
END IF
-
+*
* Compute M = the LCM of the integers [1, 2*N-1]. The largest
* reasonable N is small enough that integers suffice (up to N = 11).
M = 1
@@ -218,7 +218,7 @@
END DO
M = (M / TI) * I
END DO
-
+*
* Generate the scaled Hilbert matrix in A
* If we are testing SY routines,
* take D1_i = D2_i, else, D1_i = D2_i*
@@ -237,12 +237,12 @@
END DO
END DO
END IF
-
+*
* Generate matrix B as simply the first NRHS columns of M * the
* identity.
TMP = DBLE(M)
CALL ZLASET('Full', N, NRHS, (0.0D+0,0.0D+0), TMP, B, LDB)
-
+*
* Generate the true solutions in X. Because B = the first NRHS
* columns of M*I, the true solutions are just the first NRHS columns
* of the inverse Hilbert matrix.