version 1.2, 2010/12/21 13:53:56
|
version 1.3, 2011/07/22 07:38:20
|
Line 1
|
Line 1
|
SUBROUTINE ZSYTRI2( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO ) |
SUBROUTINE ZSYTRI2( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO ) |
* |
* |
* -- LAPACK routine (version 3.3.0) -- |
* -- LAPACK routine (version 3.3.1) -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
* November 2010 |
* -- April 2011 -- |
* |
* |
* -- Written by Julie Langou of the Univ. of TN -- |
* -- Written by Julie Langou of the Univ. of TN -- |
* |
* |
|
* @precisions normal z -> s d c |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
CHARACTER UPLO |
CHARACTER UPLO |
INTEGER INFO, LDA, LWORK, N |
INTEGER INFO, LDA, LWORK, N |
* .. |
* .. |
* .. Array Arguments .. |
* .. Array Arguments .. |
INTEGER IPIV( * ) |
INTEGER IPIV( * ) |
DOUBLE COMPLEX A( LDA, * ), WORK( * ) |
COMPLEX*16 A( LDA, * ), WORK( * ) |
* .. |
* .. |
* |
* |
* Purpose |
* Purpose |
* ======= |
* ======= |
* |
* |
* ZSYTRI2 computes the inverse of a complex symmetric indefinite matrix |
* ZSYTRI2 computes the inverse of a COMPLEX*16 hermitian indefinite matrix |
* A using the factorization A = U*D*U**T or A = L*D*L**T computed by |
* A using the factorization A = U*D*U**T or A = L*D*L**T computed by |
* ZSYTRF. ZSYTRI2 sets the LEADING DIMENSION of the workspace |
* ZSYTRF. ZSYTRI2 sets the LEADING DIMENSION of the workspace |
* before calling ZSYTRI2X that actually computes the inverse. |
* before calling ZSYTRI2X that actually computes the inverse. |
Line 36
|
Line 37
|
* N (input) INTEGER |
* N (input) INTEGER |
* The order of the matrix A. N >= 0. |
* The order of the matrix A. N >= 0. |
* |
* |
* A (input/output) DOUBLE COMPLEX array, dimension (LDA,N) |
* A (input/output) COMPLEX*16 array, dimension (LDA,N) |
* On entry, the NB diagonal matrix D and the multipliers |
* On entry, the NB diagonal matrix D and the multipliers |
* used to obtain the factor U or L as computed by ZSYTRF. |
* used to obtain the factor U or L as computed by ZSYTRF. |
* |
* |
Line 54
|
Line 55
|
* Details of the interchanges and the NB structure of D |
* Details of the interchanges and the NB structure of D |
* as determined by ZSYTRF. |
* as determined by ZSYTRF. |
* |
* |
* WORK (workspace) DOUBLE COMPLEX array, dimension (N+NB+1)*(NB+3) |
* WORK (workspace) COMPLEX*16 array, dimension (N+NB+1)*(NB+3) |
* |
* |
* LWORK (input) INTEGER |
* LWORK (input) INTEGER |
* The dimension of the array WORK. |
* The dimension of the array WORK. |
Line 94
|
Line 95
|
LQUERY = ( LWORK.EQ.-1 ) |
LQUERY = ( LWORK.EQ.-1 ) |
* Get blocksize |
* Get blocksize |
NBMAX = ILAENV( 1, 'ZSYTRF', UPLO, N, -1, -1, -1 ) |
NBMAX = ILAENV( 1, 'ZSYTRF', UPLO, N, -1, -1, -1 ) |
MINSIZE = (N+NBMAX+1)*(NBMAX+3) |
IF ( NBMAX .GE. N ) THEN |
|
MINSIZE = N |
|
ELSE |
|
MINSIZE = (N+NBMAX+1)*(NBMAX+3) |
|
END IF |
* |
* |
IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN |
IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN |
INFO = -1 |
INFO = -1 |
Line 113
|
Line 118
|
CALL XERBLA( 'ZSYTRI2', -INFO ) |
CALL XERBLA( 'ZSYTRI2', -INFO ) |
RETURN |
RETURN |
ELSE IF( LQUERY ) THEN |
ELSE IF( LQUERY ) THEN |
WORK(1)=(N+NBMAX+1)*(NBMAX+3) |
WORK(1)=MINSIZE |
RETURN |
RETURN |
END IF |
END IF |
IF( N.EQ.0 ) |
IF( N.EQ.0 ) |
$ RETURN |
$ RETURN |
|
|
CALL ZSYTRI2X( UPLO, N, A, LDA, IPIV, WORK, NBMAX, INFO ) |
IF( NBMAX .GE. N ) THEN |
|
CALL ZSYTRI( UPLO, N, A, LDA, IPIV, WORK, INFO ) |
|
ELSE |
|
CALL ZSYTRI2X( UPLO, N, A, LDA, IPIV, WORK, NBMAX, INFO ) |
|
END IF |
RETURN |
RETURN |
* |
* |
* End of ZSYTRI2 |
* End of ZSYTRI2 |