polish comments
authorjulie <julielangou@users.noreply.github.com>
Sat, 13 Nov 2010 11:04:49 +0000 (11:04 +0000)
committerjulie <julielangou@users.noreply.github.com>
Sat, 13 Nov 2010 11:04:49 +0000 (11:04 +0000)
correct final iteration in the lower case.
Teststing are fine now with the  -fbounds-check options.

SRC/csytri2x.f
SRC/dsytri2x.f
SRC/ssytri2x.f
SRC/zsytri2x.f

index a936c91..8e3cb1b 100644 (file)
          CALL CGEMM('T','N',NNB,NNB,CUT,ONE,A(1,CUT+1),LDA,
      $              WORK,N+NB+1, ZERO, A(CUT+1,CUT+1), LDA)
 *
-*        U11 =  U11T*invD1*U11 + U01'invD*U01 (Prem + Deus)
+*        U11 =  U11T*invD1*U11 + U01'invD*U01
 *
          DO I=1,NNB
             DO J=I,NNB
             A(I,CUT+J)=WORK(I,J)
            END DO
          END DO
-*    Next Block
+*
+*      Next Block
+*
        END DO
 *
 *        Apply PERMUTATIONS P and P': P * inv(U')*inv(D)*inv(U) *P'
               ENDIF
                I=I+1
             END DO
-
-        DO I=1,N
-          DO J=I+1,N
-            A(J,I)=A(I,J)
-          END DO
-        END DO
       ELSE
 *
 *        LOWER...
              END IF
            END DO
 *    
-*       U11T*invD1*U11->U11
+*       L11T*invD1*L11->L11
 *
         CALL CTRMM('L',UPLO,'T','U',NNB, NNB,
      $             ONE,A(CUT+1,CUT+1),LDA,WORK(U11+1,1),N+NB+1)
+
+        IF ( (CUT+NNB) .LT. N ) THEN
 *
 *          L21T*invD2*L21->A(CUT+I,CUT+J)
 *
      $             ,LDA,WORK,N+NB+1, ZERO, A(CUT+1,CUT+1), LDA)
        
 *
-*        L11 =  L11T*invD1*L11 + U01'invD*U01 (Prem + Deus)
+*        L11 =  L11T*invD1*L11 + U01'invD*U01
 *
          DO I=1,NNB
             DO J=1,I
             END DO
          END DO
 *
-*        U01 =  L22T*invD2*L21
+*        L01 =  L22T*invD2*L21
 *
          CALL CTRMM('L',UPLO,'T','U', N-NNB-CUT, NNB,
      $             ONE,A(CUT+NNB+1,CUT+NNB+1),LDA,WORK,N+NB+1)
               A(CUT+NNB+I,CUT+J)=WORK(I,J)
            END DO
          END DO
+       ELSE
+*
+*        L11 =  L11T*invD1*L11
+*
+         DO I=1,NNB
+            DO J=1,I
+              A(CUT+I,CUT+J)=WORK(U11+I,J)
+            END DO
+         END DO
+       END IF
+*
 *      Next Block
+*
            CUT=CUT+NNB
        END DO
 *
index d4dd67a..84ffe76 100644 (file)
         DO WHILE ( K .LE. N )
          IF( IPIV( K ).GT.0 ) THEN
 *           1 x 1 diagonal NNB
-             WORK(K,INVD) = 1/  A( K, K )
+             WORK(K,INVD) = ONE /  A( K, K )
              WORK(K,INVD+1) = 0
             K=K+1
          ELSE
          CALL DGEMM('T','N',NNB,NNB,CUT,ONE,A(1,CUT+1),LDA,
      $              WORK,N+NB+1, ZERO, A(CUT+1,CUT+1), LDA)
 *
-*        U11 =  U11T*invD1*U11 + U01'invD*U01 (Prem + Deus)
+*        U11 =  U11T*invD1*U11 + U01'invD*U01
 *
          DO I=1,NNB
             DO J=I,NNB
             A(I,CUT+J)=WORK(I,J)
            END DO
          END DO
-*    Next Block
+*
+*      Next Block
+*
        END DO
 *
 *        Apply PERMUTATIONS P and P': P * inv(U')*inv(D)*inv(U) *P'
               ENDIF
                I=I+1
             END DO
-
-        DO I=1,N
-          DO J=I+1,N
-            A(J,I)=A(I,J)
-          END DO
-        END DO
       ELSE
 *
 *        LOWER...
         DO WHILE ( K .GE. 1 )
          IF( IPIV( K ).GT.0 ) THEN
 *           1 x 1 diagonal NNB
-             WORK(K,INVD) = 1/  A( K, K )
+             WORK(K,INVD) = ONE /  A( K, K )
              WORK(K,INVD+1) = 0
             K=K-1
          ELSE
         CUT=0
         DO WHILE (CUT .LT. N)
            NNB=NB
-           IF (CUT + NNB .GE. N) THEN
+           IF (CUT + NNB .GT. N) THEN
               NNB=N-CUT
            ELSE
               COUNT = 0
 *             need a even number for a clear cut
               IF (MOD(COUNT,2) .EQ. 1) NNB=NNB+1
            END IF
-*      L21 Block
+*     L21 Block
            DO I=1,N-CUT-NNB
              DO J=1,NNB
               WORK(I,J)=A(CUT+NNB+I,CUT+J)
              END IF
            END DO
 *    
-*       U11T*invD1*U11->U11
+*       L11T*invD1*L11->L11
 *
         CALL DTRMM('L',UPLO,'T','U',NNB, NNB,
      $             ONE,A(CUT+1,CUT+1),LDA,WORK(U11+1,1),N+NB+1)
+
+        IF ( (CUT+NNB) .LT. N ) THEN
 *
 *          L21T*invD2*L21->A(CUT+I,CUT+J)
 *
      $             ,LDA,WORK,N+NB+1, ZERO, A(CUT+1,CUT+1), LDA)
        
 *
-*        L11 =  L11T*invD1*L11 + U01'invD*U01 (Prem + Deus)
+*        L11 =  L11T*invD1*L11 + U01'invD*U01
 *
          DO I=1,NNB
             DO J=1,I
             END DO
          END DO
 *
-*        U01 =  L22T*invD2*L21
+*        L01 =  L22T*invD2*L21
 *
          CALL DTRMM('L',UPLO,'T','U', N-NNB-CUT, NNB,
      $             ONE,A(CUT+NNB+1,CUT+NNB+1),LDA,WORK,N+NB+1)
-
+*
 *      Update L21
+*
          DO I=1,N-CUT-NNB
            DO J=1,NNB
               A(CUT+NNB+I,CUT+J)=WORK(I,J)
            END DO
          END DO
+
+       ELSE
+*
+*        L11 =  L11T*invD1*L11
+*
+         DO I=1,NNB
+            DO J=1,I
+              A(CUT+I,CUT+J)=WORK(U11+I,J)
+            END DO
+         END DO
+       END IF
+*
 *      Next Block
+*
            CUT=CUT+NNB
        END DO
 *
index bea6062..e7aab85 100644 (file)
         DO WHILE ( K .LE. N )
          IF( IPIV( K ).GT.0 ) THEN
 *           1 x 1 diagonal NNB
-             WORK(K,INVD) = 1/  A( K, K )
+             WORK(K,INVD) = ONE /  A( K, K )
              WORK(K,INVD+1) = 0
             K=K+1
          ELSE
          CALL SGEMM('T','N',NNB,NNB,CUT,ONE,A(1,CUT+1),LDA,
      $              WORK,N+NB+1, ZERO, A(CUT+1,CUT+1), LDA)
 *
-*        U11 =  U11T*invD1*U11 + U01'invD*U01 (Prem + Deus)
+*        U11 =  U11T*invD1*U11 + U01'invD*U01
 *
          DO I=1,NNB
             DO J=I,NNB
             A(I,CUT+J)=WORK(I,J)
            END DO
          END DO
-*    Next Block
+*
+*      Next Block
+*
        END DO
 *
 *        Apply PERMUTATIONS P and P': P * inv(U')*inv(D)*inv(U) *P'
               ENDIF
                I=I+1
             END DO
-
-        DO I=1,N
-          DO J=I+1,N
-            A(J,I)=A(I,J)
-          END DO
-        END DO
       ELSE
 *
 *        LOWER...
         DO WHILE ( K .GE. 1 )
          IF( IPIV( K ).GT.0 ) THEN
 *           1 x 1 diagonal NNB
-             WORK(K,INVD) = 1/  A( K, K )
+             WORK(K,INVD) = ONE /  A( K, K )
              WORK(K,INVD+1) = 0
             K=K-1
          ELSE
         CUT=0
         DO WHILE (CUT .LT. N)
            NNB=NB
-           IF (CUT + NNB .GE. N) THEN
+           IF (CUT + NNB .GT. N) THEN
               NNB=N-CUT
            ELSE
               COUNT = 0
 *             need a even number for a clear cut
               IF (MOD(COUNT,2) .EQ. 1) NNB=NNB+1
            END IF
-*      L21 Block
+*     L21 Block
            DO I=1,N-CUT-NNB
              DO J=1,NNB
               WORK(I,J)=A(CUT+NNB+I,CUT+J)
              END IF
            END DO
 *    
-*       U11T*invD1*U11->U11
+*       L11T*invD1*L11->L11
 *
         CALL STRMM('L',UPLO,'T','U',NNB, NNB,
      $             ONE,A(CUT+1,CUT+1),LDA,WORK(U11+1,1),N+NB+1)
+
+        IF ( (CUT+NNB) .LT. N ) THEN
 *
 *          L21T*invD2*L21->A(CUT+I,CUT+J)
 *
      $             ,LDA,WORK,N+NB+1, ZERO, A(CUT+1,CUT+1), LDA)
        
 *
-*        L11 =  L11T*invD1*L11 + U01'invD*U01 (Prem + Deus)
+*        L11 =  L11T*invD1*L11 + U01'invD*U01
 *
          DO I=1,NNB
             DO J=1,I
             END DO
          END DO
 *
-*        U01 =  L22T*invD2*L21
+*        L01 =  L22T*invD2*L21
 *
          CALL STRMM('L',UPLO,'T','U', N-NNB-CUT, NNB,
      $             ONE,A(CUT+NNB+1,CUT+NNB+1),LDA,WORK,N+NB+1)
-
+*
 *      Update L21
+*
          DO I=1,N-CUT-NNB
            DO J=1,NNB
               A(CUT+NNB+I,CUT+J)=WORK(I,J)
            END DO
          END DO
+
+       ELSE
+*
+*        L11 =  L11T*invD1*L11
+*
+         DO I=1,NNB
+            DO J=1,I
+              A(CUT+I,CUT+J)=WORK(U11+I,J)
+            END DO
+         END DO
+       END IF
+*
 *      Next Block
+*
            CUT=CUT+NNB
        END DO
 *
index c5b2e32..9d50e11 100644 (file)
          CALL ZGEMM('T','N',NNB,NNB,CUT,ONE,A(1,CUT+1),LDA,
      $              WORK,N+NB+1, ZERO, A(CUT+1,CUT+1), LDA)
 *
-*        U11 =  U11T*invD1*U11 + U01'invD*U01 (Prem + Deus)
+*        U11 =  U11T*invD1*U11 + U01'invD*U01
 *
          DO I=1,NNB
             DO J=I,NNB
             A(I,CUT+J)=WORK(I,J)
            END DO
          END DO
-*    Next Block
+*
+*      Next Block
+*
        END DO
 *
 *        Apply PERMUTATIONS P and P': P * inv(U')*inv(D)*inv(U) *P'
               ENDIF
                I=I+1
             END DO
-
-        DO I=1,N
-          DO J=I+1,N
-            A(J,I)=A(I,J)
-          END DO
-        END DO
       ELSE
 *
 *        LOWER...
              END IF
            END DO
 *    
-*       U11T*invD1*U11->U11
+*       L11T*invD1*L11->L11
 *
         CALL ZTRMM('L',UPLO,'T','U',NNB, NNB,
      $             ONE,A(CUT+1,CUT+1),LDA,WORK(U11+1,1),N+NB+1)
+
+        IF ( (CUT+NNB) .LT. N ) THEN
 *
 *          L21T*invD2*L21->A(CUT+I,CUT+J)
 *
      $             ,LDA,WORK,N+NB+1, ZERO, A(CUT+1,CUT+1), LDA)
        
 *
-*        L11 =  L11T*invD1*L11 + U01'invD*U01 (Prem + Deus)
+*        L11 =  L11T*invD1*L11 + U01'invD*U01
 *
          DO I=1,NNB
             DO J=1,I
               A(CUT+NNB+I,CUT+J)=WORK(I,J)
            END DO
          END DO
+       ELSE
+*
+*        L11 =  L11T*invD1*L11
+*
+         DO I=1,NNB
+            DO J=1,I
+              A(CUT+I,CUT+J)=WORK(U11+I,J)
+            END DO
+         END DO
+       END IF
+*
 *      Next Block
+*
            CUT=CUT+NNB
        END DO
 *