101 double maxlnz, dunits ;
103 Int *Pinv, *Lpend, *Stack, *Flag, *Ap_pos, *W ;
104 Int lsize, usize, anz, ok ;
113 anz = Ap [
n+k1] - Ap [k1] ;
118 Lsize =
MAX (Lsize, 1.0) ;
119 lsize = (int) ( Lsize * anz +
n ) ;
123 lsize = (int) Lsize ;
128 lsize =
MAX (
n+1, lsize) ;
129 usize =
MAX (
n+1, usize) ;
131 maxlnz = (((double)
n) * ((double)
n) + ((double) n)) / 2. ;
132 maxlnz =
MIN (maxlnz, ((
double) INT_MAX)) ;
133 lsize = (int) (
MIN (maxlnz, lsize) ) ;
134 usize = (int) (
MIN (maxlnz, usize) ) ;
136 PRINTF ((
"Welcome to klu: n %d anz %d k1 %d lsize %d usize %d maxlnz %g\n",
137 n, anz, k1, lsize, usize, maxlnz)) ;
148 Pinv = (
Int *) W ; W += n ;
149 Stack = (
Int *) W ; W += n ;
150 Flag = (
Int *) W ; W += n ;
151 Lpend = (
Int *) W ; W += n ;
152 Ap_pos = (
Int *) W ; W += n ;
156 lusize = (size_t) dunits ;
172 lusize =
KLU_kernel (n, Ap, Ai, Ax, Q, lusize,
173 Pinv,
P, &LU, Udiag, Llen, Ulen, Lip, Uip, lnz, unz,
174 X, Stack, Flag, Ap_pos, Lpend,
175 k1, PSinv, Rs, Offp, Offi, Offx, Common) ;
181 if (Common->status <
KLU_OK)
187 PRINTF ((
" in klu noffdiag %d\n", Common->noffdiag)) ;
222 for (k = 0 ; k < n ; k++)
225 if (x[0] == 0.0)
continue;
228 for (p = 0 ; p < len ; p++)
231 MULT_SUB (X [Li [p]], Lx [p], x [0]) ;
238 for (k = 0 ; k < n ; k++)
241 x [1] = X [2*k + 1] ;
242 if (x[0] == 0.0 && x[1] == 0.0)
continue;
244 for (p = 0 ; p < len ; p++)
249 MULT_SUB (X [2*i + 1], lik, x [1]) ;
256 for (k = 0 ; k < n ; k++)
259 x [1] = X [3*k + 1] ;
260 x [2] = X [3*k + 2] ;
261 if (x[0] == 0.0 && x[1] == 0.0 && x[2] == 0.0)
continue;
263 for (p = 0 ; p < len ; p++)
268 MULT_SUB (X [3*i + 1], lik, x [1]) ;
269 MULT_SUB (X [3*i + 2], lik, x [2]) ;
276 for (k = 0 ; k < n ; k++)
279 x [1] = X [4*k + 1] ;
280 x [2] = X [4*k + 2] ;
281 x [3] = X [4*k + 3] ;
282 if (x[0] == 0.0 && x[1] == 0.0 && x[2] == 0.0 && x[3] == 0.0)
continue;
284 for (p = 0 ; p < len ; p++)
289 MULT_SUB (X [4*i + 1], lik, x [1]) ;
290 MULT_SUB (X [4*i + 2], lik, x [2]) ;
291 MULT_SUB (X [4*i + 3], lik, x [3]) ;
321 Entry x [4], uik, ukk ;
331 for (k = n-1 ; k >= 0 ; k--)
335 if (X [k] == 0.0)
continue;
336 DIV (x [0], X [k], Udiag [k]) ;
338 for (p = 0 ; p < len ; p++)
341 MULT_SUB (X [Ui [p]], Ux [p], x [0]) ;
350 for (k = n-1 ; k >= 0 ; k--)
356 if (X [2*k] == 0.0 && X [2*k + 1] == 0.0)
continue;
357 DIV (x [0], X [2*k], ukk) ;
358 DIV (x [1], X [2*k + 1], ukk) ;
361 X [2*k + 1] = x [1] ;
362 for (p = 0 ; p < len ; p++)
369 MULT_SUB (X [2*i + 1], uik, x [1]) ;
377 for (k = n-1 ; k >= 0 ; k--)
382 if (X [3*k] == 0.0 && X [3*k + 1] == 0.0 && X [3*k + 2] == 0.0)
continue;
383 DIV (x [0], X [3*k], ukk) ;
384 DIV (x [1], X [3*k + 1], ukk) ;
385 DIV (x [2], X [3*k + 2], ukk) ;
388 X [3*k + 1] = x [1] ;
389 X [3*k + 2] = x [2] ;
390 for (p = 0 ; p < len ; p++)
395 MULT_SUB (X [3*i + 1], uik, x [1]) ;
396 MULT_SUB (X [3*i + 2], uik, x [2]) ;
404 for (k = n-1 ; k >= 0 ; k--)
409 if (X [4*k] == 0.0 && X [4*k + 1] == 0.0 && X [4*k + 2] == 0.0 && X [4*k + 3] == 0.0)
continue;
410 DIV (x [0], X [4*k], ukk) ;
411 DIV (x [1], X [4*k + 1], ukk) ;
412 DIV (x [2], X [4*k + 2], ukk) ;
413 DIV (x [3], X [4*k + 3], ukk) ;
416 X [4*k + 1] = x [1] ;
417 X [4*k + 2] = x [2] ;
418 X [4*k + 3] = x [3] ;
419 for (p = 0 ; p < len ; p++)
425 MULT_SUB (X [4*i + 1], uik, x [1]) ;
426 MULT_SUB (X [4*i + 2], uik, x [2]) ;
427 MULT_SUB (X [4*i + 3], uik, x [3]) ;
471 for (k = n-1 ; k >= 0 ; k--)
475 for (p = 0 ; p < len ; p++)
477 if (X[Li[p]] == 0.0 )
continue;
488 MULT_SUB (x [0], Lx [p], X [Li [p]]) ;
497 for (k = n-1 ; k >= 0 ; k--)
500 x [1] = X [2*k + 1] ;
502 for (p = 0 ; p < len ; p++)
505 if (X[2*i] == 0.0 && X[2*i + 1] == 0.0)
continue;
517 MULT_SUB (x [1], lik, X [2*i + 1]) ;
520 X [2*k + 1] = x [1] ;
526 for (k = n-1 ; k >= 0 ; k--)
529 x [1] = X [3*k + 1] ;
530 x [2] = X [3*k + 2] ;
532 for (p = 0 ; p < len ; p++)
535 if (X[3*i] == 0.0 && X[3*i + 1] == 0.0 && X[3*i + 2] == 0.0)
continue;
547 MULT_SUB (x [1], lik, X [3*i + 1]) ;
548 MULT_SUB (x [2], lik, X [3*i + 2]) ;
551 X [3*k + 1] = x [1] ;
552 X [3*k + 2] = x [2] ;
558 for (k = n-1 ; k >= 0 ; k--)
561 x [1] = X [4*k + 1] ;
562 x [2] = X [4*k + 2] ;
563 x [3] = X [4*k + 3] ;
565 for (p = 0 ; p < len ; p++)
568 if (X[4*i] == 0.0 && X[4*i + 1] == 0.0 && X[4*i + 2] == 0.0 && X[4*i + 3] == 0.0)
continue;
580 MULT_SUB (x [1], lik, X [4*i + 1]) ;
581 MULT_SUB (x [2], lik, X [4*i + 2]) ;
582 MULT_SUB (x [3], lik, X [4*i + 3]) ;
585 X [4*k + 1] = x [1] ;
586 X [4*k + 2] = x [2] ;
587 X [4*k + 3] = x [3] ;
619 Entry x [4], uik, ukk ;
629 for (k = 0 ; k < n ; k++)
633 for (p = 0 ; p < len ; p++)
635 if (X[Ui[p]] == 0.0)
continue;
646 MULT_SUB (x [0], Ux [p], X [Ui [p]]) ;
652 CONJ (ukk, Udiag [k]) ;
659 DIV (X [k], x [0], ukk) ;
665 for (k = 0 ; k < n ; k++)
669 x [1] = X [2*k + 1] ;
670 for (p = 0 ; p < len ; p++)
673 if (X[2*i] == 0.0 && X[2*i + 1] == 0.0 )
continue;
685 MULT_SUB (x [1], uik, X [2*i + 1]) ;
690 CONJ (ukk, Udiag [k]) ;
697 DIV (X [2*k], x [0], ukk) ;
698 DIV (X [2*k + 1], x [1], ukk) ;
704 for (k = 0 ; k < n ; k++)
708 x [1] = X [3*k + 1] ;
709 x [2] = X [3*k + 2] ;
710 for (p = 0 ; p < len ; p++)
713 if (X[3*i] == 0.0 && X[3*i + 1] == 0.0 && X[3*i + 2] == 0.0 )
continue;
725 MULT_SUB (x [1], uik, X [3*i + 1]) ;
726 MULT_SUB (x [2], uik, X [3*i + 2]) ;
731 CONJ (ukk, Udiag [k]) ;
738 DIV (X [3*k], x [0], ukk) ;
739 DIV (X [3*k + 1], x [1], ukk) ;
740 DIV (X [3*k + 2], x [2], ukk) ;
746 for (k = 0 ; k < n ; k++)
750 x [1] = X [4*k + 1] ;
751 x [2] = X [4*k + 2] ;
752 x [3] = X [4*k + 3] ;
753 for (p = 0 ; p < len ; p++)
756 if (X[4*i] == 0.0 && X[4*i + 1] == 0.0 && X[4*i + 2] == 0.0 && X[4*i + 3] == 0.0)
continue;
768 MULT_SUB (x [1], uik, X [4*i + 1]) ;
769 MULT_SUB (x [2], uik, X [4*i + 2]) ;
770 MULT_SUB (x [3], uik, X [4*i + 3]) ;
775 CONJ (ukk, Udiag [k]) ;
782 DIV (X [4*k], x [0], ukk) ;
783 DIV (X [4*k + 1], x [1], ukk) ;
784 DIV (X [4*k + 2], x [2], ukk) ;
785 DIV (X [4*k + 3], x [3], ukk) ;
#define GET_POINTER(LU, Xip, Xlen, Xi, Xx, k, xlen)
void KLU_ltsolve(Int n, Int Lip[], Int Llen[], Unit LU[], Int nrhs, Entry X[])
#define KLU_OUT_OF_MEMORY
#define ASSERT(expression)
#define MULT_SUB(c, a, b)
void KLU_usolve(Int n, Int Uip[], Int Ulen[], Unit LU[], Entry Udiag[], Int nrhs, Entry X[])
void KLU_utsolve(Int n, Int Uip[], Int Ulen[], Unit LU[], Entry Udiag[], Int nrhs, Entry X[])
#define MULT_SUB_CONJ(c, a, b)
size_t KLU_kernel_factor(Int n, Int Ap[], Int Ai[], Entry Ax[], Int Q[], double Lsize, Unit **p_LU, Entry Udiag[], Int Llen[], Int Ulen[], Int Lip[], Int Uip[], Int P[], Int *lnz, Int *unz, Entry *X, Int *Work, Int k1, Int PSinv[], double Rs[], Int Offp[], Int Offi[], Entry Offx[], KLU_common *Common)
void KLU_lsolve(Int n, Int Lip[], Int Llen[], Unit LU[], Int nrhs, Entry X[])