22 static int TEMPLATE (cholmod_rowfac_mask)
44 double yx [2], lx [2], fx [2], dk [1], di [1], fl = 0 ;
46 double yz [1], lz [1], fz [1] ;
48 double *Ax, *Az, *Lx, *Lz, *Wx, *Wz, *Fx, *Fz ;
49 Int *Ap, *Anz, *Ai, *Lp, *Lnz, *Li, *Lnext, *Flag, *Stack, *Fp, *Fi, *Fnz,
51 Int i, p, k, t, pf, pfend, top, s, mark, pend,
n, lnz, is_ll, multadds,
52 use_dbound, packed, stype, Fpacked, sorted, nzmax, len, parent ;
61 PRINT1 ((
"\nin cholmod_rowfac, kstart %d kend %d stype %d\n",
62 kstart, kend, A->
stype)) ;
114 ASSERT (L->minor == (
size_t) n) ;
116 else if (kstart == 0 && kend == (
size_t) n)
124 for (k = 0 ; k < n ; k++)
130 ASSERT (is_ll == L->is_ll) ;
134 DEBUG (
if (stype == 0)
CHOLMOD(dump_sparse) (F,
"F ready", Common)) ;
153 Iwork = Common->Iwork ;
155 Flag = Common->Flag ;
159 mark = Common->mark ;
167 #define NEXT(k) k = RLinkUp [k]
172 for (k = kstart ; k < ((
Int) kend) ;
NEXT(k))
174 PRINT1 ((
"\n===============K "ID" Lnz [k] "ID"\n", k, Lnz [k])) ;
188 #define PARENT(i) (Lnz [i] > 1) ? (Li [Lp [i] + 1]) : EMPTY
194 pend = (packed) ? (Ap [k+1]) : (p + Anz [k]) ;
196 #define SCATTER ASSIGN(Wx,Wz,i, Ax,Az,p)
204 pfend = (Fpacked) ? (Fp [k+1]) : (pf + Fnz [k]) ;
205 for ( ; pf < pfend ; pf++)
210 ASSIGN (fx, fz, 0, Fx, Fz, pf) ;
212 pend = (packed) ? (Ap [t+1]) : (p + Anz [t]) ;
215 #define SCATTER MULTADD (Wx,Wz,i, Ax,Az,p, fx,fz,0) ; multadds++ ;
219 fl += 2 * ((double) multadds) ;
221 fl += 8 * ((double) multadds) ;
239 for (p = n; p > top;)
249 for (s = top ; s < n ; s++)
283 ADD_REAL (dk,0, Wx,k, beta,0) ;
291 dk_imaginary = (stype > 0) ? (IMAG_IS_NONZERO (Wx,Wz,k)) :
FALSE ;
297 for (s = top ; s < n ; s++)
303 ASSIGN (yx,yz,0, Wx,Wz,i) ;
310 ASSERT (lnz > 0 && Li [p] == i) ;
314 ASSIGN_REAL (di,0, Lx,p) ;
326 fl += 2 * ((double) (pend - p - 1)) + 3 ;
328 fl += 8 * ((double) (pend - p - 1)) + 6 ;
333 DIV_REAL (yx,yz,0, yx,yz,0, di,0) ;
334 for (p++ ; p < pend ; p++)
337 MULTSUB (Wx,Wz,Li[p], Lx,Lz,p, yx,yz,0) ;
341 ASSIGN_CONJ (lx,lz,0, yx,yz,0) ;
343 LLDOT (dk,0, yx,yz,0) ;
348 fl += 2 * ((double) (pend - p - 1)) + 3 ;
350 fl += 8 * ((double) (pend - p - 1)) + 6 ;
353 for (p++ ; p < pend ; p++)
356 MULTSUB (Wx,Wz,Li[p], Lx,Lz,p, yx,yz,0) ;
361 lx [0] = yx [0] / di [0] ;
363 dk [0] -= lx [0] * yx [0] ;
366 ASSIGN_CONJ (lx,lz,0, yx,yz,0) ;
368 DIV_REAL (lx,lz,0, lx,lz,0, di,0) ;
370 LDLDOT (dk,0, yx,yz,0, di,0) ;
375 if (p >= Lp [Lnext [i]])
378 PRINT1 ((
"Factor Colrealloc "ID
", old Lnz "ID
"\n", i, Lnz [i]));
382 for (i = 0 ; i < n ; i++)
394 ASSERT (p < Lp [Lnext [i]]) ;
400 ASSIGN (Lx,Lz,p, lx,lz,0) ;
411 if (k >= (
Int) L->minor)
419 dk [0] =
CHOLMOD(dbound) (is_ll ? fabs (dk [0]) : dk [0], Common) ;
436 dk [0] = sqrt (dk [0]) ;
440 ASSIGN_REAL (Lx,p, dk,0) ;
441 CLEAR_IMAG (Lx,Lz,p) ;
446 if (is_ll) fl +=
MAX ((
Int) kend - (
Int) kstart, 0) ;
447 Common->rowfacfl = fl ;
int CHOLMOD() reallocate_column(size_t j, size_t need, cholmod_factor *L, cholmod_common *Common)
int CHOLMOD() dump_work(int flag, int head, UF_long wsize, cholmod_common *Common)
static int TEMPLATE() cholmod_rowfac(cholmod_sparse *A, cholmod_sparse *F, double beta[2], size_t kstart, size_t kend, cholmod_factor *L, cholmod_common *Common)
#define ASSERT(expression)
#define CHOLMOD_NOT_POSDEF
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)
UF_long CHOLMOD() clear_flag(cholmod_common *Common)
#define ERROR(status, msg)
#define ASSIGN(c, s1, s2, p, split)