74d1c7f9ff257888b0bec716394aa8b53db74cd5
[platform/upstream/lapack.git] / SRC / icmax1.f
1 *> \brief \b ICMAX1 finds the index of the first vector element of maximum absolute value.
2 *
3 *  =========== DOCUMENTATION ===========
4 *
5 * Online html documentation available at 
6 *            http://www.netlib.org/lapack/explore-html/ 
7 *
8 *> \htmlonly
9 *> Download ICMAX1 + dependencies 
10 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/icmax1.f"> 
11 *> [TGZ]</a> 
12 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/icmax1.f"> 
13 *> [ZIP]</a> 
14 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/icmax1.f"> 
15 *> [TXT]</a>
16 *> \endhtmlonly 
17 *
18 *  Definition:
19 *  ===========
20 *
21 *       INTEGER          FUNCTION ICMAX1( N, CX, INCX )
22
23 *       .. Scalar Arguments ..
24 *       INTEGER            INCX, N
25 *       ..
26 *       .. Array Arguments ..
27 *       COMPLEX            CX( * )
28 *       ..
29 *  
30 *
31 *> \par Purpose:
32 *  =============
33 *>
34 *> \verbatim
35 *>
36 *> ICMAX1 finds the index of the first vector element of maximum absolute value.
37 *>
38 *> Based on ICAMAX from Level 1 BLAS.
39 *> The change is to use the 'genuine' absolute value.
40 *> \endverbatim
41 *
42 *  Arguments:
43 *  ==========
44 *
45 *> \param[in] N
46 *> \verbatim
47 *>          N is INTEGER
48 *>          The number of elements in the vector CX.
49 *> \endverbatim
50 *>
51 *> \param[in] CX
52 *> \verbatim
53 *>          CX is COMPLEX array, dimension (N)
54 *>          The vector CX. The ICMAX1 function returns the index of its first
55 *>          element of maximum absolute value.
56 *> \endverbatim
57 *>
58 *> \param[in] INCX
59 *> \verbatim
60 *>          INCX is INTEGER
61 *>          The spacing between successive values of CX.  INCX >= 1.
62 *> \endverbatim
63 *
64 *  Authors:
65 *  ========
66 *
67 *> \author Univ. of Tennessee 
68 *> \author Univ. of California Berkeley 
69 *> \author Univ. of Colorado Denver 
70 *> \author NAG Ltd. 
71 *
72 *> \date February 2014
73 *
74 *> \ingroup complexOTHERauxiliary
75 *
76 *> \par Contributors:
77 *  ==================
78 *>
79 *> Nick Higham for use with CLACON.
80 *
81 *  =====================================================================
82       INTEGER FUNCTION ICMAX1( N, CX, INCX )
83 *
84 *  -- LAPACK auxiliary routine (version 3.6.0) --
85 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
86 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
87 *     February 2014
88 *
89 *     .. Scalar Arguments ..
90       INTEGER            INCX, N
91 *     ..
92 *     .. Array Arguments ..
93       COMPLEX            CX(*)
94 *     ..
95 *
96 *  =====================================================================
97 *
98 *     .. Local Scalars ..
99       REAL               SMAX
100       INTEGER            I, IX
101 *     ..
102 *     .. Intrinsic Functions ..
103       INTRINSIC          ABS
104 *     ..
105 *     .. Executable Statements ..
106 *
107       ICMAX1 = 0
108       IF (N.LT.1 .OR. INCX.LE.0) RETURN
109       ICMAX1 = 1
110       IF (N.EQ.1) RETURN
111       IF (INCX.EQ.1) THEN
112 *
113 *        code for increment equal to 1
114 *
115          SMAX = ABS(CX(1))
116          DO I = 2,N
117             IF (ABS(CX(I)).GT.SMAX) THEN
118                ICMAX1 = I
119                SMAX = ABS(CX(I))
120             END IF
121          END DO
122       ELSE
123 *
124 *        code for increment not equal to 1
125 *
126          IX = 1
127          SMAX = ABS(CX(1))
128          IX = IX + INCX
129          DO I = 2,N
130             IF (ABS(CX(IX)).GT.SMAX) THEN
131                ICMAX1 = I
132                SMAX = ABS(CX(IX))
133             END IF
134             IX = IX + INCX
135          END DO
136       END IF
137       RETURN
138 *
139 *     End of ICMAX1
140 *
141       END