1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
/*! @file dzsum1.c
* \brief Takes sum of the absolute values of a complex vector and returns a double precision result
*
* <pre>
* -- LAPACK auxiliary routine (version 2.0) --
* Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
* Courant Institute, Argonne National Lab, and Rice University
* October 31, 1992
* </pre>
*/
#include "slu_dcomplex.h"
#include "slu_Cnames.h"
/*! \brief
<pre>
Purpose
=======
DZSUM1 takes the sum of the absolute values of a complex
vector and returns a double precision result.
Based on DZASUM from the Level 1 BLAS.
The change is to use the 'genuine' absolute value.
Contributed by Nick Higham for use with ZLACON.
Arguments
=========
N (input) INT
The number of elements in the vector CX.
CX (input) COMPLEX*16 array, dimension (N)
The vector whose elements will be summed.
INCX (input) INT
The spacing between successive values of CX. INCX > 0.
=====================================================================
</pre>
*/
double dzsum1_slu(int *n, doublecomplex *cx, int *incx)
{
/* Builtin functions */
double z_abs(doublecomplex *);
/* Local variables */
int i, nincx;
double stemp;
#define CX(I) cx[(I)-1]
stemp = 0.;
if (*n <= 0) {
return stemp;
}
if (*incx == 1) {
goto L20;
}
/* CODE FOR INCREMENT NOT EQUAL TO 1 */
nincx = *n * *incx;
for (i = 1; *incx < 0 ? i >= nincx : i <= nincx; i += *incx) {
/* NEXT LINE MODIFIED. */
stemp += z_abs(&CX(i));
/* L10: */
}
return stemp;
/* CODE FOR INCREMENT EQUAL TO 1 */
L20:
for (i = 1; i <= *n; ++i) {
/* NEXT LINE MODIFIED. */
stemp += z_abs(&CX(i));
/* L30: */
}
return stemp;
/* End of DZSUM1 */
} /* dzsum1_slu */
|