61 Int *Lip, *Llen, *Uip, *Ulen, *Li2, *Ui2 ;
63 Entry *Lx2, *Ux2, *Ukk ;
64 Int i, k, block, nblocks,
n, nz, k1, k2, nk, len, kk, p ;
71 if (Symbolic ==
NULL || Numeric ==
NULL)
79 nblocks = Symbolic->nblocks ;
87 if (Numeric->Rs !=
NULL)
89 for (i = 0 ; i < n ; i++)
91 Rs [i] = Numeric->Rs [i] ;
97 for (i = 0 ; i < n ; i++)
110 for (block = 0 ; block <= nblocks ; block++)
112 R [block] = Symbolic->R [block] ;
122 for (k = 0 ; k < n ; k++)
124 P [k] = Numeric->Pnum [k] ;
134 for (k = 0 ; k < n ; k++)
136 Q [k] = Symbolic->Q [k] ;
151 for (block = 0 ; block < nblocks ; block++)
153 k1 = Symbolic->R [block] ;
154 k2 = Symbolic->R [block+1] ;
170 LU = Numeric->LUbx [block] ;
171 Lip = Numeric->Lip + k1 ;
172 Llen = Numeric->Llen + k1 ;
173 for (kk = 0 ; kk < nk ; kk++)
184 for (p = 0 ; p < len ; p++)
186 Li [nz] = k1 + Li2 [p] ;
187 Lx [nz] =
REAL (Lx2 [p]) ;
189 Lz [nz] =
IMAG (Lx2 [p]) ;
197 ASSERT (nz == Numeric->lnz) ;
211 for (block = 0 ; block < nblocks ; block++)
213 k1 = Symbolic->R [block] ;
214 k2 = Symbolic->R [block+1] ;
216 Ukk = ((
Entry *) Numeric->Udiag) + k1 ;
222 Ux [nz] =
REAL (Ukk [0]) ;
224 Uz [nz] =
IMAG (Ukk [0]) ;
231 LU = Numeric->LUbx [block] ;
232 Uip = Numeric->Uip + k1 ;
233 Ulen = Numeric->Ulen + k1 ;
234 for (kk = 0 ; kk < nk ; kk++)
238 for (p = 0 ; p < len ; p++)
240 Ui [nz] = k1 + Ui2 [p] ;
241 Ux [nz] =
REAL (Ux2 [p]) ;
243 Uz [nz] =
IMAG (Ux2 [p]) ;
249 Ux [nz] =
REAL (Ukk [kk]) ;
251 Uz [nz] =
IMAG (Ukk [kk]) ;
258 ASSERT (nz == Numeric->unz) ;
271 for (k = 0 ; k <= n ; k++)
273 Fp [k] = Numeric->Offp [k] ;
276 for (k = 0 ; k < nz ; k++)
278 Fi [k] = Numeric->Offi [k] ;
280 for (k = 0 ; k < nz ; k++)
282 Fx [k] =
REAL (((
Entry *) Numeric->Offx) [k]) ;
284 Fz [k] =
IMAG (((
Entry *) Numeric->Offx) [k]) ;
#define GET_POINTER(LU, Xip, Xlen, Xi, Xx, k, xlen)
#define ASSERT(expression)