Fix potential initiation issue in (c,d,s,z)lansy.f
authorjulie <julielangou@users.noreply.github.com>
Fri, 14 Feb 2014 21:13:20 +0000 (21:13 +0000)
committerjulie <julielangou@users.noreply.github.com>
Fri, 14 Feb 2014 21:13:20 +0000 (21:13 +0000)
Bug report sent from Elena Ivanova on Feb 2014

Array WORK is initialized with ZERO when 'L' and is not initialized when 'U'.
There can be some garbage in WORK. Move up the initialization of WORK before the line
   IF( LSAME( UPLO, 'U' ) ) THEN.

Rearrange loop ordering numbers.

SRC/clansy.f
SRC/dlansy.f
SRC/slansy.f
SRC/zlansy.f

index 86c2af744d1c7e0d65fb16bcfdd17ed20d02989a..aced505baac684ad6d0495a9d53effc2f64e21ea 100644 (file)
 *        Find normI(A) ( = norm1(A), since A is symmetric).
 *
          VALUE = ZERO
+         DO 50 I = 1, N
+            WORK( I ) = ZERO
+   50    CONTINUE 
          IF( LSAME( UPLO, 'U' ) ) THEN
-            DO 60 J = 1, N
+            DO 70 J = 1, N
                SUM = ZERO
-               DO 50 I = 1, J - 1
+               DO 60 I = 1, J - 1
                   ABSA = ABS( A( I, J ) )
                   SUM = SUM + ABSA
                   WORK( I ) = WORK( I ) + ABSA
-   50          CONTINUE
+   60          CONTINUE
                WORK( J ) = SUM + ABS( A( J, J ) )
-   60       CONTINUE
-            DO 70 I = 1, N
-               SUM = WORK( I )
-               IF( VALUE .LT. SUM .OR. SISNAN( SUM ) ) VALUE = SUM
    70       CONTINUE
-         ELSE
             DO 80 I = 1, N
-               WORK( I ) = ZERO
+               SUM = WORK( I )
+               IF( VALUE .LT. SUM .OR. SISNAN( SUM ) ) VALUE = SUM
    80       CONTINUE
+         ELSE
             DO 100 J = 1, N
                SUM = WORK( J ) + ABS( A( J, J ) )
                DO 90 I = J + 1, N
index bc70ab8edacd3e015294c6faeb001ff7cfb70b12..d9fb2f9823f1baf232b5bf15755770f45b368ed3 100644 (file)
 *        Find normI(A) ( = norm1(A), since A is symmetric).
 *
          VALUE = ZERO
+         DO 50 I = 1, N
+            WORK( I ) = ZERO
+   50    CONTINUE 
          IF( LSAME( UPLO, 'U' ) ) THEN
-            DO 60 J = 1, N
+            DO 70 J = 1, N
                SUM = ZERO
-               DO 50 I = 1, J - 1
+               DO 60 I = 1, J - 1
                   ABSA = ABS( A( I, J ) )
                   SUM = SUM + ABSA
                   WORK( I ) = WORK( I ) + ABSA
-   50          CONTINUE
+   60          CONTINUE
                WORK( J ) = SUM + ABS( A( J, J ) )
-   60       CONTINUE
-            DO 70 I = 1, N
-               SUM = WORK( I )
-               IF( VALUE .LT. SUM .OR. DISNAN( SUM ) ) VALUE = SUM
    70       CONTINUE
-         ELSE
             DO 80 I = 1, N
-               WORK( I ) = ZERO
+               SUM = WORK( I )
+               IF( VALUE .LT. SUM .OR. DISNAN( SUM ) ) VALUE = SUM
    80       CONTINUE
+         ELSE
             DO 100 J = 1, N
                SUM = WORK( J ) + ABS( A( J, J ) )
                DO 90 I = J + 1, N
index 1640358c6301a173cc750a3fbc679b1291fed497..daba3e878b3848e330a416e1bd7f106b3219740d 100644 (file)
 *        Find normI(A) ( = norm1(A), since A is symmetric).
 *
          VALUE = ZERO
+         DO 50 I = 1, N
+            WORK( I ) = ZERO
+   50    CONTINUE 
          IF( LSAME( UPLO, 'U' ) ) THEN
-            DO 60 J = 1, N
+            DO 70 J = 1, N
                SUM = ZERO
-               DO 50 I = 1, J - 1
+               DO 60 I = 1, J - 1
                   ABSA = ABS( A( I, J ) )
                   SUM = SUM + ABSA
                   WORK( I ) = WORK( I ) + ABSA
-   50          CONTINUE
+   60          CONTINUE
                WORK( J ) = SUM + ABS( A( J, J ) )
-   60       CONTINUE
-            DO 70 I = 1, N
-               SUM = WORK( I )
-               IF( VALUE .LT. SUM .OR. SISNAN( SUM ) ) VALUE = SUM
    70       CONTINUE
-         ELSE
             DO 80 I = 1, N
-               WORK( I ) = ZERO
+               SUM = WORK( I )
+               IF( VALUE .LT. SUM .OR. SISNAN( SUM ) ) VALUE = SUM
    80       CONTINUE
+         ELSE
             DO 100 J = 1, N
                SUM = WORK( J ) + ABS( A( J, J ) )
                DO 90 I = J + 1, N
index e261a3b929d45b27cc048b199f192f936f58728c..8ebdd6b38f73ef2ce457c1c9a3ba1783f9779d2a 100644 (file)
 *        Find normI(A) ( = norm1(A), since A is symmetric).
 *
          VALUE = ZERO
+         DO 50 I = 1, N
+            WORK( I ) = ZERO
+   50    CONTINUE 
          IF( LSAME( UPLO, 'U' ) ) THEN
-            DO 60 J = 1, N
+            DO 70 J = 1, N
                SUM = ZERO
-               DO 50 I = 1, J - 1
+               DO 60 I = 1, J - 1
                   ABSA = ABS( A( I, J ) )
                   SUM = SUM + ABSA
                   WORK( I ) = WORK( I ) + ABSA
-   50          CONTINUE
+   60          CONTINUE
                WORK( J ) = SUM + ABS( A( J, J ) )
-   60       CONTINUE
-            DO 70 I = 1, N
-               SUM = WORK( I )
-               IF( VALUE .LT. SUM .OR. DISNAN( SUM ) ) VALUE = SUM
    70       CONTINUE
-         ELSE
             DO 80 I = 1, N
-               WORK( I ) = ZERO
+               SUM = WORK( I )
+               IF( VALUE .LT. SUM .OR. DISNAN( SUM ) ) VALUE = SUM
    80       CONTINUE
+         ELSE
             DO 100 J = 1, N
                SUM = WORK( J ) + ABS( A( J, J ) )
                DO 90 I = J + 1, N