changed the relational experssions in pivot search loop in dsytf2_rook.f to be the...
authorigor175 <igor175@8a072113-8704-0410-8d35-dd094bca7971>
Wed, 7 Dec 2011 03:22:08 +0000 (03:22 +0000)
committerigor175 <igor175@8a072113-8704-0410-8d35-dd094bca7971>
Wed, 7 Dec 2011 03:22:08 +0000 (03:22 +0000)
SRC/dlasyf_rook.f
SRC/dsytf2_rook.f

index 6c8532d..96c3a34 100644 (file)
          ELSE
 * =====================================================================          
 *
-*           Test for interchange and handle NaN and Inf
+*           Test for interchange
 *
-*           Equivalent to testing for
+*           Equivalent to testing for (used to handle NaN and Inf)
 *           ABSAKK.GE.ALPHA*COLMAX
 *           
             IF( .NOT.( ABSAKK.LT.ALPHA*COLMAX ) ) THEN
      $                           ONE,W( 1, KW-1 ), 1 )
 *
 *                 JMAX is the column-index of the largest off-diagonal
-*                 element in row IMAX, and ROWMAX is its absolute value
+*                 element in row IMAX, and ROWMAX is its absolute value.
+*                 Determine both ROWMAX and JMAX.
 *
                   IF( IMAX.NE.K ) THEN
                      JMAX = IMAX + IDAMAX( K-IMAX, W( IMAX+1, KW-1 ),
                      END IF
                   END IF
 *
-*                 Equivalent to testing for
+*                 Equivalent to testing for (used to handle NaN and Inf)
 *                 ABS( W( IMAX, KW-1 ) ).GE.ALPHA*ROWMAX
 *
                   IF( .NOT.(ABS( W( IMAX, KW-1 ) ).LT.ALPHA*ROWMAX ) )
 *
                      DONE = .TRUE.
 *
-*                 Equivalent to testing for ROWMAX .EQ. COLMAX
+*                 Equivalent to testing for ROWMAX .EQ. COLMAX,
+*                 used to handle NaN and Inf
 *
                   ELSE IF( ( P.EQ.JMAX ) .OR. ( ROWMAX.LE.COLMAX ) )
      $               THEN
          ELSE
 * =====================================================================          
 *
-*           Test for interchange and handle NaN and Inf
+*           Test for interchange
 *
-*           Equivalent to testing for
+*           Equivalent to testing for (used to handle NaN and Inf)
 *           ABSAKK.GE.ALPHA*COLMAX
 *           
             IF( .NOT.( ABSAKK.LT.ALPHA*COLMAX ) ) THEN
      $                          ONE, W( K, K+1 ), 1 )
 *
 *                 JMAX is the column-index of the largest off-diagonal
-*                 element in row IMAX, and ROWMAX is its absolute value
+*                 element in row IMAX, and ROWMAX is its absolute value.
+*                 Determine both ROWMAX and JMAX.
 *
                   IF( IMAX.NE.K ) THEN
                      JMAX = K - 1 + IDAMAX( IMAX-K, W( K, K+1 ), 1 )
                      END IF
                   END IF
 *
-*                 Equivalent to testing for
+*                 Equivalent to testing for (used to handle NaN and Inf)
 *                 ABS( W( IMAX, K+1 ) ).GE.ALPHA*ROWMAX
 *
                   IF( .NOT.( ABS( W( IMAX, K+1 ) ).LT.ALPHA*ROWMAX ) )
 *
                      DONE = .TRUE.
 *
-*                 Equivalent to testing for ROWMAX .EQ. COLMAX
+*                 Equivalent to testing for ROWMAX .EQ. COLMAX,
+*                 used to handle NaN and Inf
 *
                   ELSE IF( ( P.EQ.JMAX ) .OR. ( ROWMAX.LE.COLMAX ) ) 
      $               THEN
index 6d8b9ae..692e89b 100644 (file)
          ABSAKK = ABS( A( K, K ) )
 *
 *        IMAX is the row-index of the largest off-diagonal element in
-*        column K, and COLMAX is its absolute value
+*        column K, and COLMAX is its absolute value.
+*        Determine both COLMAX and IMAX.
 *
          IF( K.GT.1 ) THEN
             IMAX = IDAMAX( K-1, A( 1, K ), 1 )
      $         INFO = K
             KP = K
          ELSE
-            IF( ABSAKK.GE.ALPHA*COLMAX ) THEN
+*
+*           Test for interchange
+*
+*           Equivalent to testing for (used to handle NaN and Inf)
+*           ABSAKK.GE.ALPHA*COLMAX
+*
+            IF( .NOT.( ABSAKK.LT.ALPHA*COLMAX ) ) THEN
 *
 *              no interchange,
 *              use 1-by-1 pivot block
                      END IF
                   END IF
 *
-*                 Equivalent to testing for 
+*                 Equivalent to testing for (used to handle NaN and Inf)
 *                 ABS( A( IMAX, IMAX ) ).GE.ALPHA*ROWMAX
 *
                   IF( .NOT.( ABS( A( IMAX, IMAX ) ).LT.ALPHA*ROWMAX ) )
 *
                      KP = IMAX
                      DONE = .TRUE.
-                  ELSE IF( COLMAX.EQ.ROWMAX ) THEN
+*
+*                 Equivalent to testing for ROWMAX .EQ. COLMAX,
+*                 used to handle NaN and Inf
+*
+                  ELSE IF( ( P.EQ.JMAX ).OR.( ROWMAX.LE.COLMAX ) ) THEN
 *
 *                    interchange rows and columns K+1 and IMAX,
 *                    use 2-by-2 pivot block
                      DONE = .TRUE.
                   ELSE
 *
-*                    Pivot NOT found set variables and repeat
+*                    Pivot NOT found, set variables and repeat
 *
                      P = IMAX
                      COLMAX = ROWMAX
          ABSAKK = ABS( A( K, K ) )
 *
 *        IMAX is the row-index of the largest off-diagonal element in
-*        column K, and COLMAX is its absolute value
+*        column K, and COLMAX is its absolute value.
+*        Determine both COLMAX and IMAX.
 *
          IF( K.LT.N ) THEN
             IMAX = K + IDAMAX( N-K, A( K+1, K ), 1 )
      $         INFO = K
             KP = K
          ELSE
-            IF( ABSAKK.GE.ALPHA*COLMAX ) THEN
+*
+*           Test for interchange
+*
+*           Equivalent to testing for (used to handle NaN and Inf)
+*           ABSAKK.GE.ALPHA*COLMAX
+*
+            IF( .NOT.( ABSAKK.LT.ALPHA*COLMAX ) ) THEN
 *
 *              no interchange, use 1-by-1 pivot block
 *
                      END IF
                   END IF
 *
-*                 Equivalent to testing for 
+*                 Equivalent to testing for (used to handle NaN and Inf) 
 *                 ABS( A( IMAX, IMAX ) ).GE.ALPHA*ROWMAX
 *
                   IF( .NOT.( ABS( A( IMAX, IMAX ) ).LT.ALPHA*ROWMAX ) )
 *
                      KP = IMAX
                      DONE = .TRUE.
-                  ELSE IF( COLMAX.EQ.ROWMAX) THEN
+*
+*                 Equivalent to testing for ROWMAX .EQ. COLMAX,
+*                 used to handle NaN and Inf
+*
+                  ELSE IF( ( P.EQ.JMAX ).OR.( ROWMAX.LE.COLMAX ) ) THEN
 *
 *                    interchange rows and columns K+1 and IMAX,
 *                    use 2-by-2 pivot block
                      DONE = .TRUE.
                   ELSE
 *
-*                    Pivot NOT found set variables and repeat
+*                    Pivot NOT found, set variables and repeat
 *
                      P = IMAX
                      COLMAX = ROWMAX