Handle corner cases of LWORK (Reference-LAPACK PR 942)
This commit is contained in:
parent
8ce44c18a0
commit
5c11b2ff41
|
@ -433,9 +433,9 @@
|
||||||
* block factorization, LWORK is the length of AINV.
|
* block factorization, LWORK is the length of AINV.
|
||||||
*
|
*
|
||||||
SRNAMT = 'CHETRF_AA_2STAGE'
|
SRNAMT = 'CHETRF_AA_2STAGE'
|
||||||
LWORK = MIN(N*NB, 3*NMAX*NMAX)
|
LWORK = MIN( MAX( 1, N*NB ), 3*NMAX*NMAX)
|
||||||
CALL CHETRF_AA_2STAGE( UPLO, N, AFAC, LDA,
|
CALL CHETRF_AA_2STAGE( UPLO, N, AFAC, LDA,
|
||||||
$ AINV, (3*NB+1)*N,
|
$ AINV, MAX( 1, (3*NB+1)*N ),
|
||||||
$ IWORK, IWORK( 1+N ),
|
$ IWORK, IWORK( 1+N ),
|
||||||
$ WORK, LWORK,
|
$ WORK, LWORK,
|
||||||
$ INFO )
|
$ INFO )
|
||||||
|
@ -517,7 +517,6 @@ c NT = 1
|
||||||
CALL CLACPY( 'Full', N, NRHS, B, LDA, X, LDA )
|
CALL CLACPY( 'Full', N, NRHS, B, LDA, X, LDA )
|
||||||
*
|
*
|
||||||
SRNAMT = 'CHETRS_AA_2STAGE'
|
SRNAMT = 'CHETRS_AA_2STAGE'
|
||||||
LWORK = MAX( 1, 3*N-2 )
|
|
||||||
CALL CHETRS_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
|
CALL CHETRS_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
|
||||||
$ AINV, (3*NB+1)*N, IWORK, IWORK( 1+N ),
|
$ AINV, (3*NB+1)*N, IWORK, IWORK( 1+N ),
|
||||||
$ X, LDA, INFO )
|
$ X, LDA, INFO )
|
||||||
|
|
|
@ -400,9 +400,9 @@
|
||||||
* Factor the matrix and solve the system using CHESV_AA.
|
* Factor the matrix and solve the system using CHESV_AA.
|
||||||
*
|
*
|
||||||
SRNAMT = 'CHESV_AA_2STAGE '
|
SRNAMT = 'CHESV_AA_2STAGE '
|
||||||
LWORK = MIN(N*NB, 3*NMAX*NMAX)
|
LWORK = MIN( MAX( 1, N*NB ), 3*NMAX*NMAX)
|
||||||
CALL CHESV_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
|
CALL CHESV_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
|
||||||
$ AINV, (3*NB+1)*N,
|
$ AINV, MAX( 1, (3*NB+1)*N ),
|
||||||
$ IWORK, IWORK( 1+N ),
|
$ IWORK, IWORK( 1+N ),
|
||||||
$ X, LDA, WORK, LWORK, INFO )
|
$ X, LDA, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
|
|
|
@ -421,9 +421,9 @@
|
||||||
* block factorization, LWORK is the length of AINV.
|
* block factorization, LWORK is the length of AINV.
|
||||||
*
|
*
|
||||||
SRNAMT = 'DSYTRF_AA_2STAGE'
|
SRNAMT = 'DSYTRF_AA_2STAGE'
|
||||||
LWORK = MIN(N*NB, 3*NMAX*NMAX)
|
LWORK = MIN( MAX( 1, N*NB ), 3*NMAX*NMAX )
|
||||||
CALL DSYTRF_AA_2STAGE( UPLO, N, AFAC, LDA,
|
CALL DSYTRF_AA_2STAGE( UPLO, N, AFAC, LDA,
|
||||||
$ AINV, (3*NB+1)*N,
|
$ AINV, MAX( 1, (3*NB+1)*N ),
|
||||||
$ IWORK, IWORK( 1+N ),
|
$ IWORK, IWORK( 1+N ),
|
||||||
$ WORK, LWORK,
|
$ WORK, LWORK,
|
||||||
$ INFO )
|
$ INFO )
|
||||||
|
@ -503,7 +503,6 @@ c NT = 1
|
||||||
CALL DLACPY( 'Full', N, NRHS, B, LDA, X, LDA )
|
CALL DLACPY( 'Full', N, NRHS, B, LDA, X, LDA )
|
||||||
*
|
*
|
||||||
SRNAMT = 'DSYTRS_AA_2STAGE'
|
SRNAMT = 'DSYTRS_AA_2STAGE'
|
||||||
LWORK = MAX( 1, 3*N-2 )
|
|
||||||
CALL DSYTRS_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
|
CALL DSYTRS_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
|
||||||
$ AINV, (3*NB+1)*N, IWORK, IWORK( 1+N ),
|
$ AINV, (3*NB+1)*N, IWORK, IWORK( 1+N ),
|
||||||
$ X, LDA, INFO )
|
$ X, LDA, INFO )
|
||||||
|
|
|
@ -400,9 +400,9 @@
|
||||||
* Factor the matrix and solve the system using DSYSV_AA.
|
* Factor the matrix and solve the system using DSYSV_AA.
|
||||||
*
|
*
|
||||||
SRNAMT = 'DSYSV_AA_2STAGE '
|
SRNAMT = 'DSYSV_AA_2STAGE '
|
||||||
LWORK = MIN(N*NB, 3*NMAX*NMAX)
|
LWORK = MIN( MAX( 1, N*NB ), 3*NMAX*NMAX )
|
||||||
CALL DSYSV_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
|
CALL DSYSV_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
|
||||||
$ AINV, (3*NB+1)*N,
|
$ AINV, MAX( 1, (3*NB+1)*N ),
|
||||||
$ IWORK, IWORK( 1+N ),
|
$ IWORK, IWORK( 1+N ),
|
||||||
$ X, LDA, WORK, LWORK, INFO )
|
$ X, LDA, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
|
|
|
@ -423,9 +423,9 @@
|
||||||
* block factorization, LWORK is the length of AINV.
|
* block factorization, LWORK is the length of AINV.
|
||||||
*
|
*
|
||||||
SRNAMT = 'SSYTRF_AA_2STAGE'
|
SRNAMT = 'SSYTRF_AA_2STAGE'
|
||||||
LWORK = MIN(N*NB, 3*NMAX*NMAX)
|
LWORK = MIN( MAX( 1, N*NB ), 3*NMAX*NMAX )
|
||||||
CALL SSYTRF_AA_2STAGE( UPLO, N, AFAC, LDA,
|
CALL SSYTRF_AA_2STAGE( UPLO, N, AFAC, LDA,
|
||||||
$ AINV, (3*NB+1)*N,
|
$ AINV, MAX( 1, (3*NB+1)*N ),
|
||||||
$ IWORK, IWORK( 1+N ),
|
$ IWORK, IWORK( 1+N ),
|
||||||
$ WORK, LWORK,
|
$ WORK, LWORK,
|
||||||
$ INFO )
|
$ INFO )
|
||||||
|
@ -505,7 +505,6 @@
|
||||||
CALL SLACPY( 'Full', N, NRHS, B, LDA, X, LDA )
|
CALL SLACPY( 'Full', N, NRHS, B, LDA, X, LDA )
|
||||||
*
|
*
|
||||||
SRNAMT = 'SSYTRS_AA_2STAGE'
|
SRNAMT = 'SSYTRS_AA_2STAGE'
|
||||||
LWORK = MAX( 1, 3*N-2 )
|
|
||||||
CALL SSYTRS_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
|
CALL SSYTRS_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
|
||||||
$ AINV, (3*NB+1)*N, IWORK, IWORK( 1+N ),
|
$ AINV, (3*NB+1)*N, IWORK, IWORK( 1+N ),
|
||||||
$ X, LDA, INFO )
|
$ X, LDA, INFO )
|
||||||
|
|
|
@ -400,9 +400,9 @@
|
||||||
* Factor the matrix and solve the system using SSYSV_AA.
|
* Factor the matrix and solve the system using SSYSV_AA.
|
||||||
*
|
*
|
||||||
SRNAMT = 'SSYSV_AA_2STAGE '
|
SRNAMT = 'SSYSV_AA_2STAGE '
|
||||||
LWORK = MIN(N*NB, 3*NMAX*NMAX)
|
LWORK = MIN( MAX( 1, N*NB ), 3*NMAX*NMAX )
|
||||||
CALL SSYSV_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
|
CALL SSYSV_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
|
||||||
$ AINV, (3*NB+1)*N,
|
$ AINV, MAX( 1, (3*NB+1)*N ),
|
||||||
$ IWORK, IWORK( 1+N ),
|
$ IWORK, IWORK( 1+N ),
|
||||||
$ X, LDA, WORK, LWORK, INFO )
|
$ X, LDA, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
|
|
|
@ -185,7 +185,8 @@
|
||||||
LOGICAL DOTYPE( * )
|
LOGICAL DOTYPE( * )
|
||||||
INTEGER IWORK( * ), NBVAL( * ), NSVAL( * ), NVAL( * )
|
INTEGER IWORK( * ), NBVAL( * ), NSVAL( * ), NVAL( * )
|
||||||
COMPLEX*16 A( * ), AFAC( * ), AINV( * ), B( * ),
|
COMPLEX*16 A( * ), AFAC( * ), AINV( * ), B( * ),
|
||||||
$ RWORK( * ), WORK( * ), X( * ), XACT( * )
|
$ WORK( * ), X( * ), XACT( * )
|
||||||
|
DOUBLE PRECISION RWORK( * )
|
||||||
* ..
|
* ..
|
||||||
*
|
*
|
||||||
* =====================================================================
|
* =====================================================================
|
||||||
|
@ -430,9 +431,9 @@
|
||||||
* block factorization, LWORK is the length of AINV.
|
* block factorization, LWORK is the length of AINV.
|
||||||
*
|
*
|
||||||
SRNAMT = 'ZHETRF_AA_2STAGE'
|
SRNAMT = 'ZHETRF_AA_2STAGE'
|
||||||
LWORK = MIN(N*NB, 3*NMAX*NMAX)
|
LWORK = MIN( MAX( 1, N*NB ), 3*NMAX*NMAX )
|
||||||
CALL ZHETRF_AA_2STAGE( UPLO, N, AFAC, LDA,
|
CALL ZHETRF_AA_2STAGE( UPLO, N, AFAC, LDA,
|
||||||
$ AINV, (3*NB+1)*N,
|
$ AINV, MAX( 1, (3*NB+1)*N ),
|
||||||
$ IWORK, IWORK( 1+N ),
|
$ IWORK, IWORK( 1+N ),
|
||||||
$ WORK, LWORK,
|
$ WORK, LWORK,
|
||||||
$ INFO )
|
$ INFO )
|
||||||
|
|
|
@ -400,9 +400,9 @@
|
||||||
* Factor the matrix and solve the system using ZHESV_AA.
|
* Factor the matrix and solve the system using ZHESV_AA.
|
||||||
*
|
*
|
||||||
SRNAMT = 'ZHESV_AA_2STAGE '
|
SRNAMT = 'ZHESV_AA_2STAGE '
|
||||||
LWORK = MIN(N*NB, 3*NMAX*NMAX)
|
LWORK = MIN( MAX( 1, N*NB ), 3*NMAX*NMAX )
|
||||||
CALL ZHESV_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
|
CALL ZHESV_AA_2STAGE( UPLO, N, NRHS, AFAC, LDA,
|
||||||
$ AINV, (3*NB+1)*N,
|
$ AINV, MAX( 1, (3*NB+1)*N ),
|
||||||
$ IWORK, IWORK( 1+N ),
|
$ IWORK, IWORK( 1+N ),
|
||||||
$ X, LDA, WORK, LWORK, INFO )
|
$ X, LDA, WORK, LWORK, INFO )
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue