version 1.1, 2018/05/29 14:57:21
|
version 1.2, 2020/05/21 21:46:10
|
Line 43
|
Line 43
|
*> matrices. |
*> matrices. |
*> |
*> |
*> Aasen's 2-stage algorithm is used to factor A as |
*> Aasen's 2-stage algorithm is used to factor A as |
*> A = U * T * U**H, if UPLO = 'U', or |
*> A = U**T * T * U, if UPLO = 'U', or |
*> A = L * T * L**H, if UPLO = 'L', |
*> A = L * T * L**T, if UPLO = 'L', |
*> 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 symmetric and band. The matrix T is |
*> triangular matrices, and T is symmetric and band. The matrix T is |
*> then LU-factored with partial pivoting. The factored form of A |
*> then LU-factored with partial pivoting. The factored form of A |
Line 105
|
Line 105
|
*> |
*> |
*> \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 124
|
Line 125
|
*> |
*> |
*> \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 150
|
Line 151
|
*> |
*> |
*> \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 233
|
Line 235
|
INFO = -3 |
INFO = -3 |
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN |
ELSE IF( LDA.LT.MAX( 1, N ) ) THEN |
INFO = -5 |
INFO = -5 |
|
ELSE IF( LTB.LT.( 4*N ) .AND. .NOT.TQUERY ) THEN |
|
INFO = -7 |
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN |
ELSE IF( LDB.LT.MAX( 1, N ) ) THEN |
INFO = -11 |
INFO = -11 |
|
ELSE IF( LWORK.LT.N .AND. .NOT.WQUERY ) THEN |
|
INFO = -13 |
END IF |
END IF |
* |
* |
IF( INFO.EQ.0 ) THEN |
IF( INFO.EQ.0 ) THEN |
CALL ZSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, -1, IPIV, |
CALL ZSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, -1, IPIV, |
$ IPIV2, WORK, -1, INFO ) |
$ IPIV2, WORK, -1, INFO ) |
LWKOPT = INT( WORK(1) ) |
LWKOPT = INT( WORK(1) ) |
IF( LTB.LT.INT( TB(1) ) .AND. .NOT.TQUERY ) THEN |
|
INFO = -7 |
|
ELSE IF( LWORK.LT.LWKOPT .AND. .NOT.WQUERY ) THEN |
|
INFO = -13 |
|
END IF |
|
END IF |
END IF |
* |
* |
IF( INFO.NE.0 ) THEN |
IF( INFO.NE.0 ) THEN |
Line 256
|
Line 257
|
END IF |
END IF |
* |
* |
* |
* |
* Compute the factorization A = U*T*U**H or A = L*T*L**H. |
* Compute the factorization A = U**T*T*U or A = L*T*L**T. |
* |
* |
CALL ZSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, LTB, IPIV, IPIV2, |
CALL ZSYTRF_AA_2STAGE( UPLO, N, A, LDA, TB, LTB, IPIV, IPIV2, |
$ WORK, LWORK, INFO ) |
$ WORK, LWORK, INFO ) |