summaryrefslogtreecommitdiff
path: root/SRC/chetri2x.f
diff options
context:
space:
mode:
authorjulie <julielangou@users.noreply.github.com>2011-01-28 23:04:40 +0000
committerjulie <julielangou@users.noreply.github.com>2011-01-28 23:04:40 +0000
commit318f35554ef359cb5caafd5fcfcec4d30ce030d8 (patch)
tree492dbbb8df254aaea705893309f186acf52762cc /SRC/chetri2x.f
parentb472675224a899727e448e8185a3776d40f12077 (diff)
downloadlapack-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.f18
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