diff options
author | langou <langou@users.noreply.github.com> | 2014-02-10 19:55:39 +0000 |
---|---|---|
committer | langou <langou@users.noreply.github.com> | 2014-02-10 19:55:39 +0000 |
commit | 54d66c762f545a634179707f1cd661989ea33a5f (patch) | |
tree | dad0d3ff313ba648766d9a1f1a6c56199caf4198 /SRC/icmax1.f | |
parent | df747406083c0d2a08d7e2c9b8ad7b93a570e104 (diff) | |
download | lapack-54d66c762f545a634179707f1cd661989ea33a5f.tar.gz lapack-54d66c762f545a634179707f1cd661989ea33a5f.tar.bz2 lapack-54d66c762f545a634179707f1cd661989ea33a5f.zip |
( Let me know if I broke anything. I double checked. We should be fine but )
( please let me know if concerns/problems. )
1) The comments in ICMAX1 (resp. IZMAX1) were not correct. The comments read:
"ICMAX1 finds the index of the element whose real part has maximum absolute
value." It should have read: "ICMAX1 finds the index of the first vector
element of maximum absolute value." This is corrected. The problem was reported
Eloy Romero Alcalde from the SLEPc team, Universitat Politècnica de València
and confirmed by Nick Higham, Sven Hammarling and Julien Langou.
2) The routine ICAMAX (resp. IZAMAX) from the BLAS evolved without ICMAX1
(resp. IZMAX1). Reconcialated both version. So essentially took the ICAMAX
currently in the BLAS and changed it appropriately for an ICMAX1.
3) Remove the use of statement function in ICMAX1 (resp. IZMAX1). Now obsolete
in FORTRAN.
4) Change comments in BLAS routines: SCABS1, DCABS1, ICAMAX, IZAMAX, SCASUM,
and DZASUM. Remove the use of "absolute value of a complex number" for the
quantity "| Re(.) | + | Im(.) |". For example:
before
DCABS1 computes absolute value of a double complex number
after
DCABS1 computes |Re(.)| + |Im(.)| of a double complex number
Diffstat (limited to 'SRC/icmax1.f')
-rw-r--r-- | SRC/icmax1.f | 85 |
1 files changed, 36 insertions, 49 deletions
diff --git a/SRC/icmax1.f b/SRC/icmax1.f index f312a2d7..0f40e806 100644 --- a/SRC/icmax1.f +++ b/SRC/icmax1.f @@ -1,4 +1,4 @@ -*> \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 =========== * @@ -33,8 +33,7 @@ *> *> \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. @@ -52,7 +51,8 @@ *> \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 @@ -69,7 +69,7 @@ *> \author Univ. of Colorado Denver *> \author NAG Ltd. * -*> \date September 2012 +*> \date February 2014 * *> \ingroup complexOTHERauxiliary * @@ -79,74 +79,61 @@ *> 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 |