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/csytri2x.f | |
parent | b472675224a899727e448e8185a3776d40f12077 (diff) |
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/csytri2x.f')
-rw-r--r-- | SRC/csytri2x.f | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/SRC/csytri2x.f b/SRC/csytri2x.f index 5812e6d1..a10661ba 100644 --- a/SRC/csytri2x.f +++ b/SRC/csytri2x.f @@ -272,10 +272,16 @@ CALL CTRMM('L','U','T','U',NNB, NNB, $ ONE,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('T','N',NNB,NNB,CUT,ONE,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 * @@ -436,13 +442,19 @@ * CALL CTRMM('L',UPLO,'T','U',NNB, NNB, $ ONE,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('T','N',NNB,NNB,N-NNB-CUT,ONE,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 |