diff options
author | julie <julielangou@users.noreply.github.com> | 2011-01-28 23:04:40 +0000 |
---|---|---|
committer | julie <julielangou@users.noreply.github.com> | 2011-01-28 23:04:40 +0000 |
commit | 318f35554ef359cb5caafd5fcfcec4d30ce030d8 (patch) | |
tree | 492dbbb8df254aaea705893309f186acf52762cc /SRC/chetri2x.f | |
parent | b472675224a899727e448e8185a3776d40f12077 (diff) | |
download | lapack-318f35554ef359cb5caafd5fcfcec4d30ce030d8.tar.gz lapack-318f35554ef359cb5caafd5fcfcec4d30ce030d8.tar.bz2 lapack-318f35554ef359cb5caafd5fcfcec4d30ce030d8.zip |
Correct bug0069
Bug was sent by nmozarto on Jan 27th (see forum topic 2156)
Problem in new function ?SYTRI2 was found: the part of A below the diagonal is changed in the case UPLO='U' .
But in the description of arguments
If UPLO = 'U', the upper triangular part of the
inverse is formed and the part of A below the diagonal is not
referenced; if UPLO = 'L' the lower triangular part of the
inverse is formed and the part of A above the diagonal is
not referenced.
These elements zeroized after calling ?GEMM function in ?SYTRI2X.
CALL SGEMM('T','N',NNB,NNB,CUT,ONE,A(1,CUT+1),LDA,
$ WORK,N+NB+1, ZERO, A(CUT+1,CUT+1), LDA)
Diffstat (limited to 'SRC/chetri2x.f')
-rw-r--r-- | SRC/chetri2x.f | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/SRC/chetri2x.f b/SRC/chetri2x.f index 566fede4..6a01d5d2 100644 --- a/SRC/chetri2x.f +++ b/SRC/chetri2x.f @@ -274,10 +274,16 @@ CALL CTRMM('L','U','C','U',NNB, NNB, $ CONE,A(CUT+1,CUT+1),LDA,WORK(U11+1,1),N+NB+1) * + DO I=1,NNB + DO J=I,NNB + A(CUT+I,CUT+J)=WORK(U11+I,J) + END DO + END DO +* * U01'invD*U01->A(CUT+I,CUT+J) * CALL CGEMM('C','N',NNB,NNB,CUT,CONE,A(1,CUT+1),LDA, - $ WORK,N+NB+1, ZERO, A(CUT+1,CUT+1), LDA) + $ WORK,N+NB+1, ZERO, WORK(U11+1,1), N+NB+1) * * U11 = U11T*invD1*U11 + U01'invD*U01 * @@ -438,13 +444,19 @@ * CALL CTRMM('L',UPLO,'C','U',NNB, NNB, $ CONE,A(CUT+1,CUT+1),LDA,WORK(U11+1,1),N+NB+1) - +* + DO I=1,NNB + DO J=1,I + A(CUT+I,CUT+J)=WORK(U11+I,J) + END DO + END DO +* IF ( (CUT+NNB) .LT. N ) THEN * * L21T*invD2*L21->A(CUT+I,CUT+J) * CALL CGEMM('C','N',NNB,NNB,N-NNB-CUT,CONE,A(CUT+NNB+1,CUT+1) - $ ,LDA,WORK,N+NB+1, ZERO, A(CUT+1,CUT+1), LDA) + $ ,LDA,WORK,N+NB+1, ZERO, WORK(U11+1,1), N+NB+1) * * L11 = L11T*invD1*L11 + U01'invD*U01 |