+diff -ur ../SuiteSparse.orig/CHOLMOD/Partition/cholmod_metis.c ./CHOLMOD/Partition/cholmod_metis.c
+--- ../SuiteSparse.orig/CHOLMOD/Partition/cholmod_metis.c 2007-05-04 11:47:17.000000000 -0500
++++ ./CHOLMOD/Partition/cholmod_metis.c 2011-10-21 18:21:54.000000000 -0500
+@@ -76,7 +76,7 @@
+ #ifdef DUMP_GRAPH
+ #include <stdio.h>
+ /* After dumping the graph with this routine, run "onmetis metisgraph" */
+-static void dumpgraph (idxtype *Mp, idxtype *Mi, UF_long n,
++static void dumpgraph (idx_t *Mp, idx_t *Mi, UF_long n,
+ cholmod_common *Common)
+ {
+ UF_long i, j, p, nz ;
+@@ -162,7 +162,7 @@
+ s = GUESS ((double) nz, (double) n) ;
+ s *= Common->metis_memory ;
+
+- if (s * sizeof (idxtype) >= ((double) Size_max))
++ if (s * sizeof (idx_t) >= ((double) Size_max))
+ {
+ /* don't even attempt to malloc such a large block */
+ return (FALSE) ;
+@@ -173,7 +173,7 @@
+ metis_guard *= Common->metis_memory ;
+
+ /* attempt to malloc the block */
+- p = CHOLMOD(malloc) (metis_guard, sizeof (idxtype), Common) ;
++ p = CHOLMOD(malloc) (metis_guard, sizeof (idx_t), Common) ;
+ if (p == NULL)
+ {
+ /* failure - return out-of-memory condition */
+@@ -181,7 +181,7 @@
+ }
+
+ /* success - free the block */
+- CHOLMOD(free) (metis_guard, sizeof (idxtype), p, Common) ;
++ CHOLMOD(free) (metis_guard, sizeof (idx_t), p, Common) ;
+ return (TRUE) ;
+ }
+
+@@ -211,7 +211,7 @@
+ )
+ {
+ Int *Ap, *Ai ;
+- idxtype *Mp, *Mi, *Mnw, *Mew, *Mpart ;
++ idx_t *Mp, *Mi, *Mnw, *Mew, *Mpart ;
+ Int n, nleft, nright, j, p, csep, total_weight, lightest, nz ;
+ int Opt [8], nn, csp ;
+ size_t n1 ;
+@@ -260,7 +260,7 @@
+ /* ---------------------------------------------------------------------- */
+
+ #ifdef LONG
+- if (sizeof (Int) > sizeof (idxtype) && MAX (n,nz) > INT_MAX / sizeof (int))
++ if (sizeof (Int) > sizeof (idx_t) && MAX (n,nz) > INT_MAX / sizeof (int))
+ {
+ /* CHOLMOD's matrix is too large for METIS */
+ return (EMPTY) ;
+@@ -283,34 +283,34 @@
+ DEBUG (for (j = 0 ; j < n ; j++) ASSERT (Anw [j] > 0)) ;
+
+ /* ---------------------------------------------------------------------- */
+- /* copy Int to METIS idxtype, if necessary */
++ /* copy Int to METIS idx_t, if necessary */
+ /* ---------------------------------------------------------------------- */
+
+ DEBUG (for (j = 0 ; j < nz ; j++) ASSERT (Aew [j] > 0)) ;
+- if (sizeof (Int) == sizeof (idxtype))
++ if (sizeof (Int) == sizeof (idx_t))
+ {
+ /* this is the typical case */
+- Mi = (idxtype *) Ai ;
+- Mew = (idxtype *) Aew ;
+- Mp = (idxtype *) Ap ;
+- Mnw = (idxtype *) Anw ;
+- Mpart = (idxtype *) Partition ;
++ Mi = (idx_t *) Ai ;
++ Mew = (idx_t *) Aew ;
++ Mp = (idx_t *) Ap ;
++ Mnw = (idx_t *) Anw ;
++ Mpart = (idx_t *) Partition ;
+ }
+ else
+ {
+- /* idxtype and Int differ; copy the graph into the METIS idxtype */
+- Mi = CHOLMOD(malloc) (nz, sizeof (idxtype), Common) ;
+- Mew = CHOLMOD(malloc) (nz, sizeof (idxtype), Common) ;
+- Mp = CHOLMOD(malloc) (n1, sizeof (idxtype), Common) ;
+- Mnw = CHOLMOD(malloc) (n, sizeof (idxtype), Common) ;
+- Mpart = CHOLMOD(malloc) (n, sizeof (idxtype), Common) ;
++ /* idx_t and Int differ; copy the graph into the METIS idx_t */
++ Mi = CHOLMOD(malloc) (nz, sizeof (idx_t), Common) ;
++ Mew = CHOLMOD(malloc) (nz, sizeof (idx_t), Common) ;
++ Mp = CHOLMOD(malloc) (n1, sizeof (idx_t), Common) ;
++ Mnw = CHOLMOD(malloc) (n, sizeof (idx_t), Common) ;
++ Mpart = CHOLMOD(malloc) (n, sizeof (idx_t), Common) ;
+ if (Common->status < CHOLMOD_OK)
+ {
+- CHOLMOD(free) (nz, sizeof (idxtype), Mi, Common) ;
+- CHOLMOD(free) (nz, sizeof (idxtype), Mew, Common) ;
+- CHOLMOD(free) (n1, sizeof (idxtype), Mp, Common) ;
+- CHOLMOD(free) (n, sizeof (idxtype), Mnw, Common) ;
+- CHOLMOD(free) (n, sizeof (idxtype), Mpart, Common) ;
++ CHOLMOD(free) (nz, sizeof (idx_t), Mi, Common) ;
++ CHOLMOD(free) (nz, sizeof (idx_t), Mew, Common) ;
++ CHOLMOD(free) (n1, sizeof (idx_t), Mp, Common) ;
++ CHOLMOD(free) (n, sizeof (idx_t), Mnw, Common) ;
++ CHOLMOD(free) (n, sizeof (idx_t), Mpart, Common) ;
+ return (EMPTY) ;
+ }
+ for (p = 0 ; p < nz ; p++)
+@@ -338,13 +338,13 @@
+ if (!metis_memory_ok (n, nz, Common))
+ {
+ /* METIS might ask for too much memory and thus terminate the program */
+- if (sizeof (Int) != sizeof (idxtype))
++ if (sizeof (Int) != sizeof (idx_t))
+ {
+- CHOLMOD(free) (nz, sizeof (idxtype), Mi, Common) ;
+- CHOLMOD(free) (nz, sizeof (idxtype), Mew, Common) ;
+- CHOLMOD(free) (n1, sizeof (idxtype), Mp, Common) ;
+- CHOLMOD(free) (n, sizeof (idxtype), Mnw, Common) ;
+- CHOLMOD(free) (n, sizeof (idxtype), Mpart, Common) ;
++ CHOLMOD(free) (nz, sizeof (idx_t), Mi, Common) ;
++ CHOLMOD(free) (nz, sizeof (idx_t), Mew, Common) ;
++ CHOLMOD(free) (n1, sizeof (idx_t), Mp, Common) ;
++ CHOLMOD(free) (n, sizeof (idx_t), Mnw, Common) ;
++ CHOLMOD(free) (n, sizeof (idx_t), Mpart, Common) ;
+ }
+ return (EMPTY) ;
+ }
+@@ -370,27 +370,27 @@
+ #endif
+
+ nn = n ;
+- METIS_NodeComputeSeparator (&nn, Mp, Mi, Mnw, Mew, Opt, &csp, Mpart) ;
++ METIS_ComputeVertexSeparator (&nn, Mp, Mi, Mnw, Opt, &csp, Mpart) ;
+ n = nn ;
+ csep = csp ;
+
+ PRINT1 (("METIS csep "ID"\n", csep)) ;
+
+ /* ---------------------------------------------------------------------- */
+- /* copy the results back from idxtype, if required */
++ /* copy the results back from idx_t, if required */
+ /* ---------------------------------------------------------------------- */
+
+- if (sizeof (Int) != sizeof (idxtype))
++ if (sizeof (Int) != sizeof (idx_t))
+ {
+ for (j = 0 ; j < n ; j++)
+ {
+ Partition [j] = Mpart [j] ;
+ }
+- CHOLMOD(free) (nz, sizeof (idxtype), Mi, Common) ;
+- CHOLMOD(free) (nz, sizeof (idxtype), Mew, Common) ;
+- CHOLMOD(free) (n1, sizeof (idxtype), Mp, Common) ;
+- CHOLMOD(free) (n, sizeof (idxtype), Mnw, Common) ;
+- CHOLMOD(free) (n, sizeof (idxtype), Mpart, Common) ;
++ CHOLMOD(free) (nz, sizeof (idx_t), Mi, Common) ;
++ CHOLMOD(free) (nz, sizeof (idx_t), Mew, Common) ;
++ CHOLMOD(free) (n1, sizeof (idx_t), Mp, Common) ;
++ CHOLMOD(free) (n, sizeof (idx_t), Mnw, Common) ;
++ CHOLMOD(free) (n, sizeof (idx_t), Mpart, Common) ;
+ }
+
+ /* ---------------------------------------------------------------------- */
+@@ -508,7 +508,7 @@
+ {
+ double d ;
+ Int *Iperm, *Iwork, *Bp, *Bi ;
+- idxtype *Mp, *Mi, *Mperm, *Miperm ;
++ idx_t *Mp, *Mi, *Mperm, *Miperm ;
+ cholmod_sparse *B ;
+ Int i, j, n, nz, p, identity, uncol ;
+ int Opt [8], nn, zero = 0 ;
+@@ -601,7 +601,7 @@
+ /* ---------------------------------------------------------------------- */
+
+ #ifdef LONG
+- if (sizeof (Int) > sizeof (idxtype) && MAX (n,nz) > INT_MAX / sizeof (int))
++ if (sizeof (Int) > sizeof (idx_t) && MAX (n,nz) > INT_MAX / sizeof (int))
+ {
+ /* CHOLMOD's matrix is too large for METIS */
+ CHOLMOD(free_sparse) (&B, Common) ;
+@@ -630,29 +630,29 @@
+ /* allocate the METIS input arrays, if needed */
+ /* ---------------------------------------------------------------------- */
+
+- if (sizeof (Int) == sizeof (idxtype))
++ if (sizeof (Int) == sizeof (idx_t))
+ {
+ /* This is the typical case. */
+- Miperm = (idxtype *) Iperm ;
+- Mperm = (idxtype *) Perm ;
+- Mp = (idxtype *) Bp ;
+- Mi = (idxtype *) Bi ;
++ Miperm = (idx_t *) Iperm ;
++ Mperm = (idx_t *) Perm ;
++ Mp = (idx_t *) Bp ;
++ Mi = (idx_t *) Bi ;
+ }
+ else
+ {
+- /* allocate graph for METIS only if Int and idxtype differ */
+- Miperm = CHOLMOD(malloc) (n, sizeof (idxtype), Common) ;
+- Mperm = CHOLMOD(malloc) (n, sizeof (idxtype), Common) ;
+- Mp = CHOLMOD(malloc) (n1, sizeof (idxtype), Common) ;
+- Mi = CHOLMOD(malloc) (nz, sizeof (idxtype), Common) ;
++ /* allocate graph for METIS only if Int and idx_t differ */
++ Miperm = CHOLMOD(malloc) (n, sizeof (idx_t), Common) ;
++ Mperm = CHOLMOD(malloc) (n, sizeof (idx_t), Common) ;
++ Mp = CHOLMOD(malloc) (n1, sizeof (idx_t), Common) ;
++ Mi = CHOLMOD(malloc) (nz, sizeof (idx_t), Common) ;
+ if (Common->status < CHOLMOD_OK)
+ {
+ /* out of memory */
+ CHOLMOD(free_sparse) (&B, Common) ;
+- CHOLMOD(free) (n, sizeof (idxtype), Miperm, Common) ;
+- CHOLMOD(free) (n, sizeof (idxtype), Mperm, Common) ;
+- CHOLMOD(free) (n1, sizeof (idxtype), Mp, Common) ;
+- CHOLMOD(free) (nz, sizeof (idxtype), Mi, Common) ;
++ CHOLMOD(free) (n, sizeof (idx_t), Miperm, Common) ;
++ CHOLMOD(free) (n, sizeof (idx_t), Mperm, Common) ;
++ CHOLMOD(free) (n1, sizeof (idx_t), Mp, Common) ;
++ CHOLMOD(free) (nz, sizeof (idx_t), Mi, Common) ;
+ return (FALSE) ;
+ }
+ for (j = 0 ; j <= n ; j++)
+@@ -741,16 +741,16 @@
+ /* free the METIS input arrays */
+ /* ---------------------------------------------------------------------- */
+
+- if (sizeof (Int) != sizeof (idxtype))
++ if (sizeof (Int) != sizeof (idx_t))
+ {
+ for (i = 0 ; i < n ; i++)
+ {
+ Perm [i] = (Int) (Mperm [i]) ;
+ }
+- CHOLMOD(free) (n, sizeof (idxtype), Miperm, Common) ;
+- CHOLMOD(free) (n, sizeof (idxtype), Mperm, Common) ;
+- CHOLMOD(free) (n+1, sizeof (idxtype), Mp, Common) ;
+- CHOLMOD(free) (nz, sizeof (idxtype), Mi, Common) ;
++ CHOLMOD(free) (n, sizeof (idx_t), Miperm, Common) ;
++ CHOLMOD(free) (n, sizeof (idx_t), Mperm, Common) ;
++ CHOLMOD(free) (n+1, sizeof (idx_t), Mp, Common) ;
++ CHOLMOD(free) (nz, sizeof (idx_t), Mi, Common) ;
+ }
+
+ CHOLMOD(free_sparse) (&B, Common) ;
+Only in .: metis.patch