--- rpl/lapack/lapack/zsytrf_aa_2stage.f 2018/05/29 14:54:04 1.1
+++ rpl/lapack/lapack/zsytrf_aa_2stage.f 2023/08/07 08:39:39 1.3
@@ -7,11 +7,11 @@
*
*> \htmlonly
*> Download ZSYTRF_AA_2STAGE + dependencies
-*>
+*>
*> [TGZ]
-*>
+*>
*> [ZIP]
-*>
+*>
*> [TXT]
*> \endhtmlonly
*
@@ -38,7 +38,7 @@
*> ZSYTRF_AA_2STAGE computes the factorization of a complex symmetric matrix A
*> using the Aasen's algorithm. The form of the factorization is
*>
-*> A = U*T*U**T or A = L*T*L**T
+*> A = U**T*T*U or A = L*T*L**T
*>
*> where U (or L) is a product of permutation and unit upper (lower)
*> triangular matrices, and T is a complex symmetric band matrix with the
@@ -93,6 +93,7 @@
*>
*> \param[in] LTB
*> \verbatim
+*> LTB is INTEGER
*> The size of the array TB. LTB >= 4*N, internally
*> used to select NB such that LTB >= (3*NB+1)*N.
*>
@@ -112,7 +113,7 @@
*>
*> \param[out] IPIV2
*> \verbatim
-*> IPIV is INTEGER array, dimension (N)
+*> IPIV2 is INTEGER array, dimension (N)
*> On exit, it contains the details of the interchanges, i.e.,
*> the row and column k of T were interchanged with the
*> row and column IPIV(k).
@@ -125,6 +126,7 @@
*>
*> \param[in] LWORK
*> \verbatim
+*> LWORK is INTEGER
*> The size of WORK. LWORK >= N, internally used to select NB
*> such that LWORK >= N*NB.
*>
@@ -150,18 +152,15 @@
*> \author Univ. of Colorado Denver
*> \author NAG Ltd.
*
-*> \date November 2017
-*
*> \ingroup complex16SYcomputational
*
* =====================================================================
SUBROUTINE ZSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, LTB, IPIV,
$ IPIV2, WORK, LWORK, INFO )
*
-* -- LAPACK computational routine (version 3.8.0) --
+* -- LAPACK computational routine --
* -- LAPACK is a software package provided by Univ. of Tennessee, --
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2017
*
IMPLICIT NONE
*
@@ -273,7 +272,7 @@
IF( UPPER ) THEN
*
* .....................................................
-* Factorize A as L*D*L**T using the upper triangle of A
+* Factorize A as U**T*D*U using the upper triangle of A
* .....................................................
*
DO J = 0, NT-1
@@ -446,12 +445,14 @@ c END IF
* > Apply pivots to previous columns of L
CALL ZSWAP( K-1, A( (J+1)*NB+1, I1 ), 1,
$ A( (J+1)*NB+1, I2 ), 1 )
-* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
- CALL ZSWAP( I2-I1-1, A( I1, I1+1 ), LDA,
- $ A( I1+1, I2 ), 1 )
+* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
+ IF( I2.GT.(I1+1) )
+ $ CALL ZSWAP( I2-I1-1, A( I1, I1+1 ), LDA,
+ $ A( I1+1, I2 ), 1 )
* > Swap A(I2+1:M, I1) with A(I2+1:M, I2)
- CALL ZSWAP( N-I2, A( I1, I2+1 ), LDA,
- $ A( I2, I2+1 ), LDA )
+ IF( I2.LT.N )
+ $ CALL ZSWAP( N-I2, A( I1, I2+1 ), LDA,
+ $ A( I2, I2+1 ), LDA )
* > Swap A(I1, I1) with A(I2, I2)
PIV = A( I1, I1 )
A( I1, I1 ) = A( I2, I2 )
@@ -635,11 +636,13 @@ c END IF
CALL ZSWAP( K-1, A( I1, (J+1)*NB+1 ), LDA,
$ A( I2, (J+1)*NB+1 ), LDA )
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M)
- CALL ZSWAP( I2-I1-1, A( I1+1, I1 ), 1,
- $ A( I2, I1+1 ), LDA )
+ IF( I2.GT.(I1+1) )
+ $ CALL ZSWAP( I2-I1-1, A( I1+1, I1 ), 1,
+ $ A( I2, I1+1 ), LDA )
* > Swap A(I2+1:M, I1) with A(I2+1:M, I2)
- CALL ZSWAP( N-I2, A( I2+1, I1 ), 1,
- $ A( I2+1, I2 ), 1 )
+ IF( I2.LT.N )
+ $ CALL ZSWAP( N-I2, A( I2+1, I1 ), 1,
+ $ A( I2+1, I2 ), 1 )
* > Swap A(I1, I1) with A(I2, I2)
PIV = A( I1, I1 )
A( I1, I1 ) = A( I2, I2 )
@@ -663,6 +666,8 @@ c $ (J+1)*NB+1,
* Factor the band matrix
CALL ZGBTRF( N, N, NB, NB, TB, LDTB, IPIV2, INFO )
*
+ RETURN
+*
* End of ZSYTRF_AA_2STAGE
*
END