Mercurial > hg > octave-nkf
diff m4/acinclude.m4 @ 16318:eb572251b7c6
check for correct SuiteSparse functions if --enable-64
* configure.ac (UMFPACK_TAG): New macro. Use it to check for
appropriate cholmod, cxsparse, and umfpack functions that depend on
index size.
* acinclude.m4 (OCTAVE_UMFPACK_SEPARATE_SPLIT): Use correct umfpack
names and integer sizes in test.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 15 Mar 2013 14:37:32 -0400 |
parents | 6aafe87a3144 |
children | e380d1317c72 |
line wrap: on
line diff
--- a/m4/acinclude.m4 +++ b/m4/acinclude.m4 @@ -1792,6 +1792,7 @@ AC_MSG_CHECKING([for UMFPACK separate complex matrix and rhs split]) AC_CACHE_VAL([octave_cv_umfpack_separate_split], [AC_RUN_IFELSE([AC_LANG_SOURCE([[ + #include <stdint.h> #include <stdlib.h> #include <math.h> #if defined (HAVE_SUITESPARSE_UMFPACK_H) @@ -1803,9 +1804,16 @@ #elif defined (HAVE_UMFPACK_H) # include <umfpack.h> #endif - int n = 5; - int Ap[] = {0, 2, 5, 9, 10, 12}; - int Ai[] = {0, 1, 0, 2, 4, 1, 2, 3, 4, 2, 1, 4}; + #ifdef USE_64_BIT_IDX_T + typedef uint64_t idx_type; + #define UMFPACK_NAME(name) umfpack_zl_ ## name + #else + typedef int idx_type; + #define UMFPACK_NAME(name) umfpack_zi_ ## name + #endif + idx_type n = 5; + idx_type Ap[] = {0, 2, 5, 9, 10, 12}; + idx_type Ai[] = {0, 1, 0, 2, 4, 1, 2, 3, 4, 2, 1, 4}; double Ax[] = {2., 0., 3., 0., 3., 0., -1., 0., 4., 0., 4., 0., -3., 0., 1., 0., 2., 0., 2., 0., 6., 0., 1., 0.}; double br[] = {8., 45., -3., 3., 19.}; @@ -1814,14 +1822,14 @@ { double *null = (double *) NULL ; double *x = (double *)malloc (2 * n * sizeof(double)); - int i ; + idx_type i ; void *Symbolic, *Numeric ; - (void) umfpack_zi_symbolic (n, n, Ap, Ai, Ax, null, &Symbolic, null, null) ; - (void) umfpack_zi_numeric (Ap, Ai, Ax, null, Symbolic, &Numeric, null, null) ; - umfpack_zi_free_symbolic (&Symbolic) ; - (void) umfpack_zi_solve (0, Ap, Ai, Ax, null, x, null, br, bi, + (void) UMFPACK_NAME (symbolic) (n, n, Ap, Ai, Ax, null, &Symbolic, null, null) ; + (void) UMFPACK_NAME (numeric) (Ap, Ai, Ax, null, Symbolic, &Numeric, null, null) ; + UMFPACK_NAME (free_symbolic) (&Symbolic) ; + (void) UMFPACK_NAME (solve) (0, Ap, Ai, Ax, null, x, null, br, bi, Numeric, null, null) ; - umfpack_zi_free_numeric (&Numeric) ; + UMFPACK_NAME (free_numeric) (&Numeric) ; for (i = 0; i < n; i++, x+=2) if (fabs (*x - i - 1.) > 1.e-13) return (1);