( Let me know if I broke anything. I double checked. We should be fine but )
authorlangou <langou@users.noreply.github.com>
Mon, 10 Feb 2014 19:55:39 +0000 (19:55 +0000)
committerlangou <langou@users.noreply.github.com>
Mon, 10 Feb 2014 19:55:39 +0000 (19:55 +0000)
( please let me know if concerns/problems.                                 )

1) The comments in ICMAX1 (resp. IZMAX1) were not correct. The comments read:
"ICMAX1 finds the index of the element whose real part has maximum absolute
value." It should have read: "ICMAX1 finds the index of the first vector
element of maximum absolute value." This is corrected. The problem was reported
Eloy Romero Alcalde from the SLEPc team, Universitat Politècnica de València
and confirmed by Nick Higham, Sven Hammarling and Julien Langou.

2) The routine ICAMAX (resp. IZAMAX) from the BLAS evolved without ICMAX1
(resp. IZMAX1). Reconcialated both version. So essentially took the ICAMAX
currently in the BLAS and changed it appropriately for an ICMAX1.

3) Remove the use of statement function in ICMAX1 (resp. IZMAX1). Now obsolete
in FORTRAN.

4) Change comments in BLAS routines: SCABS1, DCABS1, ICAMAX, IZAMAX, SCASUM,
and DZASUM. Remove the use of "absolute value of a complex number" for the
quantity "| Re(.) | + | Im(.) |". For example:
before
   DCABS1 computes absolute value of a double complex number
after
   DCABS1 computes |Re(.)| + |Im(.)| of a double complex number

BLAS/SRC/dcabs1.f
BLAS/SRC/dzasum.f
BLAS/SRC/icamax.f
BLAS/SRC/idamax.f
BLAS/SRC/isamax.f
BLAS/SRC/izamax.f
BLAS/SRC/scabs1.f
BLAS/SRC/scasum.f
SRC/icmax1.f
SRC/izmax1.f

index f6debb9..f94a7c8 100644 (file)
@@ -21,7 +21,7 @@
 *>
 *> \verbatim
 *>
-*> DCABS1 computes absolute value of a double complex number 
+*> DCABS1 computes |Re(.)| + |Im(.)| of a double complex number 
 *> \endverbatim
 *
 *  Authors:
index cbeee99..afb3cf6 100644 (file)
@@ -23,7 +23,8 @@
 *>
 *> \verbatim
 *>
-*>    DZASUM takes the sum of the absolute values.
+*>    DZASUM takes the sum of the (|Re(.)| + |Im(.)|)'s of a complex vector and
+*>    returns a single precision result.
 *> \endverbatim
 *
 *  Authors:
index 2120db9..299b2ce 100644 (file)
@@ -23,7 +23,7 @@
 *>
 *> \verbatim
 *>
-*>    ICAMAX finds the index of element having max. absolute value.
+*>    ICAMAX finds the index of the first element having maximum |Re(.)| + |Im(.)|
 *> \endverbatim
 *
 *  Authors:
index 4233fcc..079435e 100644 (file)
@@ -23,7 +23,7 @@
 *>
 *> \verbatim
 *>
-*>    IDAMAX finds the index of element having max. absolute value.
+*>    IDAMAX finds the index of the first element having maximum absolute value.
 *> \endverbatim
 *
 *  Authors:
index af977c5..04b730a 100644 (file)
@@ -23,7 +23,7 @@
 *>
 *> \verbatim
 *>
-*>    ISAMAX finds the index of element having max. absolute value.
+*>    ISAMAX finds the index of the first element having maximum absolute value.
 *> \endverbatim
 *
 *  Authors:
index d51cd58..8f49e61 100644 (file)
@@ -23,7 +23,7 @@
 *>
 *> \verbatim
 *>
-*>    IZAMAX finds the index of element having max. absolute value.
+*>    IZAMAX finds the index of the first element having maximum |Re(.)| + |Im(.)|
 *> \endverbatim
 *
 *  Authors:
index cdb5c0b..f936e34 100644 (file)
@@ -20,7 +20,7 @@
 *>
 *> \verbatim
 *>
-*> SCABS1 computes absolute value of a complex number
+*> SCABS1 computes |Re(.)| + |Im(.)| of a complex number
 *> \endverbatim
 *
 *  Authors:
index 03154eb..733f23f 100644 (file)
@@ -23,7 +23,7 @@
 *>
 *> \verbatim
 *>
-*>    SCASUM takes the sum of the absolute values of a complex vector and
+*>    SCASUM takes the sum of the (|Re(.)| + |Im(.)|)'s of a complex vector and
 *>    returns a single precision result.
 *> \endverbatim
 *
index f312a2d..0f40e80 100644 (file)
@@ -1,4 +1,4 @@
-*> \brief \b ICMAX1 finds the index of the vector element whose real part has maximum absolute value.
+*> \brief \b ICMAX1 finds the index of the first vector element of maximum absolute value.
 *
 *  =========== DOCUMENTATION ===========
 *
@@ -33,8 +33,7 @@
 *>
 *> \verbatim
 *>
-*> ICMAX1 finds the index of the element whose real part has maximum
-*> absolute value.
+*> ICMAX1 finds the index of the first vector element of maximum absolute value.
 *>
 *> Based on ICAMAX from Level 1 BLAS.
 *> The change is to use the 'genuine' absolute value.
@@ -52,7 +51,8 @@
 *> \param[in] CX
 *> \verbatim
 *>          CX is COMPLEX array, dimension (N)
-*>          The vector whose elements will be summed.
+*>          The vector CX. The ICMAX1 function returns the index of its first
+*>          element of maximum absolute value.
 *> \endverbatim
 *>
 *> \param[in] INCX
@@ -69,7 +69,7 @@
 *> \author Univ. of Colorado Denver 
 *> \author NAG Ltd. 
 *
-*> \date September 2012
+*> \date February 2014
 *
 *> \ingroup complexOTHERauxiliary
 *
 *> Nick Higham for use with CLACON.
 *
 *  =====================================================================
-      INTEGER          FUNCTION ICMAX1( N, CX, INCX )
+      INTEGER FUNCTION ICMAX1( N, CX, INCX )
 *
 *  -- LAPACK auxiliary routine (version 3.4.2) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-*     September 2012
+*     February 2014
 *
 *     .. Scalar Arguments ..
       INTEGER            INCX, N
 *     ..
 *     .. Array Arguments ..
-      COMPLEX            CX( * )
+      COMPLEX            CX(*)
 *     ..
 *
-* =====================================================================
+*  =====================================================================
 *
 *     .. Local Scalars ..
-      INTEGER            I, IX
       REAL               SMAX
-      COMPLEX            ZDUM
+      INTEGER            I, IX
 *     ..
 *     .. Intrinsic Functions ..
       INTRINSIC          ABS
 *     ..
-*     .. Statement Functions ..
-      REAL               CABS1
-*     ..
-*     .. Statement Function definitions ..
-*
-*     NEXT LINE IS THE ONLY MODIFICATION.
-      CABS1( ZDUM ) = ABS( ZDUM )
-*     ..
 *     .. Executable Statements ..
 *
       ICMAX1 = 0
-      IF( N.LT.1 )
-     $   RETURN
+      IF (N.LT.1 .OR. INCX.LE.0) RETURN
       ICMAX1 = 1
-      IF( N.EQ.1 )
-     $   RETURN
-      IF( INCX.EQ.1 )
-     $   GO TO 30
-*
-*     CODE FOR INCREMENT NOT EQUAL TO 1
-*
-      IX = 1
-      SMAX = CABS1( CX( 1 ) )
-      IX = IX + INCX
-      DO 20 I = 2, N
-         IF( CABS1( CX( IX ) ).LE.SMAX )
-     $      GO TO 10
-         ICMAX1 = I
-         SMAX = CABS1( CX( IX ) )
-   10    CONTINUE
-         IX = IX + INCX
-   20 CONTINUE
-      RETURN
+      IF (N.EQ.1) RETURN
+      IF (INCX.EQ.1) THEN
+*
+*        code for increment equal to 1
 *
-*     CODE FOR INCREMENT EQUAL TO 1
+         SMAX = ABS(CX(1))
+         DO I = 2,N
+            IF (ABS(CX(I)).GT.SMAX) THEN
+               ICMAX1 = I
+               SMAX = ABS(CX(I))
+            END IF
+         END DO
+      ELSE
 *
-   30 CONTINUE
-      SMAX = CABS1( CX( 1 ) )
-      DO 40 I = 2, N
-         IF( CABS1( CX( I ) ).LE.SMAX )
-     $      GO TO 40
-         ICMAX1 = I
-         SMAX = CABS1( CX( I ) )
-   40 CONTINUE
+*        code for increment not equal to 1
+*
+         IX = 1
+         SMAX = ABS(CX(1))
+         IX = IX + INCX
+         DO I = 2,N
+            IF (ABS(CX(IX)).GT.SMAX) THEN
+               ICMAX1 = I
+               SMAX = ABS(CX(IX))
+            END IF
+            IX = IX + INCX
+         END DO
+      END IF
       RETURN
 *
 *     End of ICMAX1
index 3f48c34..3471bf6 100644 (file)
@@ -1,4 +1,4 @@
-*> \brief \b IZMAX1 finds the index of the vector element whose real part has maximum absolute value.
+*> \brief \b IZMAX1 finds the index of the first vector element of maximum absolute value.
 *
 *  =========== DOCUMENTATION ===========
 *
 *  Definition:
 *  ===========
 *
-*       INTEGER          FUNCTION IZMAX1( N, CX, INCX )
+*       INTEGER          FUNCTION IZMAX1( N, ZX, INCX )
 * 
 *       .. Scalar Arguments ..
 *       INTEGER            INCX, N
 *       ..
 *       .. Array Arguments ..
-*       COMPLEX*16         CX( * )
+*       COMPLEX*16         ZX( * )
 *       ..
 *  
 *
@@ -33,8 +33,7 @@
 *>
 *> \verbatim
 *>
-*> IZMAX1 finds the index of the element whose real part has maximum
-*> absolute value.
+*> IZMAX1 finds the index of the first vector element of maximum absolute value.
 *>
 *> Based on IZAMAX from Level 1 BLAS.
 *> The change is to use the 'genuine' absolute value.
 *> \param[in] N
 *> \verbatim
 *>          N is INTEGER
-*>          The number of elements in the vector CX.
+*>          The number of elements in the vector ZX.
 *> \endverbatim
 *>
-*> \param[in] CX
+*> \param[in] ZX
 *> \verbatim
-*>          CX is COMPLEX*16 array, dimension (N)
-*>          The vector whose elements will be summed.
+*>          ZX is COMPLEX*16 array, dimension (N)
+*>          The vector ZX. The IZMAX1 function returns the index of its first
+*>          element of maximum absolute value.
 *> \endverbatim
 *>
 *> \param[in] INCX
 *> \verbatim
 *>          INCX is INTEGER
-*>          The spacing between successive values of CX.  INCX >= 1.
+*>          The spacing between successive values of ZX.  INCX >= 1.
 *> \endverbatim
 *
 *  Authors:
@@ -69,9 +69,9 @@
 *> \author Univ. of Colorado Denver 
 *> \author NAG Ltd. 
 *
-*> \date September 2012
+*> \date February 2014
 *
-*> \ingroup complex16OTHERauxiliary
+*> \ingroup complexOTHERauxiliary
 *
 *> \par Contributors:
 *  ==================
 *> Nick Higham for use with ZLACON.
 *
 *  =====================================================================
-      INTEGER          FUNCTION IZMAX1( N, CX, INCX )
+      INTEGER FUNCTION IZMAX1( N, ZX, INCX )
 *
 *  -- LAPACK auxiliary routine (version 3.4.2) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-*     September 2012
+*     February 2014
 *
 *     .. Scalar Arguments ..
       INTEGER            INCX, N
 *     ..
 *     .. Array Arguments ..
-      COMPLEX*16         CX( * )
+      COMPLEX*16         ZX(*)
 *     ..
 *
-* =====================================================================
+*  =====================================================================
 *
 *     .. Local Scalars ..
+      DOUBLE PRECISION   DMAX
       INTEGER            I, IX
-      DOUBLE PRECISION   SMAX
-      COMPLEX*16         ZDUM
 *     ..
 *     .. Intrinsic Functions ..
       INTRINSIC          ABS
 *     ..
-*     .. Statement Functions ..
-      DOUBLE PRECISION   CABS1
-*     ..
-*     .. Statement Function definitions ..
-*
-*     NEXT LINE IS THE ONLY MODIFICATION.
-      CABS1( ZDUM ) = ABS( ZDUM )
-*     ..
 *     .. Executable Statements ..
 *
       IZMAX1 = 0
-      IF( N.LT.1 )
-     $   RETURN
+      IF (N.LT.1 .OR. INCX.LE.0) RETURN
       IZMAX1 = 1
-      IF( N.EQ.1 )
-     $   RETURN
-      IF( INCX.EQ.1 )
-     $   GO TO 30
-*
-*     CODE FOR INCREMENT NOT EQUAL TO 1
-*
-      IX = 1
-      SMAX = CABS1( CX( 1 ) )
-      IX = IX + INCX
-      DO 20 I = 2, N
-         IF( CABS1( CX( IX ) ).LE.SMAX )
-     $      GO TO 10
-         IZMAX1 = I
-         SMAX = CABS1( CX( IX ) )
-   10    CONTINUE
-         IX = IX + INCX
-   20 CONTINUE
-      RETURN
+      IF (N.EQ.1) RETURN
+      IF (INCX.EQ.1) THEN
+*
+*        code for increment equal to 1
 *
-*     CODE FOR INCREMENT EQUAL TO 1
+         DMAX = ABS(ZX(1))
+         DO I = 2,N
+            IF (ABS(ZX(I)).GT.DMAX) THEN
+               IZMAX1 = I
+               DMAX = ABS(ZX(I))
+            END IF
+         END DO
+      ELSE
 *
-   30 CONTINUE
-      SMAX = CABS1( CX( 1 ) )
-      DO 40 I = 2, N
-         IF( CABS1( CX( I ) ).LE.SMAX )
-     $      GO TO 40
-         IZMAX1 = I
-         SMAX = CABS1( CX( I ) )
-   40 CONTINUE
+*        code for increment not equal to 1
+*
+         IX = 1
+         DMAX = ABS(ZX(1))
+         IX = IX + INCX
+         DO I = 2,N
+            IF (ABS(ZX(IX)).GT.DMAX) THEN
+               IZMAX1 = I
+               DMAX = ABS(ZX(IX))
+            END IF
+            IX = IX + INCX
+         END DO
+      END IF
       RETURN
 *
 *     End of IZMAX1