/* ZV.h */
/*--------------------------------------------------------------------*/
/*
--------------------------------------------------------
purpose -- to return the absolute value of (areal,aimag)
created -- 98jan24, cca
--------------------------------------------------------
*/
double
Zabs (
double real,
double imag
) ;
/*
---------------------------------------------------
purpose -- given (areal,aimag),
compute (breal,bimag) = 1/(areal,aimag),
put breal into *pbreal
put bimag into *pbimag
created -- 98jan23, cca
---------------------------------------------------
*/
int
Zrecip (
double areal,
double aimag,
double *preal,
double *pimag
) ;
/*
---------------------------------------------------------------------
given [ (areal,aimag) (breal,bimag) ]
[ (creal,cimag) (dreal,dimag) ]
compute [ (ereal,eimag) (freal,fimag) ]
[ (greal,gimag) (hreal,himag) ]
where
I = [ (areal,aimag) (breal,bimag) ] * [ (ereal,eimag) (freal,fimag) ]
[ (creal,cimag) (dreal,dimag) ] [ (greal,gimag) (hreal,himag) ]
note, any of {pereal, peimag, pfreal, pfimag, pgreal, pgimag,
phreal, phimag} can be NULL. if not NULL, their value is filled.
this is useful when the input matrix is symmetric or hermitian.
created -- 98jan23, cca
---------------------------------------------------------------------
*/
int
Zrecip2 (
double areal,
double aimag,
double breal,
double bimag,
double creal,
double cimag,
double dreal,
double dimag,
double *pereal,
double *peimag,
double *pfreal,
double *pfimag,
double *pgreal,
double *pgimag,
double *phreal,
double *phimag
) ;
/*
------------------------------------------------
purpose -- to allocate, initialize and
return a complex vector x[]
n -- length of the complex vector (2*n double's)
x[ii] = (real, imag) for 0 <= ii < n
created -- 98jan23, cca
------------------------------------------------
*/
double *
ZVinit (
int n,
double real,
double imag
) ;
/*
-------------------------------------------
purpose -- to perform a complex dot product
(*prdot,*pidot) = y^T x
where y and x are complex
created -- 98apr15, cca
-------------------------------------------
*/
void
ZVdotU (
int size,
double y[],
double x[],
double *prdot,
double *pidot
) ;
/*
------------------------------------------------------
purpose -- to perform a conjugated complex dot product
(*prdot,*pidot) = conjugate(y^T) x
where y and x are complex
created -- 98apr15, cca
------------------------------------------------------
*/
void
ZVdotC (
int size,
double y[],
double x[],
double *prdot,
double *pidot
) ;
/*
---------------------------------------------------
purpose -- to perform a indexed complex dot product
(*prdot,*pidot) = sum_k y[index[k]]*x[k]
where y and x are complex
created -- 98apr15, cca
---------------------------------------------------
*/
void
ZVdotiU (
int size,
double y[],
int index[],
double x[],
double *prdot,
double *pidot
) ;
/*
-------------------------------------------------------------
purpose -- to perform a indexed conjugate complex dot product
(*prdot,*pidot) = sum_k conjugate(y[index[k]])*x[k]
where y and x are complex
created -- 98apr15, cca
-------------------------------------------------------------
*/
void
ZVdotiC (
int size,
double y[],
int index[],
double x[],
double *prdot,
double *pidot
) ;
/*
------------------------------------
purpose -- to perform a complex axpy
y := y + (areal, aimag) * x
where y and x are complex
created -- 98jan22, cca
------------------------------------
*/
void
ZVaxpy (
int size,
double y[],
double areal,
double aimag,
double x[]
) ;
/*
-----------------------------------------------------
purpose -- to perform a complex axpy with two vectors
z := z + (areal, aimag)*x + (breal, bimag)*y
where y and x are complex
created -- 98jan23, cca
----------------------------------------------------
*/
void
ZVaxpy2 (
int size,
double z[],
double areal,
double aimag,
double x[],
double breal,
double bimag,
double y[]
) ;
/*
------------------------------------------------------------
purpose -- to scale a double complex vector by (xreal,ximag)
y := y * (areal, aimag)
created -- 98jan22, cca
------------------------------------------------------------
*/
void
ZVscale (
int size,
double y[],
double areal,
double aimag
) ;
/*
------------------------------------------------------------
purpose -- to scale a double complex vector by a 2x2 matrix
[ y0 ] := [ d00 d01 ] [ y0 ]
[ y1 ] [ d10 d11 ] [ y1 ]
created -- 98jan23, cca
------------------------------------------------------------
*/
void
ZVscale2 (
int size,
double y0[],
double y1[],
double d00r,
double d00i,
double d01r,
double d01i,
double d10r,
double d10i,
double d11r,
double d11i
) ;
/*
-----------------------------------------------
purpose --- to print a complex vector to a file
created -- 98jan23, cca
-----------------------------------------------
*/
void
ZVfprintf (
FILE *fp,
int size,
double y[]
) ;
/*
----------------------------------
return the minimum absolute value
of the entries in a complex vector
created -- 98jan23, cca
----------------------------------
*/
double
ZVminabs (
int size,
double x[]
) ;
/*
----------------------------------
return the maximum absolute value
of the entries in a complex vector
created -- 98jan23, cca
----------------------------------
*/
double
ZVmaxabs (
int size,
double x[]
) ;
/*
----------------------------------
copy a complex vector into another
y[] := x[]
created -- 98jan23, cca
----------------------------------
*/
void
ZVcopy (
int size,
double y[],
double x[]
) ;
/*
--------------------------------------
subtract a complex vector from another
y[] := x[]
created -- 98may25, cca
--------------------------------------
*/
void
ZVsub (
int size,
double y[],
double x[]
) ;
/*--------------------------------------------------------------------*/
/*
---------------------------------------
purpose -- to gather y[*] = x[index[*]]
created -- 98apr15, cca
---------------------------------------
*/
void
ZVgather (
int size,
double y[],
double x[],
int index[]
) ;
/*--------------------------------------------------------------------*/
/*
----------------------------------------
purpose -- to scatter y[index[*]] = x[*]
created -- 98apr15, cca
----------------------------------------
*/
void
ZVscatter (
int size,
double y[],
int index[],
double x[]
) ;
/*
-----------------------------
purpose -- to zero the vector
y := 0
where y is complex
created -- 98apr25, cca
-----------------------------
*/
void
ZVzero (
int size,
double y[]
) ;
/*--------------------------------------------------------------------*/
syntax highlighted by Code2HTML, v. 0.9.1