1 /* 2 ARPACK++ v1.2 2/20/2000 3 c++ interface to ARPACK code. 4 5 MODULE ARLComp.h. 6 ALTERED copy of dcomplex.h and scomplex.h (from SuperLU package). 7 Structure complex was renamed to lscomplex. 8 Structure doublecomplex was renamed to ldcomplex. 9 */ 10 11 /* 12 * -- SuperLU routine (version 2.0) -- 13 * Univ. of California Berkeley, Xerox Palo Alto Research Center, 14 * and Lawrence Berkeley National Lab. 15 * November 15, 1997 16 * 17 * </pre> 18 */ 19 #ifndef __SUPERLU_DCOMPLEX /* allow multiple inclusions */ 20 #define __SUPERLU_DCOMPLEX 21 22 /* 23 * This header file is to be included in source files z*.c 24 */ 25 #ifndef DCOMPLEX_INCLUDE 26 #define DCOMPLEX_INCLUDE 27 28 typedef struct { double r, i; } ldcomplex; 29 30 31 /* Macro definitions */ 32 33 /*! \brief Complex Addition c = a + b */ 34 #define z_add(c, a, b) { (c)->r = (a)->r + (b)->r; \ 35 (c)->i = (a)->i + (b)->i; } 36 37 /*! \brief Complex Subtraction c = a - b */ 38 #define z_sub(c, a, b) { (c)->r = (a)->r - (b)->r; \ 39 (c)->i = (a)->i - (b)->i; } 40 41 /*! \brief Complex-Double Multiplication */ 42 #define zd_mult(c, a, b) { (c)->r = (a)->r * (b); \ 43 (c)->i = (a)->i * (b); } 44 45 /*! \brief Complex-Complex Multiplication */ 46 #define zz_mult(c, a, b) { \ 47 double cr, ci; \ 48 cr = (a)->r * (b)->r - (a)->i * (b)->i; \ 49 ci = (a)->i * (b)->r + (a)->r * (b)->i; \ 50 (c)->r = cr; \ 51 (c)->i = ci; \ 52 } 53 54 #define zz_conj(a, b) { \ 55 (a)->r = (b)->r; \ 56 (a)->i = -((b)->i); \ 57 } 58 59 /*! \brief Complex equality testing */ 60 #define z_eq(a, b) ( (a)->r == (b)->r && (a)->i == (b)->i ) 61 62 63 #ifdef __cplusplus 64 extern "C" { 65 #endif 66 67 /* Prototypes for functions in dcomplex.c */ 68 void z_div(ldcomplex *, ldcomplex *, ldcomplex *); 69 double z_abs(ldcomplex *); /* exact */ 70 double z_abs1(ldcomplex *); /* approximate */ 71 void z_exp(ldcomplex *, ldcomplex *); 72 void d_cnjg(ldcomplex *r, ldcomplex *z); 73 double d_imag(ldcomplex *); 74 ldcomplex z_sgn(ldcomplex *); 75 ldcomplex z_sqrt(ldcomplex *); 76 77 78 #ifdef __cplusplus 79 } 80 #endif 81 82 #endif 83 84 #endif /* __SUPERLU_DCOMPLEX */ 85 86 87 #ifndef __SUPERLU_SCOMPLEX /* allow multiple inclusions */ 88 #define __SUPERLU_SCOMPLEX 89 90 /* 91 * This header file is to be included in source files c*.c 92 */ 93 #ifndef SCOMPLEX_INCLUDE 94 #define SCOMPLEX_INCLUDE 95 96 typedef struct { float r, i; } lscomplex; 97 98 99 /* Macro definitions */ 100 101 /*! \brief Complex Addition c = a + b */ 102 #define c_add(c, a, b) { (c)->r = (a)->r + (b)->r; \ 103 (c)->i = (a)->i + (b)->i; } 104 105 /*! \brief Complex Subtraction c = a - b */ 106 #define c_sub(c, a, b) { (c)->r = (a)->r - (b)->r; \ 107 (c)->i = (a)->i - (b)->i; } 108 109 /*! \brief Complex-Double Multiplication */ 110 #define cs_mult(c, a, b) { (c)->r = (a)->r * (b); \ 111 (c)->i = (a)->i * (b); } 112 113 /*! \brief Complex-Complex Multiplication */ 114 #define cc_mult(c, a, b) { \ 115 float cr, ci; \ 116 cr = (a)->r * (b)->r - (a)->i * (b)->i; \ 117 ci = (a)->i * (b)->r + (a)->r * (b)->i; \ 118 (c)->r = cr; \ 119 (c)->i = ci; \ 120 } 121 122 #define cc_conj(a, b) { \ 123 (a)->r = (b)->r; \ 124 (a)->i = -((b)->i); \ 125 } 126 127 /*! \brief Complex equality testing */ 128 #define c_eq(a, b) ( (a)->r == (b)->r && (a)->i == (b)->i ) 129 130 131 #ifdef __cplusplus 132 extern "C" { 133 #endif 134 135 /* Prototypes for functions in scomplex.c */ 136 void c_div(lscomplex *, lscomplex *, lscomplex *); 137 double c_abs(lscomplex *); /* exact */ 138 double c_abs1(lscomplex *); /* approximate */ 139 void c_exp(lscomplex *, lscomplex *); 140 void r_cnjg(lscomplex *, lscomplex *); 141 double r_imag(lscomplex *); 142 lscomplex c_sgn(lscomplex *); 143 lscomplex c_sqrt(lscomplex *); 144 145 146 #ifdef __cplusplus 147 } 148 #endif 149 150 #endif 151 152 #endif /* __SUPERLU_SCOMPLEX */ 153 154