aboutsummaryrefslogtreecommitdiff
path: root/SRC/csytri2x.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/csytri2x.f
parentb472675224a899727e448e8185a3776d40f12077 (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.f18
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