1 2 /*! @file slu_dcomplex.h 3 * \brief Header file for complex operations 4 * <pre> 5 * -- SuperLU routine (version 2.0) -- 6 * Univ. of California Berkeley, Xerox Palo Alto Research Center, 7 * and Lawrence Berkeley National Lab. 8 * November 15, 1997 9 * 10 * Contains definitions for various complex operations. 11 * This header file is to be included in source files z*.c 12 * </pre> 13 */ 14 #ifndef __SUPERLU_DCOMPLEX /* allow multiple inclusions */ 15 #define __SUPERLU_DCOMPLEX 16 17 18 #ifndef DCOMPLEX_INCLUDE 19 #define DCOMPLEX_INCLUDE 20 21 typedef struct { double r, i; } doublecomplex; 22 23 24 /* Macro definitions */ 25 26 /*! \brief Complex Addition c = a + b */ 27 #define z_add(c, a, b) { (c)->r = (a)->r + (b)->r; \ 28 (c)->i = (a)->i + (b)->i; } 29 30 /*! \brief Complex Subtraction c = a - b */ 31 #define z_sub(c, a, b) { (c)->r = (a)->r - (b)->r; \ 32 (c)->i = (a)->i - (b)->i; } 33 34 /*! \brief Complex-Double Multiplication */ 35 #define zd_mult(c, a, b) { (c)->r = (a)->r * (b); \ 36 (c)->i = (a)->i * (b); } 37 38 /*! \brief Complex-Complex Multiplication */ 39 #define zz_mult(c, a, b) { \ 40 double cr, ci; \ 41 cr = (a)->r * (b)->r - (a)->i * (b)->i; \ 42 ci = (a)->i * (b)->r + (a)->r * (b)->i; \ 43 (c)->r = cr; \ 44 (c)->i = ci; \ 45 } 46 47 #define zz_conj(a, b) { \ 48 (a)->r = (b)->r; \ 49 (a)->i = -((b)->i); \ 50 } 51 52 /*! \brief Complex equality testing */ 53 #define z_eq(a, b) ( (a)->r == (b)->r && (a)->i == (b)->i ) 54 55 56 #ifdef __cplusplus 57 extern "C" { 58 #endif 59 60 /* Prototypes for functions in dcomplex.c */ 61 void z_div(doublecomplex *, doublecomplex *, doublecomplex *); 62 double z_abs(doublecomplex *); /* exact */ 63 double z_abs1(doublecomplex *); /* approximate */ 64 void z_exp(doublecomplex *, doublecomplex *); 65 void d_cnjg(doublecomplex *r, doublecomplex *z); 66 double d_imag(doublecomplex *); 67 doublecomplex z_sgn(doublecomplex *); 68 doublecomplex z_sqrt(doublecomplex *); 69 70 71 72 #ifdef __cplusplus 73 } 74 #endif 75 76 #endif 77 78 #endif /* __SUPERLU_DCOMPLEX */ 79