version 1.1, 2018/05/29 14:56:16
|
version 1.2, 2020/05/21 21:46:05
|
Line 44
|
Line 44
|
*> 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**H * T * U, if UPLO = 'U', or |
*> A = L * T * L**H, if UPLO = 'L', |
*> A = L * T * L**H, 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 Hermitian and band. The matrix T is |
*> triangular matrices, and T is Hermitian and band. The matrix T is |
Line 106
|
Line 106
|
*> |
*> |
*> \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 125
|
Line 126
|
*> |
*> |
*> \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 151
|
Line 152
|
*> |
*> |
*> \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 209
|
Line 211
|
* |
* |
* .. Local Scalars .. |
* .. Local Scalars .. |
LOGICAL UPPER, TQUERY, WQUERY |
LOGICAL UPPER, TQUERY, WQUERY |
INTEGER I, J, K, I1, I2, TD |
INTEGER LWKOPT |
INTEGER LDTB, LWKOPT, NB, KB, NT, IINFO |
|
COMPLEX PIV |
|
* .. |
* .. |
* .. External Functions .. |
* .. External Functions .. |
LOGICAL LSAME |
LOGICAL LSAME |
Line 240
|
Line 240
|
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 ZHETRF_AA_2STAGE( UPLO, N, A, LDA, TB, -1, IPIV, |
CALL ZHETRF_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 262
|
Line 261
|
RETURN |
RETURN |
END IF |
END IF |
* |
* |
* Compute the factorization A = U*T*U**H or A = L*T*L**H. |
* Compute the factorization A = U**H*T*U or A = L*T*L**H. |
* |
* |
CALL ZHETRF_AA_2STAGE( UPLO, N, A, LDA, TB, LTB, IPIV, IPIV2, |
CALL ZHETRF_AA_2STAGE( UPLO, N, A, LDA, TB, LTB, IPIV, IPIV2, |
$ WORK, LWORK, INFO ) |
$ WORK, LWORK, INFO ) |