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
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