![]() |
LAPACK
3.4.1
LAPACK: Linear Algebra PACKage
|
00001 *> \brief \b IZMAX1 00002 * 00003 * =========== DOCUMENTATION =========== 00004 * 00005 * Online html documentation available at 00006 * http://www.netlib.org/lapack/explore-html/ 00007 * 00008 *> \htmlonly 00009 *> Download IZMAX1 + dependencies 00010 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/izmax1.f"> 00011 *> [TGZ]</a> 00012 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/izmax1.f"> 00013 *> [ZIP]</a> 00014 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/izmax1.f"> 00015 *> [TXT]</a> 00016 *> \endhtmlonly 00017 * 00018 * Definition: 00019 * =========== 00020 * 00021 * INTEGER FUNCTION IZMAX1( N, CX, INCX ) 00022 * 00023 * .. Scalar Arguments .. 00024 * INTEGER INCX, N 00025 * .. 00026 * .. Array Arguments .. 00027 * COMPLEX*16 CX( * ) 00028 * .. 00029 * 00030 * 00031 *> \par Purpose: 00032 * ============= 00033 *> 00034 *> \verbatim 00035 *> 00036 *> IZMAX1 finds the index of the element whose real part has maximum 00037 *> absolute value. 00038 *> 00039 *> Based on IZAMAX from Level 1 BLAS. 00040 *> The change is to use the 'genuine' absolute value. 00041 *> \endverbatim 00042 * 00043 * Arguments: 00044 * ========== 00045 * 00046 *> \param[in] N 00047 *> \verbatim 00048 *> N is INTEGER 00049 *> The number of elements in the vector CX. 00050 *> \endverbatim 00051 *> 00052 *> \param[in] CX 00053 *> \verbatim 00054 *> CX is COMPLEX*16 array, dimension (N) 00055 *> The vector whose elements will be summed. 00056 *> \endverbatim 00057 *> 00058 *> \param[in] INCX 00059 *> \verbatim 00060 *> INCX is INTEGER 00061 *> The spacing between successive values of CX. INCX >= 1. 00062 *> \endverbatim 00063 * 00064 * Authors: 00065 * ======== 00066 * 00067 *> \author Univ. of Tennessee 00068 *> \author Univ. of California Berkeley 00069 *> \author Univ. of Colorado Denver 00070 *> \author NAG Ltd. 00071 * 00072 *> \date November 2011 00073 * 00074 *> \ingroup complex16OTHERauxiliary 00075 * 00076 *> \par Contributors: 00077 * ================== 00078 *> 00079 *> Nick Higham for use with ZLACON. 00080 * 00081 * ===================================================================== 00082 INTEGER FUNCTION IZMAX1( N, CX, INCX ) 00083 * 00084 * -- LAPACK auxiliary routine (version 3.4.0) -- 00085 * -- LAPACK is a software package provided by Univ. of Tennessee, -- 00086 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 00087 * November 2011 00088 * 00089 * .. Scalar Arguments .. 00090 INTEGER INCX, N 00091 * .. 00092 * .. Array Arguments .. 00093 COMPLEX*16 CX( * ) 00094 * .. 00095 * 00096 * ===================================================================== 00097 * 00098 * .. Local Scalars .. 00099 INTEGER I, IX 00100 DOUBLE PRECISION SMAX 00101 COMPLEX*16 ZDUM 00102 * .. 00103 * .. Intrinsic Functions .. 00104 INTRINSIC ABS 00105 * .. 00106 * .. Statement Functions .. 00107 DOUBLE PRECISION CABS1 00108 * .. 00109 * .. Statement Function definitions .. 00110 * 00111 * NEXT LINE IS THE ONLY MODIFICATION. 00112 CABS1( ZDUM ) = ABS( ZDUM ) 00113 * .. 00114 * .. Executable Statements .. 00115 * 00116 IZMAX1 = 0 00117 IF( N.LT.1 ) 00118 $ RETURN 00119 IZMAX1 = 1 00120 IF( N.EQ.1 ) 00121 $ RETURN 00122 IF( INCX.EQ.1 ) 00123 $ GO TO 30 00124 * 00125 * CODE FOR INCREMENT NOT EQUAL TO 1 00126 * 00127 IX = 1 00128 SMAX = CABS1( CX( 1 ) ) 00129 IX = IX + INCX 00130 DO 20 I = 2, N 00131 IF( CABS1( CX( IX ) ).LE.SMAX ) 00132 $ GO TO 10 00133 IZMAX1 = I 00134 SMAX = CABS1( CX( IX ) ) 00135 10 CONTINUE 00136 IX = IX + INCX 00137 20 CONTINUE 00138 RETURN 00139 * 00140 * CODE FOR INCREMENT EQUAL TO 1 00141 * 00142 30 CONTINUE 00143 SMAX = CABS1( CX( 1 ) ) 00144 DO 40 I = 2, N 00145 IF( CABS1( CX( I ) ).LE.SMAX ) 00146 $ GO TO 40 00147 IZMAX1 = I 00148 SMAX = CABS1( CX( I ) ) 00149 40 CONTINUE 00150 RETURN 00151 * 00152 * End of IZMAX1 00153 * 00154 END