01:       INTEGER          FUNCTION IZMAX1( N, CX, INCX )
02: *
03: *  -- LAPACK auxiliary routine (version 3.2) --
04: *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
05: *     November 2006
06: *
07: *     .. Scalar Arguments ..
08:       INTEGER            INCX, N
09: *     ..
10: *     .. Array Arguments ..
11:       COMPLEX*16         CX( * )
12: *     ..
13: *
14: *  Purpose
15: *  =======
16: *
17: *  IZMAX1 finds the index of the element whose real part has maximum
18: *  absolute value.
19: *
20: *  Based on IZAMAX from Level 1 BLAS.
21: *  The change is to use the 'genuine' absolute value.
22: *
23: *  Contributed by Nick Higham for use with ZLACON.
24: *
25: *  Arguments
26: *  =========
27: *
28: *  N       (input) INTEGER
29: *          The number of elements in the vector CX.
30: *
31: *  CX      (input) COMPLEX*16 array, dimension (N)
32: *          The vector whose elements will be summed.
33: *
34: *  INCX    (input) INTEGER
35: *          The spacing between successive values of CX.  INCX >= 1.
36: *
37: * =====================================================================
38: *
39: *     .. Local Scalars ..
40:       INTEGER            I, IX
41:       DOUBLE PRECISION   SMAX
42:       COMPLEX*16         ZDUM
43: *     ..
44: *     .. Intrinsic Functions ..
45:       INTRINSIC          ABS
46: *     ..
47: *     .. Statement Functions ..
48:       DOUBLE PRECISION   CABS1
49: *     ..
50: *     .. Statement Function definitions ..
51: *
52: *     NEXT LINE IS THE ONLY MODIFICATION.
53:       CABS1( ZDUM ) = ABS( ZDUM )
54: *     ..
55: *     .. Executable Statements ..
56: *
57:       IZMAX1 = 0
58:       IF( N.LT.1 )
59:      $   RETURN
60:       IZMAX1 = 1
61:       IF( N.EQ.1 )
62:      $   RETURN
63:       IF( INCX.EQ.1 )
64:      $   GO TO 30
65: *
66: *     CODE FOR INCREMENT NOT EQUAL TO 1
67: *
68:       IX = 1
69:       SMAX = CABS1( CX( 1 ) )
70:       IX = IX + INCX
71:       DO 20 I = 2, N
72:          IF( CABS1( CX( IX ) ).LE.SMAX )
73:      $      GO TO 10
74:          IZMAX1 = I
75:          SMAX = CABS1( CX( IX ) )
76:    10    CONTINUE
77:          IX = IX + INCX
78:    20 CONTINUE
79:       RETURN
80: *
81: *     CODE FOR INCREMENT EQUAL TO 1
82: *
83:    30 CONTINUE
84:       SMAX = CABS1( CX( 1 ) )
85:       DO 40 I = 2, N
86:          IF( CABS1( CX( I ) ).LE.SMAX )
87:      $      GO TO 40
88:          IZMAX1 = I
89:          SMAX = CABS1( CX( I ) )
90:    40 CONTINUE
91:       RETURN
92: *
93: *     End of IZMAX1
94: *
95:       END
96: