*>
*> \verbatim
*>
-*> DCABS1 computes absolute value of a double complex number
+*> DCABS1 computes |Re(.)| + |Im(.)| of a double complex number
*> \endverbatim
*
* Authors:
*>
*> \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:
*>
*> \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:
*>
*> \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:
*>
*> \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:
*>
*> \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:
*>
*> \verbatim
*>
-*> SCABS1 computes absolute value of a complex number
+*> SCABS1 computes |Re(.)| + |Im(.)| of a complex number
*> \endverbatim
*
* Authors:
*>
*> \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
*
-*> \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 ===========
*
*>
*> \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.
*> \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
*> \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
-*> \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( * )
* ..
*
*
*>
*> \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:
*> \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