28 Int nz, i, j, p, pend ;
42 if (n <= 0 || Ap ==
NULL || Ai ==
NULL)
50 if (Ap [0] != 0 || nz < 0)
57 for (j = 0 ; j < n ; j++)
59 if (Ap [j] > Ap [j+1])
67 if (Common->status <
KLU_OK)
73 for (i = 0 ; i < n ; i++)
77 for (j = 0 ; j < n ; j++)
80 for (p = Ap [j] ; p < pend ; p++)
83 if (i < 0 || i >= n || P [i] == j)
100 if (Common->status <
KLU_OK)
110 Lnz =
KLU_malloc (n,
sizeof (
double), Common) ;
117 Symbolic->Lnz = Lnz ;
119 if (Common->status <
KLU_OK)
150 Int nblocks, nz, block, maxblock, *
P, *Q, *R, nzoff, p, pend, do_btf, k ;
157 if (Symbolic ==
NULL)
164 Lnz = Symbolic->Lnz ;
173 for (k = 0 ; k < n ; k++)
180 for (k = 0 ; k < n ; k++)
190 do_btf = Common->btf ;
192 Symbolic->ordering = 2 ;
193 Symbolic->do_btf = do_btf ;
206 Int *Pinv, *Work, *Bi, k1, k2, nk, oldcol ;
219 if (Common->status <
KLU_OK)
239 for (k = 0 ; k < n ; k++)
241 Pinv [Puser [k]] = k ;
243 for (p = 0 ; p < nz ; p++)
245 Bi [p] = Pinv [Ai [p]] ;
262 for (k = 0 ; k < n ; k++)
264 Work [k] = Puser [P [k]] ;
266 for (k = 0 ; k < n ; k++)
276 for (k = 0 ; k < n ; k++)
288 for (block = 0 ; block < nblocks ; block++)
298 PRINTF ((
"BLOCK %d, k1 %d k2-1 %d nk %d\n", block, k1, k2-1, nk)) ;
299 maxblock =
MAX (maxblock, nk) ;
305 for (k = k1 ; k < k2 ; k++)
308 pend = Ap [oldcol+1] ;
309 for (p = Ap [oldcol] ; p < pend ; p++)
311 if (Pinv [Ai [p]] < k1)
319 Lnz [block] =
EMPTY ;
352 for (k = 0 ; k < n ; k++)
354 P [k] = (Puser ==
NULL) ? k : Puser [k] ;
362 Symbolic->nblocks = nblocks ;
363 Symbolic->maxblock = maxblock ;
364 Symbolic->lnz =
EMPTY ;
365 Symbolic->unz =
EMPTY ;
366 Symbolic->nzoff = nzoff ;
#define KLU_OUT_OF_MEMORY
KLU_symbolic * KLU_analyze_given(Int n, Int Ap[], Int Ai[], Int Puser[], Int Quser[], KLU_common *Common)
#define KLU_free_symbolic
KLU_symbolic * KLU_alloc_symbolic(Int n, Int *Ap, Int *Ai, KLU_common *Common)