version 1.8, 2010/12/21 13:53:39
|
version 1.9, 2011/07/22 07:38:11
|
Line 1
|
Line 1
|
SUBROUTINE DSYSV( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK, |
SUBROUTINE DSYSV( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK, |
$ LWORK, INFO ) |
$ LWORK, INFO ) |
* |
* |
* -- LAPACK driver routine (version 3.2.2) -- |
* -- LAPACK driver 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..-- |
* May 2010 |
* -- April 2011 -- |
|
* @generated d |
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
CHARACTER UPLO |
CHARACTER UPLO |
Line 88
|
Line 89
|
* The length of WORK. LWORK >= 1, and for best performance |
* The length of WORK. LWORK >= 1, and for best performance |
* LWORK >= max(1,N*NB), where NB is the optimal blocksize for |
* LWORK >= max(1,N*NB), where NB is the optimal blocksize for |
* DSYTRF. |
* DSYTRF. |
|
* for LWORK < N, TRS will be done with Level BLAS 2 |
|
* for LWORK >= N, TRS will be done with Level BLAS 3 |
* |
* |
* If LWORK = -1, then a workspace query is assumed; the routine |
* If LWORK = -1, then a workspace query is assumed; the routine |
* only calculates the optimal size of the WORK array, returns |
* only calculates the optimal size of the WORK array, returns |
Line 113
|
Line 116
|
EXTERNAL LSAME, ILAENV |
EXTERNAL LSAME, ILAENV |
* .. |
* .. |
* .. External Subroutines .. |
* .. External Subroutines .. |
EXTERNAL DSYTRF, DSYTRS2, XERBLA |
EXTERNAL XERBLA, DSYTRF, DSYTRS, DSYTRS2 |
* .. |
* .. |
* .. Intrinsic Functions .. |
* .. Intrinsic Functions .. |
INTRINSIC MAX |
INTRINSIC MAX |
Line 142
|
Line 145
|
IF( N.EQ.0 ) THEN |
IF( N.EQ.0 ) THEN |
LWKOPT = 1 |
LWKOPT = 1 |
ELSE |
ELSE |
NB = ILAENV( 1, 'DSYTRF', UPLO, N, -1, -1, -1 ) |
CALL DSYTRF( UPLO, N, A, LDA, IPIV, WORK, -1, INFO ) |
LWKOPT = N*NB |
LWKOPT = WORK(1) |
END IF |
END IF |
WORK( 1 ) = LWKOPT |
WORK( 1 ) = LWKOPT |
END IF |
END IF |
Line 155
|
Line 158
|
RETURN |
RETURN |
END IF |
END IF |
* |
* |
* Compute the factorization A = U*D*U' or A = L*D*L'. |
* Compute the factorization A = U*D*U**T or A = L*D*L**T. |
* |
* |
CALL DSYTRF( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO ) |
CALL DSYTRF( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO ) |
IF( INFO.EQ.0 ) THEN |
IF( INFO.EQ.0 ) THEN |
* |
* |
* Solve the system A*X = B, overwriting B with X. |
* Solve the system A*X = B, overwriting B with X. |
* |
* |
CALL DSYTRS2( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK, INFO ) |
IF ( LWORK.LT.N ) THEN |
|
* |
|
* Solve with TRS ( Use Level BLAS 2) |
|
* |
|
CALL DSYTRS( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, INFO ) |
|
* |
|
ELSE |
|
* |
|
* Solve with TRS2 ( Use Level BLAS 3) |
|
* |
|
CALL DSYTRS2( UPLO,N,NRHS,A,LDA,IPIV,B,LDB,WORK,INFO ) |
|
* |
|
END IF |
* |
* |
END IF |
END IF |
* |
* |