fix for issue #141 (how to detect singularity in T).
authoriyamazaki <ic.yamazaki@gmail.com>
Mon, 1 May 2017 18:26:41 +0000 (14:26 -0400)
committeriyamazaki <ic.yamazaki@gmail.com>
Mon, 1 May 2017 18:26:41 +0000 (14:26 -0400)
SRC/clahef_aa.f
SRC/clasyf_aa.f
SRC/dlasyf_aa.f
SRC/slasyf_aa.f
SRC/zlahef_aa.f
SRC/zlasyf_aa.f

index f3a9add..1fbe9a4 100644 (file)
 *           Set A(J, J+1) = T(J, J+1)
 *
             A( K, J+1 ) = WORK( 2 )
-            IF( (A( K, J ).EQ.ZERO ) .AND.
-     $        ( (J.EQ.M) .OR. (A( K, J+1 ).EQ.ZERO))) THEN
+            IF( (A( K, J ).EQ.ZERO ) .AND. (A( K, J+1 ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( K-1, J ).EQ.ZERO)) ) THEN
                 IF(INFO .EQ. 0) THEN
                     INFO = J
                 END IF
      $                      A( K, J+2 ), LDA)
             END IF
          ELSE
-            IF( (A( K, J ).EQ.ZERO) .AND. (INFO.EQ.0) ) THEN
-               INFO = J
+            IF( (A( K, J ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( J-1, J ).EQ.ZERO)) ) THEN
+               IF (INFO.EQ.0) THEN
+                  INFO = J
+               END IF
             END IF
          END IF
          J = J + 1
 *           Set A(J+1, J) = T(J+1, J)
 *
             A( J+1, K ) = WORK( 2 )
-            IF( (A( J, K ).EQ.ZERO) .AND.
-     $        ( (J.EQ.M) .OR. (A( J+1, K ).EQ.ZERO)) ) THEN
+            IF( (A( J, K ).EQ.ZERO) .AND. (A( J+1, K ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( J, K-1 ).EQ.ZERO)) ) THEN
                 IF (INFO .EQ. 0)
      $              INFO = J
             END IF
      $                      A( J+2, K ), LDA )
             END IF
          ELSE
-            IF( (A( J, K ).EQ.ZERO) .AND. (J.EQ.M)
-     $          .AND. (INFO.EQ.0) ) INFO = J
+            IF( (A( J, K ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( J, K-1 ).EQ.ZERO)) ) THEN
+               IF (INFO.EQ.0) THEN
+                  INFO = J
+               END IF
+            END IF
          END IF
          J = J + 1
          GO TO 30
index 860a023..c58cd85 100644 (file)
 *           Set A(J, J+1) = T(J, J+1)
 *
             A( K, J+1 ) = WORK( 2 )
-            IF( (A( K, J ).EQ.ZERO ) .AND.
-     $        ( (J.EQ.M) .OR. (A( K, J+1 ).EQ.ZERO))) THEN
+            IF( (A( K, J ).EQ.ZERO ) .AND. (A( K, J+1 ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( K-1, J ).EQ.ZERO)) ) THEN
                 IF(INFO .EQ. 0) THEN
                     INFO = J
                 ENDIF
      $                      A( K, J+2 ), LDA)
             END IF
          ELSE
-            IF( (A( K, J ).EQ.ZERO) .AND. (INFO.EQ.0) ) THEN
-               INFO = J
+            IF( (A( K, J ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( J-1, J ).EQ.ZERO)) ) THEN
+               IF (INFO.EQ.0) THEN
+                  INFO = J
+               END IF
             END IF
          END IF
          J = J + 1
 *           Set A(J+1, J) = T(J+1, J)
 *
             A( J+1, K ) = WORK( 2 )
-            IF( (A( J, K ).EQ.ZERO) .AND.
-     $        ( (J.EQ.M) .OR. (A( J+1, K ).EQ.ZERO)) ) THEN
+            IF( (A( J, K ).EQ.ZERO) .AND. (A( J+1, K ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( J, K-1 ).EQ.ZERO)) ) THEN
                 IF (INFO .EQ. 0)
      $              INFO = J
             END IF
      $                      A( J+2, K ), LDA )
             END IF
          ELSE
-            IF( (A( J, K ).EQ.ZERO) .AND. (INFO.EQ.0) ) THEN
-               INFO = J
+            IF( (A( J, K ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( J, K-1 ).EQ.ZERO)) ) THEN
+               IF (INFO.EQ.0) THEN
+                  INFO = J
+               END IF
             END IF
          END IF
          J = J + 1
index d9550e1..08d7520 100644 (file)
 *           Set A(J, J+1) = T(J, J+1)
 *
             A( K, J+1 ) = WORK( 2 )
-            IF( (A( K, J ).EQ.ZERO ) .AND.
-     $        ( (J.EQ.M) .OR. (A( K, J+1 ).EQ.ZERO))) THEN
+            IF( (A( K, J ).EQ.ZERO ) .AND. (A( K, J+1 ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( K-1, J ).EQ.ZERO)) ) THEN
                 IF(INFO .EQ. 0) THEN
                     INFO = J
                 ENDIF
      $                      A( K, J+2 ), LDA)
             END IF
          ELSE
-            IF( (A( K, J ).EQ.ZERO) .AND. (INFO.EQ.0) ) THEN
-               INFO = J
+            IF( (A( K, J ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( J-1, J ).EQ.ZERO)) ) THEN
+               IF (INFO.EQ.0) THEN
+                  INFO = J
+               END IF
             END IF
          END IF
          J = J + 1
 *           Set A(J+1, J) = T(J+1, J)
 *
             A( J+1, K ) = WORK( 2 )
-            IF( (A( J, K ).EQ.ZERO) .AND.
-     $        ( (J.EQ.M) .OR. (A( J+1, K ).EQ.ZERO)) ) THEN
+            IF( (A( J, K ).EQ.ZERO) .AND. (A( J+1, K ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( J, K-1 ).EQ.ZERO)) ) THEN
                 IF (INFO .EQ. 0)
      $              INFO = J
             END IF
      $                      A( J+2, K ), LDA )
             END IF
          ELSE
-            IF( (A( J, K ).EQ.ZERO) .AND. (INFO.EQ.0) ) THEN
-               INFO = J
+            IF( (A( J, K ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( J, K-1 ).EQ.ZERO)) ) THEN
+               IF (INFO.EQ.0) THEN
+                  INFO = J
+               END IF
             END IF
          END IF
          J = J + 1
index 3b4bc4b..5391cef 100644 (file)
 *           Set A(J, J+1) = T(J, J+1)
 *
             A( K, J+1 ) = WORK( 2 )
-            IF( (A( K, J ).EQ.ZERO ) .AND.
-     $        ( (J.EQ.M) .OR. (A( K, J+1 ).EQ.ZERO))) THEN
+            IF( (A( K, J ).EQ.ZERO ) .AND. (A( K, J+1 ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( K-1, J ).EQ.ZERO)) ) THEN
                 IF(INFO .EQ. 0) THEN
                     INFO = J
                 ENDIF
      $                      A( K, J+2 ), LDA)
             END IF
          ELSE
-            IF( (A( K, J ).EQ.ZERO) .AND. (INFO.EQ.0) ) THEN
-               INFO = J
+            IF( (A( K, J ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( J-1, J ).EQ.ZERO)) ) THEN
+               IF (INFO.EQ.0) THEN
+                  INFO = J
+               END IF
             END IF
          END IF
          J = J + 1
 *           Set A(J+1, J) = T(J+1, J)
 *
             A( J+1, K ) = WORK( 2 )
-            IF( (A( J, K ).EQ.ZERO) .AND.
-     $        ( (J.EQ.M) .OR. (A( J+1, K ).EQ.ZERO)) ) THEN
+            IF( (A( J, K ).EQ.ZERO) .AND. (A( J+1, K ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( J, K-1 ).EQ.ZERO)) ) THEN
                 IF (INFO .EQ. 0)
      $              INFO = J
             END IF
      $                      A( J+2, K ), LDA )
             END IF
          ELSE
-            IF( (A( J, K ).EQ.ZERO) .AND. (INFO.EQ.0) ) THEN
-               INFO = J
+            IF( (A( J, K ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( J, K-1 ).EQ.ZERO)) ) THEN
+               IF (INFO.EQ.0) THEN
+                  INFO = J
+               END IF
             END IF
          END IF
          J = J + 1
index 5698ba0..4646233 100644 (file)
 *           Set A(J, J+1) = T(J, J+1)
 *
             A( K, J+1 ) = WORK( 2 )
-            IF( (A( K, J ).EQ.ZERO ) .AND.
-     $        ( (J.EQ.M) .OR. (A( K, J+1 ).EQ.ZERO))) THEN
+            IF( (A( K, J ).EQ.ZERO ) .AND. (A( K, J+1 ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( K-1, J ).EQ.ZERO)) ) THEN
                 IF(INFO .EQ. 0) THEN
                     INFO = J
                 END IF
      $                      A( K, J+2 ), LDA)
             END IF
          ELSE
-            IF( (A( K, J ).EQ.ZERO) .AND. (INFO.EQ.0) ) THEN
-               INFO = J
+            IF( (A( K, J ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( J-1, J ).EQ.ZERO)) ) THEN
+               IF (INFO.EQ.0) THEN
+                  INFO = J
+               END IF
             END IF
          END IF
          J = J + 1
 *           Set A(J+1, J) = T(J+1, J)
 *
             A( J+1, K ) = WORK( 2 )
-            IF( (A( J, K ).EQ.ZERO) .AND.
-     $        ( (J.EQ.M) .OR. (A( J+1, K ).EQ.ZERO)) ) THEN
+            IF( (A( J, K ).EQ.ZERO) .AND. (A( J+1, K ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( J, K-1 ).EQ.ZERO)) ) THEN
                 IF (INFO .EQ. 0)
      $              INFO = J
             END IF
      $                      A( J+2, K ), LDA )
             END IF
          ELSE
-            IF( (A( J, K ).EQ.ZERO) .AND. (J.EQ.M)
-     $          .AND. (INFO.EQ.0) ) INFO = J
+            IF( (A( J, K ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( J, K-1 ).EQ.ZERO)) ) THEN
+               IF (INFO.EQ.0) THEN
+                  INFO = J
+               END IF
+            END IF
          END IF
          J = J + 1
          GO TO 30
index dff7104..8e28d4f 100644 (file)
 *           Set A(J, J+1) = T(J, J+1)
 *
             A( K, J+1 ) = WORK( 2 )
-            IF( (A( K, J ).EQ.ZERO ) .AND.
-     $        ( (J.EQ.M) .OR. (A( K, J+1 ).EQ.ZERO))) THEN
+            IF( (A( K, J ).EQ.ZERO ) .AND. (A( K, J+1 ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( K-1, J ).EQ.ZERO)) ) THEN
                 IF(INFO .EQ. 0) THEN
                     INFO = J
                 ENDIF
      $                      A( K, J+2 ), LDA)
             END IF
          ELSE
-            IF( (A( K, J ).EQ.ZERO) .AND. (INFO.EQ.0) ) THEN
-               INFO = J
+            IF( (A( K, J ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( J-1, J ).EQ.ZERO)) ) THEN
+               IF (INFO.EQ.0) THEN
+                  INFO = J
+               END IF
             END IF
          END IF
          J = J + 1
 *           Set A(J+1, J) = T(J+1, J)
 *
             A( J+1, K ) = WORK( 2 )
-            IF( (A( J, K ).EQ.ZERO) .AND.
-     $        ( (J.EQ.M) .OR. (A( J+1, K ).EQ.ZERO)) ) THEN
+            IF( (A( J, K ).EQ.ZERO) .AND. (A( J+1, K ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( J, K-1 ).EQ.ZERO)) ) THEN
                 IF (INFO .EQ. 0)
      $              INFO = J
             END IF
      $                      A( J+2, K ), LDA )
             END IF
          ELSE
-            IF( (A( J, K ).EQ.ZERO) .AND. (INFO.EQ.0) ) THEN
-               INFO = J
+            IF( (A( J, K ).EQ.ZERO) .AND.
+     $          ((K.EQ.1) .OR. (A( J, K-1 ).EQ.ZERO)) ) THEN
+               IF (INFO.EQ.0) THEN
+                  INFO = J
+               END IF
             END IF
          END IF
          J = J + 1