version 1.1, 2018/05/29 14:56:49
|
version 1.2, 2020/05/21 21:46:06
|
Line 38
|
Line 38
|
*> \verbatim |
*> \verbatim |
*> |
*> |
*> ZHETRS_AA_2STAGE solves a system of linear equations A*X = B with a |
*> ZHETRS_AA_2STAGE solves a system of linear equations A*X = B with a |
*> hermitian matrix A using the factorization A = U*T*U**T or |
*> hermitian matrix A using the factorization A = U**H*T*U or |
*> A = L*T*L**T computed by ZHETRF_AA_2STAGE. |
*> A = L*T*L**H computed by ZHETRF_AA_2STAGE. |
*> \endverbatim |
*> \endverbatim |
* |
* |
* Arguments: |
* Arguments: |
Line 50
|
Line 50
|
*> UPLO is CHARACTER*1 |
*> UPLO is CHARACTER*1 |
*> Specifies whether the details of the factorization are stored |
*> Specifies whether the details of the factorization are stored |
*> as an upper or lower triangular matrix. |
*> as an upper or lower triangular matrix. |
*> = 'U': Upper triangular, form is A = U*T*U**T; |
*> = 'U': Upper triangular, form is A = U**H*T*U; |
*> = 'L': Lower triangular, form is A = L*T*L**T. |
*> = 'L': Lower triangular, form is A = L*T*L**H. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] N |
*> \param[in] N |
Line 69
|
Line 69
|
*> |
*> |
*> \param[in] A |
*> \param[in] A |
*> \verbatim |
*> \verbatim |
*> A is COMPLEX*16array, dimension (LDA,N) |
*> A is COMPLEX*16 array, dimension (LDA,N) |
*> Details of factors computed by ZHETRF_AA_2STAGE. |
*> Details of factors computed by ZHETRF_AA_2STAGE. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
Line 81
|
Line 81
|
*> |
*> |
*> \param[out] TB |
*> \param[out] TB |
*> \verbatim |
*> \verbatim |
*> TB is COMPLEX*16array, dimension (LTB) |
*> TB is COMPLEX*16 array, dimension (LTB) |
*> Details of factors computed by ZHETRF_AA_2STAGE. |
*> Details of factors computed by ZHETRF_AA_2STAGE. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] LTB |
*> \param[in] LTB |
*> \verbatim |
*> \verbatim |
|
*> LTB is INTEGER |
*> The size of the array TB. LTB >= 4*N. |
*> The size of the array TB. LTB >= 4*N. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
Line 106
|
Line 107
|
*> |
*> |
*> \param[in,out] B |
*> \param[in,out] B |
*> \verbatim |
*> \verbatim |
*> B is COMPLEX*16array, dimension (LDB,NRHS) |
*> B is COMPLEX*16 array, dimension (LDB,NRHS) |
*> On entry, the right hand side matrix B. |
*> On entry, the right hand side matrix B. |
*> On exit, the solution matrix X. |
*> On exit, the solution matrix X. |
*> \endverbatim |
*> \endverbatim |
Line 209
|
Line 210
|
* |
* |
IF( UPPER ) THEN |
IF( UPPER ) THEN |
* |
* |
* Solve A*X = B, where A = U*T*U**T. |
* Solve A*X = B, where A = U**H*T*U. |
* |
* |
IF( N.GT.NB ) THEN |
IF( N.GT.NB ) THEN |
* |
* |
* Pivot, P**T * B |
* Pivot, P**T * B -> B |
* |
* |
CALL ZLASWP( NRHS, B, LDB, NB+1, N, IPIV, 1 ) |
CALL ZLASWP( NRHS, B, LDB, NB+1, N, IPIV, 1 ) |
* |
* |
* Compute (U**T \P**T * B) -> B [ (U**T \P**T * B) ] |
* Compute (U**H \ B) -> B [ (U**H \P**T * B) ] |
* |
* |
CALL ZTRSM( 'L', 'U', 'C', 'U', N-NB, NRHS, ONE, A(1, NB+1), |
CALL ZTRSM( 'L', 'U', 'C', 'U', N-NB, NRHS, ONE, A(1, NB+1), |
$ LDA, B(NB+1, 1), LDB) |
$ LDA, B(NB+1, 1), LDB) |
* |
* |
END IF |
END IF |
* |
* |
* Compute T \ B -> B [ T \ (U**T \P**T * B) ] |
* Compute T \ B -> B [ T \ (U**H \P**T * B) ] |
* |
* |
CALL ZGBTRS( 'N', N, NB, NB, NRHS, TB, LDTB, IPIV2, B, LDB, |
CALL ZGBTRS( 'N', N, NB, NB, NRHS, TB, LDTB, IPIV2, B, LDB, |
$ INFO) |
$ INFO) |
IF( N.GT.NB ) THEN |
IF( N.GT.NB ) THEN |
* |
* |
* Compute (U \ B) -> B [ U \ (T \ (U**T \P**T * B) ) ] |
* Compute (U \ B) -> B [ U \ (T \ (U**H \P**T * B) ) ] |
* |
* |
CALL ZTRSM( 'L', 'U', 'N', 'U', N-NB, NRHS, ONE, A(1, NB+1), |
CALL ZTRSM( 'L', 'U', 'N', 'U', N-NB, NRHS, ONE, A(1, NB+1), |
$ LDA, B(NB+1, 1), LDB) |
$ LDA, B(NB+1, 1), LDB) |
* |
* |
* Pivot, P * B [ P * (U \ (T \ (U**T \P**T * B) )) ] |
* Pivot, P * B -> B [ P * (U \ (T \ (U**H \P**T * B) )) ] |
* |
* |
CALL ZLASWP( NRHS, B, LDB, NB+1, N, IPIV, -1 ) |
CALL ZLASWP( NRHS, B, LDB, NB+1, N, IPIV, -1 ) |
* |
* |
Line 243
|
Line 244
|
* |
* |
ELSE |
ELSE |
* |
* |
* Solve A*X = B, where A = L*T*L**T. |
* Solve A*X = B, where A = L*T*L**H. |
* |
* |
IF( N.GT.NB ) THEN |
IF( N.GT.NB ) THEN |
* |
* |
* Pivot, P**T * B |
* Pivot, P**T * B -> B |
* |
* |
CALL ZLASWP( NRHS, B, LDB, NB+1, N, IPIV, 1 ) |
CALL ZLASWP( NRHS, B, LDB, NB+1, N, IPIV, 1 ) |
* |
* |
* Compute (L \P**T * B) -> B [ (L \P**T * B) ] |
* Compute (L \ B) -> B [ (L \P**T * B) ] |
* |
* |
CALL ZTRSM( 'L', 'L', 'N', 'U', N-NB, NRHS, ONE, A(NB+1, 1), |
CALL ZTRSM( 'L', 'L', 'N', 'U', N-NB, NRHS, ONE, A(NB+1, 1), |
$ LDA, B(NB+1, 1), LDB) |
$ LDA, B(NB+1, 1), LDB) |
Line 264
|
Line 265
|
$ INFO) |
$ INFO) |
IF( N.GT.NB ) THEN |
IF( N.GT.NB ) THEN |
* |
* |
* Compute (L**T \ B) -> B [ L**T \ (T \ (L \P**T * B) ) ] |
* Compute (L**H \ B) -> B [ L**H \ (T \ (L \P**T * B) ) ] |
* |
* |
CALL ZTRSM( 'L', 'L', 'C', 'U', N-NB, NRHS, ONE, A(NB+1, 1), |
CALL ZTRSM( 'L', 'L', 'C', 'U', N-NB, NRHS, ONE, A(NB+1, 1), |
$ LDA, B(NB+1, 1), LDB) |
$ LDA, B(NB+1, 1), LDB) |
* |
* |
* Pivot, P * B [ P * (L**T \ (T \ (L \P**T * B) )) ] |
* Pivot, P * B -> B [ P * (L**H \ (T \ (L \P**T * B) )) ] |
* |
* |
CALL ZLASWP( NRHS, B, LDB, NB+1, N, IPIV, -1 ) |
CALL ZLASWP( NRHS, B, LDB, NB+1, N, IPIV, -1 ) |
* |
* |