summaryrefslogtreecommitdiff
path: root/SRC/icmax1.f
diff options
context:
space:
mode:
authorlangou <langou@users.noreply.github.com>2014-02-10 19:55:39 +0000
committerlangou <langou@users.noreply.github.com>2014-02-10 19:55:39 +0000
commit54d66c762f545a634179707f1cd661989ea33a5f (patch)
treedad0d3ff313ba648766d9a1f1a6c56199caf4198 /SRC/icmax1.f
parentdf747406083c0d2a08d7e2c9b8ad7b93a570e104 (diff)
downloadlapack-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.f85
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