version 1.3, 2010/08/06 15:28:47
|
version 1.9, 2011/07/22 07:38:10
|
Line 1
|
Line 1
|
SUBROUTINE DSGESV( N, NRHS, A, LDA, IPIV, B, LDB, X, LDX, WORK, |
SUBROUTINE DSGESV( N, NRHS, A, LDA, IPIV, B, LDB, X, LDX, WORK, |
+ SWORK, ITER, INFO ) |
$ SWORK, ITER, INFO ) |
* |
* |
* -- LAPACK PROTOTYPE driver routine (version 3.2) -- |
* -- LAPACK PROTOTYPE 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..-- |
* February 2007 |
* -- April 2011 -- |
* |
* |
* .. |
* .. |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
Line 14
|
Line 14
|
INTEGER IPIV( * ) |
INTEGER IPIV( * ) |
REAL SWORK( * ) |
REAL SWORK( * ) |
DOUBLE PRECISION A( LDA, * ), B( LDB, * ), WORK( N, * ), |
DOUBLE PRECISION A( LDA, * ), B( LDB, * ), WORK( N, * ), |
+ X( LDX, * ) |
$ X( LDX, * ) |
* .. |
* .. |
* |
* |
* Purpose |
* Purpose |
Line 62
|
Line 62
|
* The number of right hand sides, i.e., the number of columns |
* The number of right hand sides, i.e., the number of columns |
* of the matrix B. NRHS >= 0. |
* of the matrix B. NRHS >= 0. |
* |
* |
* A (input or input/ouptut) DOUBLE PRECISION array, |
* A (input/output) DOUBLE PRECISION array, |
* dimension (LDA,N) |
* dimension (LDA,N) |
* On entry, the N-by-N coefficient matrix A. |
* On entry, the N-by-N coefficient matrix A. |
* On exit, if iterative refinement has been successfully used |
* On exit, if iterative refinement has been successfully used |
Line 94
|
Line 94
|
* LDX (input) INTEGER |
* LDX (input) INTEGER |
* The leading dimension of the array X. LDX >= max(1,N). |
* The leading dimension of the array X. LDX >= max(1,N). |
* |
* |
* WORK (workspace) DOUBLE PRECISION array, dimension (N*NRHS) |
* WORK (workspace) DOUBLE PRECISION array, dimension (N,NRHS) |
* This array is used to hold the residual vectors. |
* This array is used to hold the residual vectors. |
* |
* |
* SWORK (workspace) REAL array, dimension (N*(N+NRHS)) |
* SWORK (workspace) REAL array, dimension (N*(N+NRHS)) |
Line 122
|
Line 122
|
* but the factor U is exactly singular, so the solution |
* but the factor U is exactly singular, so the solution |
* could not be computed. |
* could not be computed. |
* |
* |
* ========= |
* ===================================================================== |
* |
* |
* .. Parameters .. |
* .. Parameters .. |
LOGICAL DOITREF |
LOGICAL DOITREF |
Line 143
|
Line 143
|
* |
* |
* .. External Subroutines .. |
* .. External Subroutines .. |
EXTERNAL DAXPY, DGEMM, DLACPY, DLAG2S, SLAG2D, SGETRF, |
EXTERNAL DAXPY, DGEMM, DLACPY, DLAG2S, SLAG2D, SGETRF, |
+ SGETRS, XERBLA |
$ SGETRS, XERBLA |
* .. |
* .. |
* .. External Functions .. |
* .. External Functions .. |
INTEGER IDAMAX |
INTEGER IDAMAX |
Line 179
|
Line 179
|
* Quick return if (N.EQ.0). |
* Quick return if (N.EQ.0). |
* |
* |
IF( N.EQ.0 ) |
IF( N.EQ.0 ) |
+ RETURN |
$ RETURN |
* |
* |
* Skip single precision iterative refinement if a priori slower |
* Skip single precision iterative refinement if a priori slower |
* than double precision factorization. |
* than double precision factorization. |
Line 232
|
Line 232
|
* Solve the system SA*SX = SB. |
* Solve the system SA*SX = SB. |
* |
* |
CALL SGETRS( 'No transpose', N, NRHS, SWORK( PTSA ), N, IPIV, |
CALL SGETRS( 'No transpose', N, NRHS, SWORK( PTSA ), N, IPIV, |
+ SWORK( PTSX ), N, INFO ) |
$ SWORK( PTSX ), N, INFO ) |
* |
* |
* Convert SX back to double precision |
* Convert SX back to double precision |
* |
* |
Line 243
|
Line 243
|
CALL DLACPY( 'All', N, NRHS, B, LDB, WORK, N ) |
CALL DLACPY( 'All', N, NRHS, B, LDB, WORK, N ) |
* |
* |
CALL DGEMM( 'No Transpose', 'No Transpose', N, NRHS, N, NEGONE, A, |
CALL DGEMM( 'No Transpose', 'No Transpose', N, NRHS, N, NEGONE, A, |
+ LDA, X, LDX, ONE, WORK, N ) |
$ LDA, X, LDX, ONE, WORK, N ) |
* |
* |
* Check whether the NRHS normwise backward errors satisfy the |
* Check whether the NRHS normwise backward errors satisfy the |
* stopping criterion. If yes, set ITER=0 and return. |
* stopping criterion. If yes, set ITER=0 and return. |
Line 252
|
Line 252
|
XNRM = ABS( X( IDAMAX( N, X( 1, I ), 1 ), I ) ) |
XNRM = ABS( X( IDAMAX( N, X( 1, I ), 1 ), I ) ) |
RNRM = ABS( WORK( IDAMAX( N, WORK( 1, I ), 1 ), I ) ) |
RNRM = ABS( WORK( IDAMAX( N, WORK( 1, I ), 1 ), I ) ) |
IF( RNRM.GT.XNRM*CTE ) |
IF( RNRM.GT.XNRM*CTE ) |
+ GO TO 10 |
$ GO TO 10 |
END DO |
END DO |
* |
* |
* If we are here, the NRHS normwise backward errors satisfy the |
* If we are here, the NRHS normwise backward errors satisfy the |
Line 278
|
Line 278
|
* Solve the system SA*SX = SR. |
* Solve the system SA*SX = SR. |
* |
* |
CALL SGETRS( 'No transpose', N, NRHS, SWORK( PTSA ), N, IPIV, |
CALL SGETRS( 'No transpose', N, NRHS, SWORK( PTSA ), N, IPIV, |
+ SWORK( PTSX ), N, INFO ) |
$ SWORK( PTSX ), N, INFO ) |
* |
* |
* Convert SX back to double precision and update the current |
* Convert SX back to double precision and update the current |
* iterate. |
* iterate. |
Line 294
|
Line 294
|
CALL DLACPY( 'All', N, NRHS, B, LDB, WORK, N ) |
CALL DLACPY( 'All', N, NRHS, B, LDB, WORK, N ) |
* |
* |
CALL DGEMM( 'No Transpose', 'No Transpose', N, NRHS, N, NEGONE, |
CALL DGEMM( 'No Transpose', 'No Transpose', N, NRHS, N, NEGONE, |
+ A, LDA, X, LDX, ONE, WORK, N ) |
$ A, LDA, X, LDX, ONE, WORK, N ) |
* |
* |
* Check whether the NRHS normwise backward errors satisfy the |
* Check whether the NRHS normwise backward errors satisfy the |
* stopping criterion. If yes, set ITER=IITER>0 and return. |
* stopping criterion. If yes, set ITER=IITER>0 and return. |
Line 303
|
Line 303
|
XNRM = ABS( X( IDAMAX( N, X( 1, I ), 1 ), I ) ) |
XNRM = ABS( X( IDAMAX( N, X( 1, I ), 1 ), I ) ) |
RNRM = ABS( WORK( IDAMAX( N, WORK( 1, I ), 1 ), I ) ) |
RNRM = ABS( WORK( IDAMAX( N, WORK( 1, I ), 1 ), I ) ) |
IF( RNRM.GT.XNRM*CTE ) |
IF( RNRM.GT.XNRM*CTE ) |
+ GO TO 20 |
$ GO TO 20 |
END DO |
END DO |
* |
* |
* If we are here, the NRHS normwise backward errors satisfy the |
* If we are here, the NRHS normwise backward errors satisfy the |
Line 332
|
Line 332
|
CALL DGETRF( N, N, A, LDA, IPIV, INFO ) |
CALL DGETRF( N, N, A, LDA, IPIV, INFO ) |
* |
* |
IF( INFO.NE.0 ) |
IF( INFO.NE.0 ) |
+ RETURN |
$ RETURN |
* |
* |
CALL DLACPY( 'All', N, NRHS, B, LDB, X, LDX ) |
CALL DLACPY( 'All', N, NRHS, B, LDB, X, LDX ) |
CALL DGETRS( 'No transpose', N, NRHS, A, LDA, IPIV, X, LDX, |
CALL DGETRS( 'No transpose', N, NRHS, A, LDA, IPIV, X, LDX, |
+ INFO ) |
$ INFO ) |
* |
* |
RETURN |
RETURN |
* |
* |