version 1.1, 2018/05/29 14:54:04
|
version 1.2, 2020/05/21 21:46:11
|
Line 38
|
Line 38
|
*> ZSYTRF_AA_2STAGE computes the factorization of a complex symmetric matrix A |
*> ZSYTRF_AA_2STAGE computes the factorization of a complex symmetric matrix A |
*> using the Aasen's algorithm. The form of the factorization is |
*> 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) |
*> 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 |
*> triangular matrices, and T is a complex symmetric band matrix with the |
Line 93
|
Line 93
|
*> |
*> |
*> \param[in] LTB |
*> \param[in] LTB |
*> \verbatim |
*> \verbatim |
|
*> LTB is INTEGER |
*> The size of the array TB. LTB >= 4*N, internally |
*> The size of the array TB. LTB >= 4*N, internally |
*> used to select NB such that LTB >= (3*NB+1)*N. |
*> used to select NB such that LTB >= (3*NB+1)*N. |
*> |
*> |
Line 112
|
Line 113
|
*> |
*> |
*> \param[out] IPIV2 |
*> \param[out] IPIV2 |
*> \verbatim |
*> \verbatim |
*> IPIV is INTEGER array, dimension (N) |
*> IPIV2 is INTEGER array, dimension (N) |
*> On exit, it contains the details of the interchanges, i.e., |
*> On exit, it contains the details of the interchanges, i.e., |
*> the row and column k of T were interchanged with the |
*> the row and column k of T were interchanged with the |
*> row and column IPIV(k). |
*> row and column IPIV(k). |
Line 125
|
Line 126
|
*> |
*> |
*> \param[in] LWORK |
*> \param[in] LWORK |
*> \verbatim |
*> \verbatim |
|
*> LWORK is INTEGER |
*> The size of WORK. LWORK >= N, internally used to select NB |
*> The size of WORK. LWORK >= N, internally used to select NB |
*> such that LWORK >= N*NB. |
*> such that LWORK >= N*NB. |
*> |
*> |
Line 273
|
Line 275
|
IF( UPPER ) THEN |
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 |
DO J = 0, NT-1 |
Line 446 c END IF
|
Line 448 c END IF
|
* > Apply pivots to previous columns of L |
* > Apply pivots to previous columns of L |
CALL ZSWAP( K-1, A( (J+1)*NB+1, I1 ), 1, |
CALL ZSWAP( K-1, A( (J+1)*NB+1, I1 ), 1, |
$ A( (J+1)*NB+1, I2 ), 1 ) |
$ A( (J+1)*NB+1, I2 ), 1 ) |
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M) |
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M) |
CALL ZSWAP( I2-I1-1, A( I1, I1+1 ), LDA, |
IF( I2.GT.(I1+1) ) |
$ A( I1+1, I2 ), 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) |
* > Swap A(I2+1:M, I1) with A(I2+1:M, I2) |
CALL ZSWAP( N-I2, A( I1, I2+1 ), LDA, |
IF( I2.LT.N ) |
$ A( I2, I2+1 ), LDA ) |
$ CALL ZSWAP( N-I2, A( I1, I2+1 ), LDA, |
|
$ A( I2, I2+1 ), LDA ) |
* > Swap A(I1, I1) with A(I2, I2) |
* > Swap A(I1, I1) with A(I2, I2) |
PIV = A( I1, I1 ) |
PIV = A( I1, I1 ) |
A( I1, I1 ) = A( I2, I2 ) |
A( I1, I1 ) = A( I2, I2 ) |
Line 635 c END IF
|
Line 639 c END IF
|
CALL ZSWAP( K-1, A( I1, (J+1)*NB+1 ), LDA, |
CALL ZSWAP( K-1, A( I1, (J+1)*NB+1 ), LDA, |
$ A( I2, (J+1)*NB+1 ), LDA ) |
$ A( I2, (J+1)*NB+1 ), LDA ) |
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M) |
* > Swap A(I1+1:M, I1) with A(I2, I1+1:M) |
CALL ZSWAP( I2-I1-1, A( I1+1, I1 ), 1, |
IF( I2.GT.(I1+1) ) |
$ A( I2, I1+1 ), LDA ) |
$ 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) |
* > Swap A(I2+1:M, I1) with A(I2+1:M, I2) |
CALL ZSWAP( N-I2, A( I2+1, I1 ), 1, |
IF( I2.LT.N ) |
$ A( I2+1, I2 ), 1 ) |
$ CALL ZSWAP( N-I2, A( I2+1, I1 ), 1, |
|
$ A( I2+1, I2 ), 1 ) |
* > Swap A(I1, I1) with A(I2, I2) |
* > Swap A(I1, I1) with A(I2, I2) |
PIV = A( I1, I1 ) |
PIV = A( I1, I1 ) |
A( I1, I1 ) = A( I2, I2 ) |
A( I1, I1 ) = A( I2, I2 ) |
Line 663 c $ (J+1)*NB+1,
|
Line 669 c $ (J+1)*NB+1,
|
* Factor the band matrix |
* Factor the band matrix |
CALL ZGBTRF( N, N, NB, NB, TB, LDTB, IPIV2, INFO ) |
CALL ZGBTRF( N, N, NB, NB, TB, LDTB, IPIV2, INFO ) |
* |
* |
|
RETURN |
|
* |
* End of ZSYTRF_AA_2STAGE |
* End of ZSYTRF_AA_2STAGE |
* |
* |
END |
END |