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