82 Int *Perm, *ColCount ;
147 for (j = 0 ; j < ((
Int)
n) ; j++)
152 for (j = 0 ; j < ((
Int)
n) ; j++)
178 Int n, lnz, xs, ss, s ;
221 CHOLMOD(free) (xs,
sizeof (double), L->
x, Common) ;
225 CHOLMOD(free) (xs, 2*
sizeof (double), L->
x, Common) ;
229 CHOLMOD(free) (xs,
sizeof (double), L->
x, Common) ;
230 CHOLMOD(free) (xs,
sizeof (double), L->
z, Common) ;
265 PRINT1 ((
"realloc factor: xtype %d\n", L->xtype)) ;
273 PRINT1 ((
"realloc factor %g to %g\n", (
double) L->nzmax, (
double) nznew)) ;
280 &(L->x), &(L->z), &(L->nzmax), Common) ;
309 Int *Lp, *Lprev, *Lnext, *Li, *Lnz ;
310 Int n, pold, pnew, len, k, tail ;
325 if (j >= L->n || need == 0)
347 PRINT1 ((
"col %g need %g\n", (
double) j, (
double) need)) ;
350 need =
MIN (need, n-j) ;
353 if (Common->grow1 >= 1.0)
355 xneed = (double) need ;
356 xneed = Common->grow1 * xneed + Common->grow2 ;
357 xneed =
MIN (xneed, n-j) ;
360 PRINT1 ((
"really new need %g current %g\n", (
double) need,
361 (
double) (Lp [Lnext [j]] - Lp [j]))) ;
362 ASSERT (need >= 1 && need <= n-j) ;
364 if (Lp [Lnext [j]] - Lp [j] >= (
Int) need)
367 PRINT1 ((
"colrealloc: quick return %g %g\n",
368 (
double) (Lp [Lnext [j]] - Lp [j]), (
double) need)) ;
373 if (Lp [tail] + need > L->nzmax)
376 xneed = (double) need ;
377 if (Common->grow0 < 1.2)
380 xneed = 1.2 * (((double) L->nzmax) + xneed + 1) ;
384 xneed = Common->grow0 * (((double) L->nzmax) + xneed + 1) ;
395 PRINT1 ((
"\n=== GROW L from %g to %g\n",
396 (
double) L->nzmax, (
double) xneed)) ;
400 Common->nrealloc_factor++ ;
407 Common->nrealloc_col++ ;
414 Lnext [Lprev [j]] = Lnext [j] ;
415 Lprev [Lnext [j]] = Lprev [j] ;
418 Lnext [Lprev [tail]] = j ;
419 Lprev [j] = Lprev [tail] ;
424 L->is_monotonic =
FALSE ;
434 for (k = 0 ; k < len ; k++)
436 Li [pnew + k] = Li [pold + k] ;
441 for (k = 0 ; k < len ; k++)
443 Lx [pnew + k] = Lx [pold + k] ;
448 for (k = 0 ; k < len ; k++)
450 Lx [2*(pnew + k) ] = Lx [2*(pold + k) ] ;
451 Lx [2*(pnew + k)+1] = Lx [2*(pold + k)+1] ;
456 for (k = 0 ; k < len ; k++)
458 Lx [pnew + k] = Lx [pold + k] ;
459 Lz [pnew + k] = Lz [pold + k] ;
498 Int *Lp, *Li, *Lnz, *Lnext ;
499 Int pnew, j, k, pold, len,
n, head, tail, grow2 ;
522 grow2 = Common->grow2 ;
523 PRINT1 ((
"\nPACK grow2 "ID"\n", grow2)) ;
537 for (j = Lnext [head] ; j != tail ; j = Lnext [j])
543 PRINT2 ((
"col "ID" pnew "ID" pold "ID"\n", j, pnew, pold)) ;
546 PRINT2 ((
" pack this column\n")) ;
548 for (k = 0 ; k < len ; k++)
550 Li [pnew + k] = Li [pold + k] ;
555 for (k = 0 ; k < len ; k++)
557 Lx [pnew + k] = Lx [pold + k] ;
562 for (k = 0 ; k < len ; k++)
564 Lx [2*(pnew + k) ] = Lx [2*(pold + k) ] ;
565 Lx [2*(pnew + k)+1] = Lx [2*(pold + k)+1] ;
570 for (k = 0 ; k < len ; k++)
572 Lx [pnew + k] = Lx [pold + k] ;
573 Lz [pnew + k] = Lz [pold + k] ;
579 len =
MIN (len + grow2, n - j) ;
580 pnew =
MIN (Lp [j] + len, Lp [Lnext [j]]) ;
582 PRINT2 ((
"final pnew = "ID"\n", pnew)) ;
647 Lsparse->
nrow = L->
n ;
648 Lsparse->
ncol = L->
n ;
661 ASSERT (
CHOLMOD(dump_sparse) (Lsparse,
"Lsparse", Common) >= 0) ;
701 double *Lx, *L2x, *Lz, *L2z ;
702 Int *Perm, *ColCount, *Lp, *Li, *Lnz, *Lnext, *Lprev, *Lsuper, *Lpi, *Lpx,
703 *Ls, *Perm2, *ColCount2, *L2p, *L2i, *L2nz, *L2next, *L2prev, *L2super,
705 Int n, j, p, pend, s, xsize, ssize, nsuper ;
737 for (j = 0 ; j < n ; j++)
739 Perm2 [j] = Perm [j] ;
741 for (j = 0 ; j < n ; j++)
743 ColCount2 [j] = ColCount [j] ;
792 for (j = 0 ; j <= n ; j++)
797 for (j = 0 ; j < n+2 ; j++)
799 L2prev [j] = Lprev [j] ;
802 for (j = 0 ; j < n+2 ; j++)
804 L2next [j] = Lnext [j] ;
807 for (j = 0 ; j < n ; j++)
812 for (j = 0 ; j < n ; j++)
816 for ( ; p < pend ; p++)
824 for ( ; p < pend ; p++)
831 for ( ; p < pend ; p++)
833 L2x [2*p ] = Lx [2*p ] ;
834 L2x [2*p+1] = Lx [2*p+1] ;
839 for ( ; p < pend ; p++)
885 L2super = L2->
super ;
894 for (s = 0 ; s <= nsuper ; s++)
896 L2super [s] = Lsuper [s] ;
898 for (s = 0 ; s <= nsuper ; s++)
902 for (s = 0 ; s <= nsuper ; s++)
908 for (p = 0 ; p < ssize ; p++)
915 for (p = 0 ; p < xsize ; p++)
922 for (p = 0 ; p < 2*xsize ; p++)
int CHOLMOD() reallocate_column(size_t j, size_t need, cholmod_factor *L, cholmod_common *Common)
#define CHOLMOD_TOO_LARGE
int CHOLMOD() realloc_multiple(size_t nnew, int nint, int xtype, void **I, void **J, void **X, void **Z, size_t *nold_p, cholmod_common *Common)
size_t CHOLMOD() add_size_t(size_t a, size_t b, int *ok)
#define RETURN_IF_NULL_COMMON(result)
int CHOLMOD() pack_factor(cholmod_factor *L, cholmod_common *Common)
struct cholmod_factor_struct cholmod_factor
int CHOLMOD() reallocate_factor(size_t nznew, cholmod_factor *L, cholmod_common *Common)
cholmod_factor *CHOLMOD() copy_factor(cholmod_factor *L, cholmod_common *Common)
#define ASSERT(expression)
int CHOLMOD() free_factor(cholmod_factor **LHandle, cholmod_common *Common)
#define CHOLMOD_OUT_OF_MEMORY
struct cholmod_sparse_struct cholmod_sparse
#define RETURN_IF_NULL(A, result)
int CHOLMOD() change_factor(int to_xtype, int to_ll, int to_super, int to_packed, int to_monotonic, cholmod_factor *L, cholmod_common *Common)
int CHOLMOD() dump_factor(cholmod_factor *L, char *name, cholmod_common *Common)
cholmod_sparse *CHOLMOD() factor_to_sparse(cholmod_factor *L, cholmod_common *Common)
#define ERROR(status, msg)
#define RETURN_IF_XTYPE_INVALID(A, xtype1, xtype2, result)
cholmod_factor *CHOLMOD() allocate_factor(size_t n, cholmod_common *Common)