comparison liboctave/UMFPACK/UMFPACK/Source/umf_version.h @ 5164:57077d0ddc8e

[project @ 2005-02-25 19:55:24 by jwe]
author jwe
date Fri, 25 Feb 2005 19:55:28 +0000
parents
children
comparison
equal deleted inserted replaced
5163:9f3299378193 5164:57077d0ddc8e
1 /* ========================================================================== */
2 /* === umf_version.h ======================================================== */
3 /* ========================================================================== */
4
5 /* -------------------------------------------------------------------------- */
6 /* UMFPACK Version 4.4, Copyright (c) 2005 by Timothy A. Davis. CISE Dept, */
7 /* Univ. of Florida. All Rights Reserved. See ../Doc/License for License. */
8 /* web: http://www.cise.ufl.edu/research/sparse/umfpack */
9 /* -------------------------------------------------------------------------- */
10
11 /*
12 Define routine names, depending on version being compiled.
13
14 DINT: double precision, int's as integers
15 DLONG: double precision, long's as integers
16 ZLONG: complex double precision, long's as integers
17 ZINT: complex double precision, int's as integers
18 */
19
20 /* Set DINT as the default, if nothing is defined */
21 #if !defined (DLONG) && !defined (DINT) && !defined (ZLONG) && !defined (ZINT)
22 #define DINT
23 #endif
24
25 /* Determine if this is a real or complex version */
26 #if defined (ZLONG) || defined (ZINT)
27 #define COMPLEX
28 #endif
29
30 /* -------------------------------------------------------------------------- */
31 /* integer type (Int is int or long) now defined in amd_internal.h */
32 /* -------------------------------------------------------------------------- */
33
34 #if defined (DLONG) || defined (ZLONG)
35 #define LONG_INTEGER
36 #endif
37
38 /* -------------------------------------------------------------------------- */
39 /* Numerical relop macros for correctly handling the NaN case */
40 /* -------------------------------------------------------------------------- */
41
42 /*
43 SCALAR_IS_NAN(x):
44 True if x is NaN. False otherwise. The commonly-existing isnan(x)
45 function could be used, but it's not in Kernighan & Ritchie 2nd edition
46 (ANSI C). It may appear in <math.h>, but I'm not certain about
47 portability. The expression x != x is true if and only if x is NaN,
48 according to the IEEE 754 floating-point standard.
49
50 SCALAR_IS_ZERO(x):
51 True if x is zero. False if x is nonzero, NaN, or +/- Inf.
52 This is (x == 0) if the compiler is IEEE 754 compliant.
53
54 SCALAR_IS_NONZERO(x):
55 True if x is nonzero, NaN, or +/- Inf. False if x zero.
56 This is (x != 0) if the compiler is IEEE 754 compliant.
57
58 SCALAR_IS_LTZERO(x):
59 True if x is < zero or -Inf. False if x is >= 0, NaN, or +Inf.
60 This is (x < 0) if the compiler is IEEE 754 compliant.
61 */
62
63 #if defined (MATHWORKS)
64
65 /* The MathWorks has their own macros in util.h that handle NaN's properly. */
66 #define SCALAR_IS_NAN(x) (utIsNaN (x))
67 #define SCALAR_IS_ZERO(x) (utEQZero (x))
68 #define SCALAR_IS_NONZERO(x) (utNEZero (x))
69 #define SCALAR_IS_LTZERO(x) (utLTZero (x))
70
71 #elif defined (UMF_WINDOWS)
72
73 /* Yes, this is exceedingly ugly. Blame Microsoft, which hopelessly */
74 /* violates the IEEE 754 floating-point standard in a bizarre way. */
75 /* If you're using an IEEE 754-compliant compiler, then x != x is true */
76 /* iff x is NaN. For Microsoft, (x < x) is true iff x is NaN. */
77 /* So either way, this macro safely detects a NaN. */
78 #define SCALAR_IS_NAN(x) (((x) != (x)) || (((x) < (x))))
79 #define SCALAR_IS_ZERO(x) (((x) == 0.) && !SCALAR_IS_NAN(x))
80 #define SCALAR_IS_NONZERO(x) (((x) != 0.) || SCALAR_IS_NAN(x))
81 #define SCALAR_IS_LTZERO(x) (((x) < 0.) && !SCALAR_IS_NAN(x))
82
83 #else
84
85 /* These all work properly, according to the IEEE 754 standard ... except on */
86 /* a PC with windows. Works fine in Linux on the same PC... */
87 #define SCALAR_IS_NAN(x) ((x) != (x))
88 #define SCALAR_IS_ZERO(x) ((x) == 0.)
89 #define SCALAR_IS_NONZERO(x) ((x) != 0.)
90 #define SCALAR_IS_LTZERO(x) ((x) < 0.)
91
92 #endif
93
94 /* scalar absolute value macro. If x is NaN, the result is NaN: */
95 #define SCALAR_ABS(x) ((SCALAR_IS_LTZERO (x)) ? -(x) : (x))
96
97 /* true if an integer (stored in double x) would overflow (or if x is NaN) */
98 #define INT_OVERFLOW(x) ((!((x) * (1.0+1e-8) <= (double) Int_MAX)) \
99 || SCALAR_IS_NAN (x))
100
101 /* print a scalar (avoid printing "-0" for negative zero). */
102 #define PRINT_SCALAR(a) \
103 { \
104 if (SCALAR_IS_NONZERO (a)) \
105 { \
106 PRINTF ((" (%g)", (a))) ; \
107 } \
108 else \
109 { \
110 PRINTF ((" (0)")) ; \
111 } \
112 }
113
114 /* -------------------------------------------------------------------------- */
115 /* Real floating-point arithmetic */
116 /* -------------------------------------------------------------------------- */
117
118 #ifndef COMPLEX
119
120 #define Entry double
121
122 #define SPLIT(s) (1)
123 #define REAL_COMPONENT(c) (c)
124 #define IMAG_COMPONENT(c) (0.)
125 #define ASSIGN(c,s1,s2,p,split) { (c) = (s1)[p] ; }
126 #define CLEAR(c) { (c) = 0. ; }
127 #define CLEAR_AND_INCREMENT(p) { *p++ = 0. ; }
128 #define IS_NAN(a) SCALAR_IS_NAN (a)
129 #define IS_ZERO(a) SCALAR_IS_ZERO (a)
130 #define IS_NONZERO(a) SCALAR_IS_NONZERO (a)
131 #define SCALE_DIV(c,s) { (c) /= (s) ; }
132 #define SCALE(c,s) { (c) *= (s) ; }
133 #define ASSEMBLE(c,a) { (c) += (a) ; }
134 #define ASSEMBLE_AND_INCREMENT(c,p) { (c) += *p++ ; }
135 #define DECREMENT(c,a) { (c) -= (a) ; }
136 #define MULT(c,a,b) { (c) = (a) * (b) ; }
137 #define MULT_CONJ(c,a,b) { (c) = (a) * (b) ; }
138 #define MULT_SUB(c,a,b) { (c) -= (a) * (b) ; }
139 #define MULT_SUB_CONJ(c,a,b) { (c) -= (a) * (b) ; }
140 #define DIV(c,a,b) { (c) = (a) / (b) ; }
141 #define RECIPROCAL(c) { (c) = 1.0 / (c) ; }
142 #define DIV_CONJ(c,a,b) { (c) = (a) / (b) ; }
143 #define APPROX_ABS(s,a) { (s) = SCALAR_ABS (a) ; }
144 #define ABS(s,a) { (s) = SCALAR_ABS (a) ; }
145 #define PRINT_ENTRY(a) PRINT_SCALAR (a)
146
147 /* for flop counts */
148 #define MULTSUB_FLOPS 2. /* c -= a*b */
149 #define DIV_FLOPS 1. /* c = a/b */
150 #define ABS_FLOPS 0. /* c = abs (a) */
151 #define ASSEMBLE_FLOPS 1. /* c += a */
152 #define DECREMENT_FLOPS 1. /* c -= a */
153 #define MULT_FLOPS 1. /* c = a*b */
154 #define SCALE_FLOPS 1. /* c = a/s */
155
156 #else
157
158 /* -------------------------------------------------------------------------- */
159 /* Complex floating-point arithmetic */
160 /* -------------------------------------------------------------------------- */
161
162 /*
163 Note: An alternative to this DoubleComplex type would be to use a
164 struct { double r ; double i ; }. The problem with that method
165 (used by the Sun Performance Library, for example) is that ANSI C provides
166 no guarantee about the layout of a struct. It is possible that the sizeof
167 the struct above would be greater than 2 * sizeof (double). This would
168 mean that the complex BLAS could not be used. The method used here avoids
169 that possibility. ANSI C *does* guarantee that an array of structs has
170 the same size as n times the size of one struct.
171
172 The ANSI C99 version of the C language includes a "double _Complex" type.
173 It should be possible in that case to do the following:
174
175 #define Entry double _Complex
176
177 and remove the DoubleComplex struct. The macros, below, could then be
178 replaced with instrinsic operators. Note that the #define Real and
179 #define Imag should also be removed (they only appear in this file).
180
181 For the MULT, MULT_SUB, MULT_SUB_CONJ, and MULT_CONJ macros,
182 the output argument c cannot be the same as any input argument.
183
184 */
185
186 typedef struct
187 {
188 double component [2] ; /* real and imaginary parts */
189
190 } DoubleComplex ;
191
192 #define Entry DoubleComplex
193 #define Real component [0]
194 #define Imag component [1]
195
196 /* for flop counts */
197 #define MULTSUB_FLOPS 8. /* c -= a*b */
198 #define DIV_FLOPS 9. /* c = a/b */
199 #define ABS_FLOPS 6. /* c = abs (a), count sqrt as one flop */
200 #define ASSEMBLE_FLOPS 2. /* c += a */
201 #define DECREMENT_FLOPS 2. /* c -= a */
202 #define MULT_FLOPS 6. /* c = a*b */
203 #define SCALE_FLOPS 2. /* c = a/s or c = a*s */
204
205 /* -------------------------------------------------------------------------- */
206
207 /* real part of c */
208 #define REAL_COMPONENT(c) ((c).Real)
209
210 /* -------------------------------------------------------------------------- */
211
212 /* imag part of c */
213 #define IMAG_COMPONENT(c) ((c).Imag)
214
215 /* -------------------------------------------------------------------------- */
216
217 /* Return TRUE if a complex number is in split form, FALSE if in packed form */
218 #define SPLIT(sz) ((sz) != (double *) NULL)
219
220 /* -------------------------------------------------------------------------- */
221
222 /* c = (s1) + (s2)*i, if s2 is null, then X is in "packed" format (compatible
223 * with Entry and ANSI C99 double _Complex type). */
224 #define ASSIGN(c,s1,s2,p,split) \
225 { \
226 if (split) \
227 { \
228 (c).Real = (s1)[p] ; \
229 (c).Imag = (s2)[p] ; \
230 } \
231 else \
232 { \
233 (c) = ((Entry *)(s1))[p] ; \
234 } \
235 }
236
237 /* -------------------------------------------------------------------------- */
238
239 /* c = 0 */
240 #define CLEAR(c) \
241 { \
242 (c).Real = 0. ; \
243 (c).Imag = 0. ; \
244 }
245
246 /* -------------------------------------------------------------------------- */
247
248 /* *p++ = 0 */
249 #define CLEAR_AND_INCREMENT(p) \
250 { \
251 p->Real = 0. ; \
252 p->Imag = 0. ; \
253 p++ ; \
254 }
255
256 /* -------------------------------------------------------------------------- */
257
258 /* True if a == 0 */
259 #define IS_ZERO(a) \
260 (SCALAR_IS_ZERO ((a).Real) && SCALAR_IS_ZERO ((a).Imag))
261
262 /* -------------------------------------------------------------------------- */
263
264 /* True if a is NaN */
265 #define IS_NAN(a) \
266 (SCALAR_IS_NAN ((a).Real) || SCALAR_IS_NAN ((a).Imag))
267
268 /* -------------------------------------------------------------------------- */
269
270 /* True if a != 0 */
271 #define IS_NONZERO(a) \
272 (SCALAR_IS_NONZERO ((a).Real) || SCALAR_IS_NONZERO ((a).Imag))
273
274 /* -------------------------------------------------------------------------- */
275
276 /* c /= s */
277 #define SCALE_DIV(c,s) \
278 { \
279 (c).Real /= (s) ; \
280 (c).Imag /= (s) ; \
281 }
282
283 /* -------------------------------------------------------------------------- */
284
285 /* c *= s */
286 #define SCALE(c,s) \
287 { \
288 (c).Real *= (s) ; \
289 (c).Imag *= (s) ; \
290 }
291
292 /* -------------------------------------------------------------------------- */
293
294 /* c += a */
295 #define ASSEMBLE(c,a) \
296 { \
297 (c).Real += (a).Real ; \
298 (c).Imag += (a).Imag ; \
299 }
300
301 /* -------------------------------------------------------------------------- */
302
303 /* c += *p++ */
304 #define ASSEMBLE_AND_INCREMENT(c,p) \
305 { \
306 (c).Real += p->Real ; \
307 (c).Imag += p->Imag ; \
308 p++ ; \
309 }
310
311 /* -------------------------------------------------------------------------- */
312
313 /* c -= a */
314 #define DECREMENT(c,a) \
315 { \
316 (c).Real -= (a).Real ; \
317 (c).Imag -= (a).Imag ; \
318 }
319
320 /* -------------------------------------------------------------------------- */
321
322 /* c = a*b, assert because c cannot be the same as a or b */
323 #define MULT(c,a,b) \
324 { \
325 ASSERT (&(c) != &(a) && &(c) != &(b)) ; \
326 (c).Real = (a).Real * (b).Real - (a).Imag * (b).Imag ; \
327 (c).Imag = (a).Imag * (b).Real + (a).Real * (b).Imag ; \
328 }
329
330 /* -------------------------------------------------------------------------- */
331
332 /* c = a*conjugate(b), assert because c cannot be the same as a or b */
333 #define MULT_CONJ(c,a,b) \
334 { \
335 ASSERT (&(c) != &(a) && &(c) != &(b)) ; \
336 (c).Real = (a).Real * (b).Real + (a).Imag * (b).Imag ; \
337 (c).Imag = (a).Imag * (b).Real - (a).Real * (b).Imag ; \
338 }
339
340 /* -------------------------------------------------------------------------- */
341
342 /* c -= a*b, assert because c cannot be the same as a or b */
343 #define MULT_SUB(c,a,b) \
344 { \
345 ASSERT (&(c) != &(a) && &(c) != &(b)) ; \
346 (c).Real -= (a).Real * (b).Real - (a).Imag * (b).Imag ; \
347 (c).Imag -= (a).Imag * (b).Real + (a).Real * (b).Imag ; \
348 }
349
350 /* -------------------------------------------------------------------------- */
351
352 /* c -= a*conjugate(b), assert because c cannot be the same as a or b */
353 #define MULT_SUB_CONJ(c,a,b) \
354 { \
355 ASSERT (&(c) != &(a) && &(c) != &(b)) ; \
356 (c).Real -= (a).Real * (b).Real + (a).Imag * (b).Imag ; \
357 (c).Imag -= (a).Imag * (b).Real - (a).Real * (b).Imag ; \
358 }
359
360 /* -------------------------------------------------------------------------- */
361
362 /* c = a/b, be careful to avoid underflow and overflow */
363 #ifdef MATHWORKS
364 #define DIV(c,a,b) \
365 { \
366 (void) utDivideComplex ((a).Real, (a).Imag, (b).Real, (b).Imag, \
367 &((c).Real), &((c).Imag)) ; \
368 }
369 #else
370 /* This uses ACM Algo 116, by R. L. Smith, 1962. */
371 /* c can be the same variable as a or b. */
372 /* Ignore NaN case for double relop br>=bi. */
373 #define DIV(c,a,b) \
374 { \
375 double r, den, ar, ai, br, bi ; \
376 br = (b).Real ; \
377 bi = (b).Imag ; \
378 ar = (a).Real ; \
379 ai = (a).Imag ; \
380 if (SCALAR_ABS (br) >= SCALAR_ABS (bi)) \
381 { \
382 r = bi / br ; \
383 den = br + r * bi ; \
384 (c).Real = (ar + ai * r) / den ; \
385 (c).Imag = (ai - ar * r) / den ; \
386 } \
387 else \
388 { \
389 r = br / bi ; \
390 den = r * br + bi ; \
391 (c).Real = (ar * r + ai) / den ; \
392 (c).Imag = (ai * r - ar) / den ; \
393 } \
394 }
395 #endif
396
397 /* -------------------------------------------------------------------------- */
398
399 /* c = 1/c, be careful to avoid underflow and overflow */
400 /* Not used if MATHWORKS is defined. */
401 /* This uses ACM Algo 116, by R. L. Smith, 1962. */
402 /* Ignore NaN case for double relop cr>=ci. */
403 #define RECIPROCAL(c) \
404 { \
405 double r, den, cr, ci ; \
406 cr = (c).Real ; \
407 ci = (c).Imag ; \
408 if (SCALAR_ABS (cr) >= SCALAR_ABS (ci)) \
409 { \
410 r = ci / cr ; \
411 den = cr + r * ci ; \
412 (c).Real = 1.0 / den ; \
413 (c).Imag = - r / den ; \
414 } \
415 else \
416 { \
417 r = cr / ci ; \
418 den = r * cr + ci ; \
419 (c).Real = r / den ; \
420 (c).Imag = - 1.0 / den ; \
421 } \
422 }
423
424
425 /* -------------------------------------------------------------------------- */
426
427 /* c = a/conjugate(b), be careful to avoid underflow and overflow */
428 #ifdef MATHWORKS
429 #define DIV_CONJ(c,a,b) \
430 { \
431 (void) utDivideComplex ((a).Real, (a).Imag, (b).Real, (-(b).Imag), \
432 &((c).Real), &((c).Imag)) ; \
433 }
434 #else
435 /* This uses ACM Algo 116, by R. L. Smith, 1962. */
436 /* c can be the same variable as a or b. */
437 /* Ignore NaN case for double relop br>=bi. */
438 #define DIV_CONJ(c,a,b) \
439 { \
440 double r, den, ar, ai, br, bi ; \
441 br = (b).Real ; \
442 bi = (b).Imag ; \
443 ar = (a).Real ; \
444 ai = (a).Imag ; \
445 if (SCALAR_ABS (br) >= SCALAR_ABS (bi)) \
446 { \
447 r = (-bi) / br ; \
448 den = br - r * bi ; \
449 (c).Real = (ar + ai * r) / den ; \
450 (c).Imag = (ai - ar * r) / den ; \
451 } \
452 else \
453 { \
454 r = br / (-bi) ; \
455 den = r * br - bi; \
456 (c).Real = (ar * r + ai) / den ; \
457 (c).Imag = (ai * r - ar) / den ; \
458 } \
459 }
460 #endif
461
462 /* -------------------------------------------------------------------------- */
463
464 /* approximate absolute value, s = |r|+|i| */
465 #define APPROX_ABS(s,a) \
466 { \
467 (s) = SCALAR_ABS ((a).Real) + SCALAR_ABS ((a).Imag) ; \
468 }
469
470 /* -------------------------------------------------------------------------- */
471
472 /* exact absolute value, s = sqrt (a.real^2 + amag^2) */
473 #ifdef MATHWORKS
474 #define ABS(s,a) \
475 { \
476 (s) = utFdlibm_hypot ((a).Real, (a).Imag) ; \
477 }
478 #else
479 /* Ignore NaN case for the double relops ar>=ai and ar+ai==ar. */
480 #define ABS(s,a) \
481 { \
482 double r, ar, ai ; \
483 ar = SCALAR_ABS ((a).Real) ; \
484 ai = SCALAR_ABS ((a).Imag) ; \
485 if (ar >= ai) \
486 { \
487 if (ar + ai == ar) \
488 { \
489 (s) = ar ; \
490 } \
491 else \
492 { \
493 r = ai / ar ; \
494 (s) = ar * sqrt (1.0 + r*r) ; \
495 } \
496 } \
497 else \
498 { \
499 if (ai + ar == ai) \
500 { \
501 (s) = ai ; \
502 } \
503 else \
504 { \
505 r = ar / ai ; \
506 (s) = ai * sqrt (1.0 + r*r) ; \
507 } \
508 } \
509 }
510 #endif
511
512 /* -------------------------------------------------------------------------- */
513
514 /* print an entry (avoid printing "-0" for negative zero). */
515 #define PRINT_ENTRY(a) \
516 { \
517 if (SCALAR_IS_NONZERO ((a).Real)) \
518 { \
519 PRINTF ((" (%g", (a).Real)) ; \
520 } \
521 else \
522 { \
523 PRINTF ((" (0")) ; \
524 } \
525 if (SCALAR_IS_LTZERO ((a).Imag)) \
526 { \
527 PRINTF ((" - %gi)", -(a).Imag)) ; \
528 } \
529 else if (SCALAR_IS_ZERO ((a).Imag)) \
530 { \
531 PRINTF ((" + 0i)")) ; \
532 } \
533 else \
534 { \
535 PRINTF ((" + %gi)", (a).Imag)) ; \
536 } \
537 }
538
539 /* -------------------------------------------------------------------------- */
540
541 #endif /* #ifndef COMPLEX */
542
543 /* -------------------------------------------------------------------------- */
544 /* Double precision, with int's as integers */
545 /* -------------------------------------------------------------------------- */
546
547 #ifdef DINT
548
549 #define UMF_analyze umf_i_analyze
550 #define UMF_apply_order umf_i_apply_order
551 #define UMF_assemble umfdi_assemble
552 #define UMF_assemble_fixq umfdi_assemble_fixq
553 #define UMF_blas3_update umfdi_blas3_update
554 #define UMF_build_tuples umfdi_build_tuples
555 #define UMF_build_tuples_usage umfdi_build_tuples_usage
556 #define UMF_colamd umf_i_colamd
557 #define UMF_colamd_set_defaults umf_i_colamd_set_defaults
558 #define UMF_create_element umfdi_create_element
559 #define UMF_extend_front umfdi_extend_front
560 #define UMF_free umf_i_free
561 #define UMF_fsize umf_i_fsize
562 #define UMF_garbage_collection umfdi_garbage_collection
563 #define UMF_get_memory umfdi_get_memory
564 #define UMF_grow_front umfdi_grow_front
565 #define UMF_init_front umfdi_init_front
566 #define UMF_is_permutation umf_i_is_permutation
567 #define UMF_kernel umfdi_kernel
568 #define UMF_kernel_init umfdi_kernel_init
569 #define UMF_kernel_init_usage umfdi_kernel_init_usage
570 #define UMF_kernel_wrapup umfdi_kernel_wrapup
571 #define UMF_local_search umfdi_local_search
572 #define UMF_lsolve umfdi_lsolve
573 #define UMF_ltsolve umfdi_ltsolve
574 #define UMF_lhsolve umfdi_lhsolve
575 #define UMF_malloc umf_i_malloc
576 #define UMF_mem_alloc_element umfdi_mem_alloc_element
577 #define UMF_mem_alloc_head_block umfdi_mem_alloc_head_block
578 #define UMF_mem_alloc_tail_block umfdi_mem_alloc_tail_block
579 #define UMF_mem_free_tail_block umfdi_mem_free_tail_block
580 #define UMF_mem_init_memoryspace umfdi_mem_init_memoryspace
581 #define UMF_realloc umf_i_realloc
582 #define UMF_report_perm umf_i_report_perm
583 #define UMF_report_vector umfdi_report_vector
584 #define UMF_row_search umfdi_row_search
585 #define UMF_scale umfdi_scale
586 #define UMF_scale_column umfdi_scale_column
587 #define UMF_set_stats umf_i_set_stats
588 #define UMF_singletons umf_i_singletons
589 #define UMF_solve umfdi_solve
590 #define UMF_start_front umfdi_start_front
591 #define UMF_store_lu umfdi_store_lu
592 #define UMF_store_lu_drop umfdi_store_lu_drop
593 #define UMF_symbolic_usage umfdi_symbolic_usage
594 #define UMF_transpose umfdi_transpose
595 #define UMF_tuple_lengths umfdi_tuple_lengths
596 #define UMF_usolve umfdi_usolve
597 #define UMF_utsolve umfdi_utsolve
598 #define UMF_uhsolve umfdi_uhsolve
599 #define UMF_valid_numeric umfdi_valid_numeric
600 #define UMF_valid_symbolic umfdi_valid_symbolic
601 #define UMF_triplet_map_x umfdi_triplet_map_x
602 #define UMF_triplet_map_nox umfdi_triplet_map_nox
603 #define UMF_triplet_nomap_x umfdi_triplet_nomap_x
604 #define UMF_triplet_nomap_nox umfdi_triplet_nomap_nox
605 #define UMF_2by2 umfdi_2by2
606
607 #define UMFPACK_col_to_triplet umfpack_di_col_to_triplet
608 #define UMFPACK_defaults umfpack_di_defaults
609 #define UMFPACK_free_numeric umfpack_di_free_numeric
610 #define UMFPACK_free_symbolic umfpack_di_free_symbolic
611 #define UMFPACK_get_lunz umfpack_di_get_lunz
612 #define UMFPACK_get_numeric umfpack_di_get_numeric
613 #define UMFPACK_get_symbolic umfpack_di_get_symbolic
614 #define UMFPACK_get_determinant umfpack_di_get_determinant
615 #define UMFPACK_numeric umfpack_di_numeric
616 #define UMFPACK_qsymbolic umfpack_di_qsymbolic
617 #define UMFPACK_report_control umfpack_di_report_control
618 #define UMFPACK_report_info umfpack_di_report_info
619 #define UMFPACK_report_matrix umfpack_di_report_matrix
620 #define UMFPACK_report_numeric umfpack_di_report_numeric
621 #define UMFPACK_report_perm umfpack_di_report_perm
622 #define UMFPACK_report_status umfpack_di_report_status
623 #define UMFPACK_report_symbolic umfpack_di_report_symbolic
624 #define UMFPACK_report_triplet umfpack_di_report_triplet
625 #define UMFPACK_report_vector umfpack_di_report_vector
626 #define UMFPACK_save_numeric umfpack_di_save_numeric
627 #define UMFPACK_save_symbolic umfpack_di_save_symbolic
628 #define UMFPACK_load_numeric umfpack_di_load_numeric
629 #define UMFPACK_load_symbolic umfpack_di_load_symbolic
630 #define UMFPACK_scale umfpack_di_scale
631 #define UMFPACK_solve umfpack_di_solve
632 #define UMFPACK_symbolic umfpack_di_symbolic
633 #define UMFPACK_transpose umfpack_di_transpose
634 #define UMFPACK_triplet_to_col umfpack_di_triplet_to_col
635 #define UMFPACK_wsolve umfpack_di_wsolve
636
637 /* for debugging only: */
638 #define UMF_malloc_count umf_i_malloc_count
639 #define UMF_debug umfdi_debug
640 #define UMF_allocfail umfdi_allocfail
641 #define UMF_gprob umfdi_gprob
642 #define UMF_dump_dense umfdi_dump_dense
643 #define UMF_dump_element umfdi_dump_element
644 #define UMF_dump_rowcol umfdi_dump_rowcol
645 #define UMF_dump_matrix umfdi_dump_matrix
646 #define UMF_dump_current_front umfdi_dump_current_front
647 #define UMF_dump_lu umfdi_dump_lu
648 #define UMF_dump_memory umfdi_dump_memory
649 #define UMF_dump_packed_memory umfdi_dump_packed_memory
650 #define UMF_dump_col_matrix umfdi_dump_col_matrix
651 #define UMF_dump_chain umfdi_dump_chain
652 #define UMF_dump_start umfdi_dump_start
653 #define UMF_dump_rowmerge umfdi_dump_rowmerge
654 #define UMF_dump_diagonal_map umfdi_dump_diagonal_map
655
656 #endif
657
658 /* -------------------------------------------------------------------------- */
659 /* Double precision, with long's as integers */
660 /* -------------------------------------------------------------------------- */
661
662 #ifdef DLONG
663
664 #define UMF_analyze umf_l_analyze
665 #define UMF_apply_order umf_l_apply_order
666 #define UMF_assemble umfdl_assemble
667 #define UMF_assemble_fixq umfdl_assemble_fixq
668 #define UMF_blas3_update umfdl_blas3_update
669 #define UMF_build_tuples umfdl_build_tuples
670 #define UMF_build_tuples_usage umfdl_build_tuples_usage
671 #define UMF_colamd umf_l_colamd
672 #define UMF_colamd_set_defaults umf_l_colamd_set_defaults
673 #define UMF_create_element umfdl_create_element
674 #define UMF_extend_front umfdl_extend_front
675 #define UMF_free umf_l_free
676 #define UMF_fsize umf_l_fsize
677 #define UMF_garbage_collection umfdl_garbage_collection
678 #define UMF_get_memory umfdl_get_memory
679 #define UMF_grow_front umfdl_grow_front
680 #define UMF_init_front umfdl_init_front
681 #define UMF_is_permutation umf_l_is_permutation
682 #define UMF_kernel umfdl_kernel
683 #define UMF_kernel_init umfdl_kernel_init
684 #define UMF_kernel_init_usage umfdl_kernel_init_usage
685 #define UMF_kernel_wrapup umfdl_kernel_wrapup
686 #define UMF_local_search umfdl_local_search
687 #define UMF_lsolve umfdl_lsolve
688 #define UMF_ltsolve umfdl_ltsolve
689 #define UMF_lhsolve umfdl_lhsolve
690 #define UMF_malloc umf_l_malloc
691 #define UMF_mem_alloc_element umfdl_mem_alloc_element
692 #define UMF_mem_alloc_head_block umfdl_mem_alloc_head_block
693 #define UMF_mem_alloc_tail_block umfdl_mem_alloc_tail_block
694 #define UMF_mem_free_tail_block umfdl_mem_free_tail_block
695 #define UMF_mem_init_memoryspace umfdl_mem_init_memoryspace
696 #define UMF_realloc umf_l_realloc
697 #define UMF_report_perm umf_l_report_perm
698 #define UMF_report_vector umfdl_report_vector
699 #define UMF_row_search umfdl_row_search
700 #define UMF_scale umfdl_scale
701 #define UMF_scale_column umfdl_scale_column
702 #define UMF_set_stats umf_l_set_stats
703 #define UMF_singletons umf_l_singletons
704 #define UMF_solve umfdl_solve
705 #define UMF_start_front umfdl_start_front
706 #define UMF_store_lu umfdl_store_lu
707 #define UMF_store_lu_drop umfdl_store_lu_drop
708 #define UMF_symbolic_usage umfdl_symbolic_usage
709 #define UMF_transpose umfdl_transpose
710 #define UMF_tuple_lengths umfdl_tuple_lengths
711 #define UMF_usolve umfdl_usolve
712 #define UMF_utsolve umfdl_utsolve
713 #define UMF_uhsolve umfdl_uhsolve
714 #define UMF_valid_numeric umfdl_valid_numeric
715 #define UMF_valid_symbolic umfdl_valid_symbolic
716 #define UMF_triplet_map_x umfdl_triplet_map_x
717 #define UMF_triplet_map_nox umfdl_triplet_map_nox
718 #define UMF_triplet_nomap_x umfdl_triplet_nomap_x
719 #define UMF_triplet_nomap_nox umfdl_triplet_nomap_nox
720 #define UMF_2by2 umfdl_2by2
721
722 #define UMFPACK_col_to_triplet umfpack_dl_col_to_triplet
723 #define UMFPACK_defaults umfpack_dl_defaults
724 #define UMFPACK_free_numeric umfpack_dl_free_numeric
725 #define UMFPACK_free_symbolic umfpack_dl_free_symbolic
726 #define UMFPACK_get_lunz umfpack_dl_get_lunz
727 #define UMFPACK_get_numeric umfpack_dl_get_numeric
728 #define UMFPACK_get_symbolic umfpack_dl_get_symbolic
729 #define UMFPACK_get_determinant umfpack_dl_get_determinant
730 #define UMFPACK_numeric umfpack_dl_numeric
731 #define UMFPACK_qsymbolic umfpack_dl_qsymbolic
732 #define UMFPACK_report_control umfpack_dl_report_control
733 #define UMFPACK_report_info umfpack_dl_report_info
734 #define UMFPACK_report_matrix umfpack_dl_report_matrix
735 #define UMFPACK_report_numeric umfpack_dl_report_numeric
736 #define UMFPACK_report_perm umfpack_dl_report_perm
737 #define UMFPACK_report_status umfpack_dl_report_status
738 #define UMFPACK_report_symbolic umfpack_dl_report_symbolic
739 #define UMFPACK_report_triplet umfpack_dl_report_triplet
740 #define UMFPACK_report_vector umfpack_dl_report_vector
741 #define UMFPACK_save_numeric umfpack_dl_save_numeric
742 #define UMFPACK_save_symbolic umfpack_dl_save_symbolic
743 #define UMFPACK_load_numeric umfpack_dl_load_numeric
744 #define UMFPACK_load_symbolic umfpack_dl_load_symbolic
745 #define UMFPACK_scale umfpack_dl_scale
746 #define UMFPACK_solve umfpack_dl_solve
747 #define UMFPACK_symbolic umfpack_dl_symbolic
748 #define UMFPACK_transpose umfpack_dl_transpose
749 #define UMFPACK_triplet_to_col umfpack_dl_triplet_to_col
750 #define UMFPACK_wsolve umfpack_dl_wsolve
751
752 /* for debugging only: */
753 #define UMF_malloc_count umf_l_malloc_count
754 #define UMF_debug umfdl_debug
755 #define UMF_allocfail umfdl_allocfail
756 #define UMF_gprob umfdl_gprob
757 #define UMF_dump_dense umfdl_dump_dense
758 #define UMF_dump_element umfdl_dump_element
759 #define UMF_dump_rowcol umfdl_dump_rowcol
760 #define UMF_dump_matrix umfdl_dump_matrix
761 #define UMF_dump_current_front umfdl_dump_current_front
762 #define UMF_dump_lu umfdl_dump_lu
763 #define UMF_dump_memory umfdl_dump_memory
764 #define UMF_dump_packed_memory umfdl_dump_packed_memory
765 #define UMF_dump_col_matrix umfdl_dump_col_matrix
766 #define UMF_dump_chain umfdl_dump_chain
767 #define UMF_dump_start umfdl_dump_start
768 #define UMF_dump_rowmerge umfdl_dump_rowmerge
769 #define UMF_dump_diagonal_map umfdl_dump_diagonal_map
770
771 #endif
772
773 /* -------------------------------------------------------------------------- */
774 /* Complex double precision, with int's as integers */
775 /* -------------------------------------------------------------------------- */
776
777 #ifdef ZINT
778
779 #define UMF_analyze umf_i_analyze
780 #define UMF_apply_order umf_i_apply_order
781 #define UMF_assemble umfzi_assemble
782 #define UMF_assemble_fixq umfzi_assemble_fixq
783 #define UMF_blas3_update umfzi_blas3_update
784 #define UMF_build_tuples umfzi_build_tuples
785 #define UMF_build_tuples_usage umfzi_build_tuples_usage
786 #define UMF_colamd umf_i_colamd
787 #define UMF_colamd_set_defaults umf_i_colamd_set_defaults
788 #define UMF_create_element umfzi_create_element
789 #define UMF_extend_front umfzi_extend_front
790 #define UMF_free umf_i_free
791 #define UMF_fsize umf_i_fsize
792 #define UMF_garbage_collection umfzi_garbage_collection
793 #define UMF_get_memory umfzi_get_memory
794 #define UMF_grow_front umfzi_grow_front
795 #define UMF_init_front umfzi_init_front
796 #define UMF_is_permutation umf_i_is_permutation
797 #define UMF_kernel umfzi_kernel
798 #define UMF_kernel_init umfzi_kernel_init
799 #define UMF_kernel_init_usage umfzi_kernel_init_usage
800 #define UMF_kernel_wrapup umfzi_kernel_wrapup
801 #define UMF_local_search umfzi_local_search
802 #define UMF_lsolve umfzi_lsolve
803 #define UMF_ltsolve umfzi_ltsolve
804 #define UMF_lhsolve umfzi_lhsolve
805 #define UMF_malloc umf_i_malloc
806 #define UMF_mem_alloc_element umfzi_mem_alloc_element
807 #define UMF_mem_alloc_head_block umfzi_mem_alloc_head_block
808 #define UMF_mem_alloc_tail_block umfzi_mem_alloc_tail_block
809 #define UMF_mem_free_tail_block umfzi_mem_free_tail_block
810 #define UMF_mem_init_memoryspace umfzi_mem_init_memoryspace
811 #define UMF_realloc umf_i_realloc
812 #define UMF_report_perm umf_i_report_perm
813 #define UMF_report_vector umfzi_report_vector
814 #define UMF_row_search umfzi_row_search
815 #define UMF_scale umfzi_scale
816 #define UMF_scale_column umfzi_scale_column
817 #define UMF_set_stats umfzi_set_stats
818 #define UMF_singletons umf_i_singletons
819 #define UMF_solve umfzi_solve
820 #define UMF_start_front umfzi_start_front
821 #define UMF_store_lu umfzi_store_lu
822 #define UMF_store_lu_drop umfzi_store_lu_drop
823 #define UMF_symbolic_usage umfzi_symbolic_usage
824 #define UMF_transpose umfzi_transpose
825 #define UMF_tuple_lengths umfzi_tuple_lengths
826 #define UMF_usolve umfzi_usolve
827 #define UMF_utsolve umfzi_utsolve
828 #define UMF_uhsolve umfzi_uhsolve
829 #define UMF_valid_numeric umfzi_valid_numeric
830 #define UMF_valid_symbolic umfzi_valid_symbolic
831 #define UMF_triplet_map_x umfzi_triplet_map_x
832 #define UMF_triplet_map_nox umfzi_triplet_map_nox
833 #define UMF_triplet_nomap_x umfzi_triplet_nomap_x
834 #define UMF_triplet_nomap_nox umfzi_triplet_nomap_nox
835 #define UMF_2by2 umfzi_2by2
836
837 #define UMFPACK_col_to_triplet umfpack_zi_col_to_triplet
838 #define UMFPACK_defaults umfpack_zi_defaults
839 #define UMFPACK_free_numeric umfpack_zi_free_numeric
840 #define UMFPACK_free_symbolic umfpack_zi_free_symbolic
841 #define UMFPACK_get_lunz umfpack_zi_get_lunz
842 #define UMFPACK_get_numeric umfpack_zi_get_numeric
843 #define UMFPACK_get_symbolic umfpack_zi_get_symbolic
844 #define UMFPACK_get_determinant umfpack_zi_get_determinant
845 #define UMFPACK_numeric umfpack_zi_numeric
846 #define UMFPACK_qsymbolic umfpack_zi_qsymbolic
847 #define UMFPACK_report_control umfpack_zi_report_control
848 #define UMFPACK_report_info umfpack_zi_report_info
849 #define UMFPACK_report_matrix umfpack_zi_report_matrix
850 #define UMFPACK_report_numeric umfpack_zi_report_numeric
851 #define UMFPACK_report_perm umfpack_zi_report_perm
852 #define UMFPACK_report_status umfpack_zi_report_status
853 #define UMFPACK_report_symbolic umfpack_zi_report_symbolic
854 #define UMFPACK_report_triplet umfpack_zi_report_triplet
855 #define UMFPACK_report_vector umfpack_zi_report_vector
856 #define UMFPACK_save_numeric umfpack_zi_save_numeric
857 #define UMFPACK_save_symbolic umfpack_zi_save_symbolic
858 #define UMFPACK_load_numeric umfpack_zi_load_numeric
859 #define UMFPACK_load_symbolic umfpack_zi_load_symbolic
860 #define UMFPACK_scale umfpack_zi_scale
861 #define UMFPACK_solve umfpack_zi_solve
862 #define UMFPACK_symbolic umfpack_zi_symbolic
863 #define UMFPACK_transpose umfpack_zi_transpose
864 #define UMFPACK_triplet_to_col umfpack_zi_triplet_to_col
865 #define UMFPACK_wsolve umfpack_zi_wsolve
866
867 /* for debugging only: */
868 #define UMF_malloc_count umf_i_malloc_count
869 #define UMF_debug umfzi_debug
870 #define UMF_allocfail umfzi_allocfail
871 #define UMF_gprob umfzi_gprob
872 #define UMF_dump_dense umfzi_dump_dense
873 #define UMF_dump_element umfzi_dump_element
874 #define UMF_dump_rowcol umfzi_dump_rowcol
875 #define UMF_dump_matrix umfzi_dump_matrix
876 #define UMF_dump_current_front umfzi_dump_current_front
877 #define UMF_dump_lu umfzi_dump_lu
878 #define UMF_dump_memory umfzi_dump_memory
879 #define UMF_dump_packed_memory umfzi_dump_packed_memory
880 #define UMF_dump_col_matrix umfzi_dump_col_matrix
881 #define UMF_dump_chain umfzi_dump_chain
882 #define UMF_dump_start umfzi_dump_start
883 #define UMF_dump_rowmerge umfzi_dump_rowmerge
884 #define UMF_dump_diagonal_map umfzi_dump_diagonal_map
885
886 #endif
887
888 /* -------------------------------------------------------------------------- */
889 /* Complex double precision, with long's as integers */
890 /* -------------------------------------------------------------------------- */
891
892 #ifdef ZLONG
893
894 #define UMF_analyze umf_l_analyze
895 #define UMF_apply_order umf_l_apply_order
896 #define UMF_assemble umfzl_assemble
897 #define UMF_assemble_fixq umfzl_assemble_fixq
898 #define UMF_blas3_update umfzl_blas3_update
899 #define UMF_build_tuples umfzl_build_tuples
900 #define UMF_build_tuples_usage umfzl_build_tuples_usage
901 #define UMF_colamd umf_l_colamd
902 #define UMF_colamd_set_defaults umf_l_colamd_set_defaults
903 #define UMF_create_element umfzl_create_element
904 #define UMF_extend_front umfzl_extend_front
905 #define UMF_free umf_l_free
906 #define UMF_fsize umf_l_fsize
907 #define UMF_garbage_collection umfzl_garbage_collection
908 #define UMF_get_memory umfzl_get_memory
909 #define UMF_grow_front umfzl_grow_front
910 #define UMF_init_front umfzl_init_front
911 #define UMF_is_permutation umf_l_is_permutation
912 #define UMF_kernel umfzl_kernel
913 #define UMF_kernel_init umfzl_kernel_init
914 #define UMF_kernel_init_usage umfzl_kernel_init_usage
915 #define UMF_kernel_wrapup umfzl_kernel_wrapup
916 #define UMF_local_search umfzl_local_search
917 #define UMF_lsolve umfzl_lsolve
918 #define UMF_ltsolve umfzl_ltsolve
919 #define UMF_lhsolve umfzl_lhsolve
920 #define UMF_malloc umf_l_malloc
921 #define UMF_mem_alloc_element umfzl_mem_alloc_element
922 #define UMF_mem_alloc_head_block umfzl_mem_alloc_head_block
923 #define UMF_mem_alloc_tail_block umfzl_mem_alloc_tail_block
924 #define UMF_mem_free_tail_block umfzl_mem_free_tail_block
925 #define UMF_mem_init_memoryspace umfzl_mem_init_memoryspace
926 #define UMF_realloc umf_l_realloc
927 #define UMF_report_perm umf_l_report_perm
928 #define UMF_report_vector umfzl_report_vector
929 #define UMF_row_search umfzl_row_search
930 #define UMF_scale umfzl_scale
931 #define UMF_scale_column umfzl_scale_column
932 #define UMF_set_stats umfzl_set_stats
933 #define UMF_singletons umf_l_singletons
934 #define UMF_solve umfzl_solve
935 #define UMF_start_front umfzl_start_front
936 #define UMF_store_lu umfzl_store_lu
937 #define UMF_store_lu_drop umfzl_store_lu_drop
938 #define UMF_symbolic_usage umfzl_symbolic_usage
939 #define UMF_transpose umfzl_transpose
940 #define UMF_tuple_lengths umfzl_tuple_lengths
941 #define UMF_usolve umfzl_usolve
942 #define UMF_utsolve umfzl_utsolve
943 #define UMF_uhsolve umfzl_uhsolve
944 #define UMF_valid_numeric umfzl_valid_numeric
945 #define UMF_valid_symbolic umfzl_valid_symbolic
946 #define UMF_triplet_map_x umfzl_triplet_map_x
947 #define UMF_triplet_map_nox umfzl_triplet_map_nox
948 #define UMF_triplet_nomap_x umfzl_triplet_nomap_x
949 #define UMF_triplet_nomap_nox umfzl_triplet_nomap_nox
950 #define UMF_2by2 umfzl_2by2
951
952 #define UMFPACK_col_to_triplet umfpack_zl_col_to_triplet
953 #define UMFPACK_defaults umfpack_zl_defaults
954 #define UMFPACK_free_numeric umfpack_zl_free_numeric
955 #define UMFPACK_free_symbolic umfpack_zl_free_symbolic
956 #define UMFPACK_get_lunz umfpack_zl_get_lunz
957 #define UMFPACK_get_numeric umfpack_zl_get_numeric
958 #define UMFPACK_get_symbolic umfpack_zl_get_symbolic
959 #define UMFPACK_get_determinant umfpack_zl_get_determinant
960 #define UMFPACK_numeric umfpack_zl_numeric
961 #define UMFPACK_qsymbolic umfpack_zl_qsymbolic
962 #define UMFPACK_report_control umfpack_zl_report_control
963 #define UMFPACK_report_info umfpack_zl_report_info
964 #define UMFPACK_report_matrix umfpack_zl_report_matrix
965 #define UMFPACK_report_numeric umfpack_zl_report_numeric
966 #define UMFPACK_report_perm umfpack_zl_report_perm
967 #define UMFPACK_report_status umfpack_zl_report_status
968 #define UMFPACK_report_symbolic umfpack_zl_report_symbolic
969 #define UMFPACK_report_triplet umfpack_zl_report_triplet
970 #define UMFPACK_report_vector umfpack_zl_report_vector
971 #define UMFPACK_save_numeric umfpack_zl_save_numeric
972 #define UMFPACK_save_symbolic umfpack_zl_save_symbolic
973 #define UMFPACK_load_numeric umfpack_zl_load_numeric
974 #define UMFPACK_load_symbolic umfpack_zl_load_symbolic
975 #define UMFPACK_scale umfpack_zl_scale
976 #define UMFPACK_solve umfpack_zl_solve
977 #define UMFPACK_symbolic umfpack_zl_symbolic
978 #define UMFPACK_transpose umfpack_zl_transpose
979 #define UMFPACK_triplet_to_col umfpack_zl_triplet_to_col
980 #define UMFPACK_wsolve umfpack_zl_wsolve
981
982 /* for debugging only: */
983 #define UMF_malloc_count umf_l_malloc_count
984 #define UMF_debug umfzl_debug
985 #define UMF_allocfail umfzl_allocfail
986 #define UMF_gprob umfzl_gprob
987 #define UMF_dump_dense umfzl_dump_dense
988 #define UMF_dump_element umfzl_dump_element
989 #define UMF_dump_rowcol umfzl_dump_rowcol
990 #define UMF_dump_matrix umfzl_dump_matrix
991 #define UMF_dump_current_front umfzl_dump_current_front
992 #define UMF_dump_lu umfzl_dump_lu
993 #define UMF_dump_memory umfzl_dump_memory
994 #define UMF_dump_packed_memory umfzl_dump_packed_memory
995 #define UMF_dump_col_matrix umfzl_dump_col_matrix
996 #define UMF_dump_chain umfzl_dump_chain
997 #define UMF_dump_start umfzl_dump_start
998 #define UMF_dump_rowmerge umfzl_dump_rowmerge
999 #define UMF_dump_diagonal_map umfzl_dump_diagonal_map
1000
1001 #endif