--- rpl/lapack/lapack/izmax1.f 2010/01/26 15:22:45 1.1.1.1
+++ rpl/lapack/lapack/izmax1.f 2018/05/29 07:18:12 1.19
@@ -1,94 +1,139 @@
- INTEGER FUNCTION IZMAX1( N, CX, INCX )
+*> \brief \b IZMAX1 finds the index of the first vector element of maximum absolute value.
*
-* -- LAPACK auxiliary routine (version 3.2) --
+* =========== DOCUMENTATION ===========
+*
+* Online html documentation available at
+* http://www.netlib.org/lapack/explore-html/
+*
+*> \htmlonly
+*> Download IZMAX1 + dependencies
+*>
+*> [TGZ]
+*>
+*> [ZIP]
+*>
+*> [TXT]
+*> \endhtmlonly
+*
+* Definition:
+* ===========
+*
+* INTEGER FUNCTION IZMAX1( N, ZX, INCX )
+*
+* .. Scalar Arguments ..
+* INTEGER INCX, N
+* ..
+* .. Array Arguments ..
+* COMPLEX*16 ZX( * )
+* ..
+*
+*
+*> \par Purpose:
+* =============
+*>
+*> \verbatim
+*>
+*> 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.
+*> \endverbatim
+*
+* Arguments:
+* ==========
+*
+*> \param[in] N
+*> \verbatim
+*> N is INTEGER
+*> The number of elements in the vector ZX.
+*> \endverbatim
+*>
+*> \param[in] ZX
+*> \verbatim
+*> 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 ZX. INCX >= 1.
+*> \endverbatim
+*
+* Authors:
+* ========
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date February 2014
+*
+*> \ingroup complexOTHERauxiliary
+*
+*> \par Contributors:
+* ==================
+*>
+*> Nick Higham for use with ZLACON.
+*
+* =====================================================================
+ INTEGER FUNCTION IZMAX1( N, ZX, INCX )
+*
+* -- LAPACK auxiliary routine (version 3.7.0) --
* -- LAPACK is a software package provided by Univ. of Tennessee, --
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2006
+* February 2014
*
* .. Scalar Arguments ..
INTEGER INCX, N
* ..
* .. Array Arguments ..
- COMPLEX*16 CX( * )
+ COMPLEX*16 ZX(*)
* ..
*
-* Purpose
-* =======
-*
-* IZMAX1 finds the index of the element whose real part has maximum
-* absolute value.
-*
-* Based on IZAMAX from Level 1 BLAS.
-* The change is to use the 'genuine' absolute value.
-*
-* Contributed by Nick Higham for use with ZLACON.
-*
-* Arguments
-* =========
-*
-* N (input) INTEGER
-* The number of elements in the vector CX.
-*
-* CX (input) COMPLEX*16 array, dimension (N)
-* The vector whose elements will be summed.
-*
-* INCX (input) INTEGER
-* The spacing between successive values of CX. INCX >= 1.
-*
-* =====================================================================
+* =====================================================================
*
* .. 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