1 /* ========================================================================== */
2 /* === Include/cholmod_template.h =========================================== */
3 /* ========================================================================== */
4 
5 /* -------------------------------------------------------------------------- */
6 /* undefine current xtype macros, and then define macros for current type */
7 /* -------------------------------------------------------------------------- */
8 
9 #undef TEMPLATE
10 #undef TEMPLATE2
11 #undef XTYPE
12 #undef XTYPE2
13 #undef XTYPE_OK
14 #undef ENTRY_IS_NONZERO
15 #undef ENTRY_IS_ZERO
16 #undef ENTRY_IS_ONE
17 #undef IMAG_IS_NONZERO
18 
19 #undef ASSEMBLE
20 #undef ASSIGN
21 #undef ASSIGN_CONJ
22 #undef ASSIGN2
23 #undef ASSIGN2_CONJ
24 #undef ASSIGN_REAL
25 #undef MULT
26 #undef MULTADD
27 #undef ADD
28 #undef ADD_REAL
29 #undef MULTSUB
30 #undef MULTADDCONJ
31 #undef MULTSUBCONJ
32 #undef LLDOT
33 #undef CLEAR
34 #undef DIV
35 #undef DIV_REAL
36 #undef MULT_REAL
37 #undef CLEAR_IMAG
38 #undef LDLDOT
39 #undef PREFIX
40 
41 #undef ENTRY_SIZE
42 
43 #undef XPRINT0
44 #undef XPRINT1
45 #undef XPRINT2
46 #undef XPRINT3
47 
48 /* -------------------------------------------------------------------------- */
49 /* pattern */
50 /* -------------------------------------------------------------------------- */
51 
52 
53 #ifdef PATTERN
54 
55 #define PREFIX				    p_
56 #define TEMPLATE(name)			    P_TEMPLATE(name)
57 #define TEMPLATE2(name)			    P_TEMPLATE(name)
58 #define XTYPE				    CHOLMOD_PATTERN
59 #define XTYPE2				    CHOLMOD_REAL
60 #define XTYPE_OK(type)			    (TRUE)
61 #define ENTRY_IS_NONZERO(ax,az,q)	    (TRUE)
62 #define ENTRY_IS_ZERO(ax,az,q)		    (FALSE)
63 #define ENTRY_IS_ONE(ax,az,q)		    (TRUE)
64 #define IMAG_IS_NONZERO(ax,az,q)	    (FALSE)
65 #define ENTRY_SIZE			    0
66 
67 #define ASSEMBLE(x,z,p,ax,az,q)
68 #define ASSIGN(x,z,p,ax,az,q)
69 #define ASSIGN_CONJ(x,z,p,ax,az,q)
70 #define ASSIGN2(x,z,p,ax,az,q)		    P_ASSIGN2(x,z,p,ax,az,q)
71 #define ASSIGN2_CONJ(x,z,p,ax,az,q)	    P_ASSIGN2(x,z,p,ax,az,q)
72 #define ASSIGN_REAL(x,p,ax,q)
73 #define MULT(x,z,p,ax,az,q,bx,bz,pb)
74 #define MULTADD(x,z,p,ax,az,q,bx,bz,pb)
75 #define ADD(x,z,p,ax,az,q,bx,bz,pb)
76 #define ADD_REAL(x,p, ax,q, bx,r)
77 #define MULTSUB(x,z,p,ax,az,q,bx,bz,pb)
78 #define MULTADDCONJ(x,z,p,ax,az,q,bx,bz,pb)
79 #define MULTSUBCONJ(x,z,p,ax,az,q,bx,bz,pb)
80 #define LLDOT(x,p,ax,az,q)
81 #define CLEAR(x,z,p)
82 #define CLEAR_IMAG(x,z,p)
83 #define DIV(x,z,p,ax,az,q)
84 #define DIV_REAL(x,z,p, ax,az,q, bx,r)
85 #define MULT_REAL(x,z,p, ax,az,q, bx,r)
86 #define LDLDOT(x,p, ax,az,q, bx,r)
87 
88 #define XPRINT0(x,z,p)			    P_PRINT(0,x,z,p)
89 #define XPRINT1(x,z,p)			    P_PRINT(1,x,z,p)
90 #define XPRINT2(x,z,p)			    P_PRINT(2,x,z,p)
91 #define XPRINT3(x,z,p)			    P_PRINT(3,x,z,p)
92 
93 /* -------------------------------------------------------------------------- */
94 /* real */
95 /* -------------------------------------------------------------------------- */
96 
97 #elif defined (REAL)
98 
99 #define PREFIX				    r_
100 #define TEMPLATE(name)			    R_TEMPLATE(name)
101 #define TEMPLATE2(name)			    R_TEMPLATE(name)
102 #define XTYPE				    CHOLMOD_REAL
103 #define XTYPE2				    CHOLMOD_REAL
104 #define XTYPE_OK(type)			    R_XTYPE_OK(type)
105 #define ENTRY_IS_NONZERO(ax,az,q)	    R_IS_NONZERO(ax,az,q)
106 #define ENTRY_IS_ZERO(ax,az,q)		    R_IS_ZERO(ax,az,q)
107 #define ENTRY_IS_ONE(ax,az,q)		    R_IS_ONE(ax,az,q)
108 #define IMAG_IS_NONZERO(ax,az,q)	    (FALSE)
109 #define ENTRY_SIZE			    1
110 
111 #define ASSEMBLE(x,z,p,ax,az,q)		    R_ASSEMBLE(x,z,p,ax,az,q)
112 #define ASSIGN(x,z,p,ax,az,q)		    R_ASSIGN(x,z,p,ax,az,q)
113 #define ASSIGN_CONJ(x,z,p,ax,az,q)	    R_ASSIGN(x,z,p,ax,az,q)
114 #define ASSIGN2(x,z,p,ax,az,q)		    R_ASSIGN(x,z,p,ax,az,q)
115 #define ASSIGN2_CONJ(x,z,p,ax,az,q)	    R_ASSIGN(x,z,p,ax,az,q)
116 #define ASSIGN_REAL(x,p,ax,q)		    R_ASSIGN_REAL(x,p,ax,q)
117 #define MULT(x,z,p,ax,az,q,bx,bz,pb)	    R_MULT(x,z,p,ax,az,q,bx,bz,pb)
118 #define MULTADD(x,z,p,ax,az,q,bx,bz,pb)     R_MULTADD(x,z,p,ax,az,q,bx,bz,pb)
119 #define ADD(x,z,p,ax,az,q,bx,bz,pb)	    R_ADD(x,z,p,ax,az,q,bx,bz,pb)
120 #define ADD_REAL(x,p, ax,q, bx,r)	    R_ADD_REAL(x,p, ax,q, bx,r)
121 #define MULTSUB(x,z,p,ax,az,q,bx,bz,pb)     R_MULTSUB(x,z,p,ax,az,q,bx,bz,pb)
122 #define MULTADDCONJ(x,z,p,ax,az,q,bx,bz,pb) \
123     R_MULTADDCONJ(x,z,p,ax,az,q,bx,bz,pb)
124 #define MULTSUBCONJ(x,z,p,ax,az,q,bx,bz,pb) \
125     R_MULTSUBCONJ(x,z,p,ax,az,q,bx,bz,pb)
126 #define LLDOT(x,p,ax,az,q)		    R_LLDOT(x,p,ax,az,q)
127 #define CLEAR(x,z,p)			    R_CLEAR(x,z,p)
128 #define CLEAR_IMAG(x,z,p)		    R_CLEAR_IMAG(x,z,p)
129 #define DIV(x,z,p,ax,az,q)		    R_DIV(x,z,p,ax,az,q)
130 #define DIV_REAL(x,z,p, ax,az,q, bx,r)	    R_DIV_REAL(x,z,p, ax,az,q, bx,r)
131 #define MULT_REAL(x,z,p, ax,az,q, bx,r)	    R_MULT_REAL(x,z,p, ax,az,q, bx,r)
132 #define LDLDOT(x,p, ax,az,q, bx,r)	    R_LDLDOT(x,p, ax,az,q, bx,r)
133 
134 #define XPRINT0(x,z,p)			    R_PRINT(0,x,z,p)
135 #define XPRINT1(x,z,p)			    R_PRINT(1,x,z,p)
136 #define XPRINT2(x,z,p)			    R_PRINT(2,x,z,p)
137 #define XPRINT3(x,z,p)			    R_PRINT(3,x,z,p)
138 
139 /* -------------------------------------------------------------------------- */
140 /* complex */
141 /* -------------------------------------------------------------------------- */
142 
143 #elif defined (COMPLEX)
144 
145 #define PREFIX				    c_
146 
147 #ifdef NCONJUGATE
148 #define TEMPLATE(name)			    CT_TEMPLATE(name)
149 #define TEMPLATE2(name)			    CT_TEMPLATE(name)
150 #else
151 #define TEMPLATE(name)			    C_TEMPLATE(name)
152 #define TEMPLATE2(name)			    C_TEMPLATE(name)
153 #endif
154 
155 #define ASSEMBLE(x,z,p,ax,az,q)		    C_ASSEMBLE(x,z,p,ax,az,q)
156 #define ASSIGN(x,z,p,ax,az,q)		    C_ASSIGN(x,z,p,ax,az,q)
157 #define ASSIGN_CONJ(x,z,p,ax,az,q)	    C_ASSIGN_CONJ(x,z,p,ax,az,q)
158 #define ASSIGN2(x,z,p,ax,az,q)		    C_ASSIGN(x,z,p,ax,az,q)
159 #define ASSIGN2_CONJ(x,z,p,ax,az,q)	    C_ASSIGN_CONJ(x,z,p,ax,az,q)
160 #define ASSIGN_REAL(x,p,ax,q)		    C_ASSIGN_REAL(x,p,ax,q)
161 #define XTYPE				    CHOLMOD_COMPLEX
162 #define XTYPE2				    CHOLMOD_COMPLEX
163 #define XTYPE_OK(type)			    C_XTYPE_OK(type)
164 #define ENTRY_IS_NONZERO(ax,az,q)	    C_IS_NONZERO(ax,az,q)
165 #define ENTRY_IS_ZERO(ax,az,q)		    C_IS_ZERO(ax,az,q)
166 #define ENTRY_IS_ONE(ax,az,q)		    C_IS_ONE(ax,az,q)
167 #define IMAG_IS_NONZERO(ax,az,q)	    C_IMAG_IS_NONZERO(ax,az,q)
168 #define ENTRY_SIZE			    2
169 
170 #define MULTADD(x,z,p,ax,az,q,bx,bz,pb)     C_MULTADD(x,z,p,ax,az,q,bx,bz,pb)
171 #define MULT(x,z,p,ax,az,q,bx,bz,pb)	    C_MULT(x,z,p,ax,az,q,bx,bz,pb)
172 #define ADD(x,z,p,ax,az,q,bx,bz,pb)	    C_ADD(x,z,p,ax,az,q,bx,bz,pb)
173 #define ADD_REAL(x,p, ax,q, bx,r)	    C_ADD_REAL(x,p, ax,q, bx,r)
174 #define MULTSUB(x,z,p,ax,az,q,bx,bz,pb)     C_MULTSUB(x,z,p,ax,az,q,bx,bz,pb)
175 #define MULTADDCONJ(x,z,p,ax,az,q,bx,bz,pb) \
176     C_MULTADDCONJ(x,z,p,ax,az,q,bx,bz,pb)
177 #define MULTSUBCONJ(x,z,p,ax,az,q,bx,bz,pb) \
178     C_MULTSUBCONJ(x,z,p,ax,az,q,bx,bz,pb)
179 #define LLDOT(x,p,ax,az,q)		    C_LLDOT(x,p,ax,az,q)
180 #define CLEAR(x,z,p)			    C_CLEAR(x,z,p)
181 #define CLEAR_IMAG(x,z,p)		    C_CLEAR_IMAG(x,z,p)
182 #define DIV(x,z,p,ax,az,q)		    C_DIV(x,z,p,ax,az,q)
183 #define DIV_REAL(x,z,p, ax,az,q, bx,r)	    C_DIV_REAL(x,z,p, ax,az,q, bx,r)
184 #define MULT_REAL(x,z,p, ax,az,q, bx,r)	    C_MULT_REAL(x,z,p, ax,az,q, bx,r)
185 #define LDLDOT(x,p, ax,az,q, bx,r)	    C_LDLDOT(x,p, ax,az,q, bx,r)
186 
187 #define XPRINT0(x,z,p)			    C_PRINT(0,x,z,p)
188 #define XPRINT1(x,z,p)			    C_PRINT(1,x,z,p)
189 #define XPRINT2(x,z,p)			    C_PRINT(2,x,z,p)
190 #define XPRINT3(x,z,p)			    C_PRINT(3,x,z,p)
191 
192 /* -------------------------------------------------------------------------- */
193 /* zomplex */
194 /* -------------------------------------------------------------------------- */
195 
196 #elif defined (ZOMPLEX)
197 
198 #define PREFIX				    z_
199 
200 #ifdef NCONJUGATE
201 #define TEMPLATE(name)			    ZT_TEMPLATE(name)
202 #define TEMPLATE2(name)			    CT_TEMPLATE(name)
203 #else
204 #define TEMPLATE(name)			    Z_TEMPLATE(name)
205 #define TEMPLATE2(name)			    C_TEMPLATE(name)
206 #endif
207 
208 #define ASSEMBLE(x,z,p,ax,az,q)		    Z_ASSEMBLE(x,z,p,ax,az,q)
209 #define ASSIGN(x,z,p,ax,az,q)		    Z_ASSIGN(x,z,p,ax,az,q)
210 #define ASSIGN_CONJ(x,z,p,ax,az,q)	    Z_ASSIGN_CONJ(x,z,p,ax,az,q)
211 #define ASSIGN2(x,z,p,ax,az,q)		    Z_ASSIGN(x,z,p,ax,az,q)
212 #define ASSIGN2_CONJ(x,z,p,ax,az,q)	    Z_ASSIGN_CONJ(x,z,p,ax,az,q)
213 #define ASSIGN_REAL(x,p,ax,q)		    Z_ASSIGN_REAL(x,p,ax,q)
214 #define XTYPE				    CHOLMOD_ZOMPLEX
215 #define XTYPE2				    CHOLMOD_ZOMPLEX
216 #define XTYPE_OK(type)			    Z_XTYPE_OK(type)
217 #define ENTRY_IS_NONZERO(ax,az,q)	    Z_IS_NONZERO(ax,az,q)
218 #define ENTRY_IS_ZERO(ax,az,q)		    Z_IS_ZERO(ax,az,q)
219 #define ENTRY_IS_ONE(ax,az,q)		    Z_IS_ONE(ax,az,q)
220 #define IMAG_IS_NONZERO(ax,az,q)	    Z_IMAG_IS_NONZERO(ax,az,q)
221 #define ENTRY_SIZE			    1
222 
223 #define MULTADD(x,z,p,ax,az,q,bx,bz,pb)     Z_MULTADD(x,z,p,ax,az,q,bx,bz,pb)
224 #define MULT(x,z,p,ax,az,q,bx,bz,pb)	    Z_MULT(x,z,p,ax,az,q,bx,bz,pb)
225 #define ADD(x,z,p,ax,az,q,bx,bz,pb)	    Z_ADD(x,z,p,ax,az,q,bx,bz,pb)
226 #define ADD_REAL(x,p, ax,q, bx,r)	    Z_ADD_REAL(x,p, ax,q, bx,r)
227 #define MULTSUB(x,z,p,ax,az,q,bx,bz,pb)     Z_MULTSUB(x,z,p,ax,az,q,bx,bz,pb)
228 #define MULTADDCONJ(x,z,p,ax,az,q,bx,bz,pb) \
229     Z_MULTADDCONJ(x,z,p,ax,az,q,bx,bz,pb)
230 #define MULTSUBCONJ(x,z,p,ax,az,q,bx,bz,pb) \
231     Z_MULTSUBCONJ(x,z,p,ax,az,q,bx,bz,pb)
232 #define LLDOT(x,p,ax,az,q)		    Z_LLDOT(x,p,ax,az,q)
233 #define CLEAR(x,z,p)			    Z_CLEAR(x,z,p)
234 #define CLEAR_IMAG(x,z,p)		    Z_CLEAR_IMAG(x,z,p)
235 #define DIV(x,z,p,ax,az,q)		    Z_DIV(x,z,p,ax,az,q)
236 #define DIV_REAL(x,z,p, ax,az,q, bx,r)	    Z_DIV_REAL(x,z,p, ax,az,q, bx,r)
237 #define MULT_REAL(x,z,p, ax,az,q, bx,r)	    Z_MULT_REAL(x,z,p, ax,az,q, bx,r)
238 #define LDLDOT(x,p, ax,az,q, bx,r)	    Z_LDLDOT(x,p, ax,az,q, bx,r)
239 
240 #define XPRINT0(x,z,p)			    Z_PRINT(0,x,z,p)
241 #define XPRINT1(x,z,p)			    Z_PRINT(1,x,z,p)
242 #define XPRINT2(x,z,p)			    Z_PRINT(2,x,z,p)
243 #define XPRINT3(x,z,p)			    Z_PRINT(3,x,z,p)
244 
245 #endif
246