31 Int nz, i, j, p, pend ;
45 if (n <= 0 || Ap ==
NULL || Ai ==
NULL)
53 if (Ap [0] != 0 || nz < 0)
60 for (j = 0 ; j < n ; j++)
62 if (Ap [j] > Ap [j+1])
70 if (Common->status <
KLU_OK)
76 for (i = 0 ; i < n ; i++)
80 for (j = 0 ; j < n ; j++)
83 for (p = Ap [j] ; p < pend ; p++)
86 if (i < 0 || i >= n || P [i] == j)
103 if (Common->status <
KLU_OK)
113 Lnz =
KLU_malloc (n,
sizeof (
double), Common) ;
120 Symbolic->Lnz = Lnz ;
122 if (Common->status <
KLU_OK)
153 Int nblocks, nz, block, maxblock, *
P, *Q, *R, nzoff, p, pend, do_btf, k ;
160 if (Symbolic ==
NULL)
167 Lnz = Symbolic->Lnz ;
176 for (k = 0 ; k < n ; k++)
183 for (k = 0 ; k < n ; k++)
193 do_btf = Common->btf ;
195 Symbolic->ordering = 2 ;
196 Symbolic->do_btf = do_btf ;
209 Int *Pinv, *Work, *Bi, k1, k2, nk, oldcol ;
222 if (Common->status <
KLU_OK)
242 for (k = 0 ; k < n ; k++)
244 Pinv [Puser [k]] = k ;
246 for (p = 0 ; p < nz ; p++)
248 Bi [p] = Pinv [Ai [p]] ;
265 for (k = 0 ; k < n ; k++)
267 Work [k] = Puser [P [k]] ;
269 for (k = 0 ; k < n ; k++)
279 for (k = 0 ; k < n ; k++)
291 for (block = 0 ; block < nblocks ; block++)
301 PRINTF ((
"BLOCK %d, k1 %d k2-1 %d nk %d\n", block, k1, k2-1, nk)) ;
302 maxblock =
MAX (maxblock, nk) ;
308 for (k = k1 ; k < k2 ; k++)
311 pend = Ap [oldcol+1] ;
312 for (p = Ap [oldcol] ; p < pend ; p++)
314 if (Pinv [Ai [p]] < k1)
322 Lnz [block] =
EMPTY ;
355 for (k = 0 ; k < n ; k++)
357 P [k] = (Puser ==
NULL) ? k : Puser [k] ;
365 Symbolic->nblocks = nblocks ;
366 Symbolic->maxblock = maxblock ;
367 Symbolic->lnz =
EMPTY ;
368 Symbolic->unz =
EMPTY ;
369 Symbolic->nzoff = nzoff ;
KLU_symbolic * KLU_alloc_symbolic(Int n, Int *Ap, Int *Ai, KLU_common *Common)
#define KLU_OUT_OF_MEMORY
#define KLU_free_symbolic
KLU_symbolic * KLU_analyze_given(Int n, Int Ap[], Int Ai[], Int Puser[], Int Quser[], KLU_common *Common)