26     Int n, nblocks, header [4] ;
 
   38     if (Common->
myid == 0)
 
   40   LU_btf_symbolic = *LU_btf_symbolic_handle ;
 
   41   if (LU_btf_symbolic != 
NULL)
 
   43       n = LU_btf_symbolic->
n ;
 
   44       nblocks = LU_btf_symbolic->
nblocks ;
 
   50   *LU_btf_symbolic_handle = 
NULL ;
 
   55     header [1] = nblocks ;
 
   58     nblocks = header [1] ;
 
   64     if (Common->
myid != 0)
 
   68   *LU_btf_symbolic_handle = LU_btf_symbolic ;
 
   76     MPI (MPI_Allreduce (&ok, &all_ok, 1, MPI_INT, MPI_LAND, MPI_COMM_WORLD)) ;
 
   80   PR0 ((Common->
file, 
"proc "ID" all fail in analyze\n", Common->
myid)) ;
 
   82   *LU_btf_symbolic_handle = 
NULL ;
 
  128     LU_btf_symbolic->
n = n ;
 
  129     LU_btf_symbolic->
nblocks = nblocks ;
 
  130     LU_btf_symbolic->
cnz = 0 ;
 
  131     LU_btf_symbolic->
fnz = 0 ;
 
  133     LU_btf_symbolic->
Qbtf = p ;         
 
  134     LU_btf_symbolic->
Pbinv = p + n ;        
 
  135     LU_btf_symbolic->
Rbtf = p + 2*n ;       
 
  144     return (LU_btf_symbolic) ;
 
  166     Int nblocks, n = 0, nmatch, block, k, k1, k2, inew, jold, anz = 0, fnz,
 
  176     if (Common->
myid == 0)
 
  184         if (LU_btf_symbolic == 
NULL)
 
  190   Qbtf = LU_btf_symbolic->
Qbtf ;        
 
  191   Rbtf = LU_btf_symbolic->
Rbtf ;        
 
  192   Pbinv = LU_btf_symbolic->
Pbinv ;      
 
  199   Work = 
CHOLMOD (malloc) (n, 6*
sizeof (
Int), cm) ;
 
  207   nblocks = 
BTF_order (n, Ap, Ai, 0, &work, Pbtf, Qbtf, Rbtf, &nmatch,
 
  211   for (k = 0 ; k < n ; k++)
 
  213       Pbinv [Pbtf [k]] = k ;
 
  216   CHOLMOD (free) (n, 6*
sizeof (
Int), Work, cm) ;
 
  217   LU_btf_symbolic->
nblocks = nblocks ;
 
  226     Rbtf = LU_btf_symbolic->
Rbtf ;
 
  228     nblocks = LU_btf_symbolic->
nblocks ;
 
  234     if (Common->
myid == 0)
 
  247   LU_btf_symbolic->
cnz = 0 ;
 
  250     for (block = 0 ; block < nblocks ; block++)
 
  253   k2 = Rbtf [block+1] ;
 
  256   if (Common->
myid == 0)
 
  259       for (k = k1 ; k < k2 ; k++)
 
  263     for (p = Ap [jold] ; p < Ap [jold+1] ; p++)
 
  265         inew = Pbinv [Ai [p]] ;
 
  274       Ci [cnz++] = inew - k1 ;  
 
  278       LU_btf_symbolic->
cnz = 
MAX (LU_btf_symbolic->
cnz, cnz) ;
 
  287       LUsymbolic [block] = 
NULL ;
 
  291             if (Common->
myid == 0)
 
  294                 LUsymbolic [block] = (
void *) 
KLU_analyze (nk, Cp, Ci, km) ;
 
  304                 LUsymbolic [block] = 
NULL ;
 
  312             if (LUsymbolic [block] == 
NULL)
 
  324     if (Common->
myid == 0)
 
  327   LU_btf_symbolic->
fnz = fnz ;
 
  337     return (LU_btf_symbolic) ;
 
  358     Int fnz = 0, cnz = 0, nblocks, n, k, k1, k2, block, jold, inew, p, nk ;
 
  359     int ok = 
TRUE, all_ok ;
 
  360     void **LUsymbolic = 
NULL;
 
  362     void **LUnumeric = 
NULL ;
 
  378     if (Common->
myid == 0)
 
  380   fnz = LU_btf_symbolic->
fnz ;
 
  381   cnz = LU_btf_symbolic->
cnz ;
 
  395     n = LU_btf_symbolic->
n ;
 
  396     nblocks = LU_btf_symbolic->
nblocks ;
 
  397     Rbtf = LU_btf_symbolic->
Rbtf ;
 
  398     Qbtf = LU_btf_symbolic->
Qbtf ;
 
  399     Pbinv = LU_btf_symbolic->
Pbinv ;
 
  402     if (Common->
myid == 0)
 
  414   Singleton = 
CHOLMOD (calloc) (nblocks, 
sizeof (double), cm) ;
 
  426   CHOLMOD (calloc) (nblocks, 
sizeof (
void *), cm) ;
 
  427     LU_btf_numeric->
F = F ;
 
  428     LU_btf_numeric->
nblocks = nblocks ;
 
  441     for (block = 0 ; block < nblocks ; block++)
 
  444   k2 = Rbtf [block+1] ;
 
  447   if (Common->
myid == 0)
 
  450       for (k = k1 ; k < k2 ; k++)
 
  455     for (p = Ap [jold] ; p < Ap [jold+1] ; p++)
 
  457         inew = Pbinv [Ai [p]] ;
 
  468       Ci [cnz] = inew - k1 ;  
 
  482       if (Common->
myid == 0)
 
  484     Singleton [block] = Cx [0] ;
 
  486             LUnumeric [block] = 
NULL ;
 
  490             if (Common->
myid == 0)
 
  493                 LUnumeric [block] = (
void *) 
KLU_factor (Cp, Ci, Cx,
 
  505                 LUnumeric [block] = 
NULL ;
 
  513             if (LUnumeric [block] == 
NULL)
 
  521     if (Common->
myid == 0)
 
  532     MPI (MPI_Allreduce (&ok, &all_ok, 1, MPI_INT, MPI_LAND, MPI_COMM_WORLD)) ;
 
  538     return (LU_btf_numeric) ;
 
  560     double *Fx = 
NULL, *W = 
NULL, *Singleton ;
 
  562     Int iold, n, jnew, k, k1, k2, nk, p, nblocks, block ;
 
  571     nblocks = LU_btf_symbolic->nblocks ;
 
  572     n = LU_btf_symbolic->n ;
 
  573     Rbtf = LU_btf_symbolic->Rbtf ;
 
  574     Qbtf = LU_btf_symbolic->Qbtf ;
 
  575     Pbinv = LU_btf_symbolic->Pbinv ;
 
  576     LUsymbolic = LU_btf_symbolic->LUsymbolic ;
 
  579     F = LU_btf_numeric->
F ;
 
  580     if (Common->
myid == 0)
 
  592     if (Common->
myid == 0)
 
  595         W = 
CHOLMOD (malloc) (n, 
sizeof (double), cm) ;
 
  601         for (iold = 0 ; iold < n ; iold++)
 
  603             W [Pbinv [iold]] = B [iold] ;
 
  611     for (block = nblocks-1 ; block >= 0 ; block--)
 
  614   k2 = Rbtf [block+1] ;
 
  619             if (Common->
myid == 0)
 
  621                 W [k1] /= Singleton [block] ;
 
  626             if (Common->
myid == 0)
 
  631                     (
KLU_numeric  *) LUnumeric  [block], nk, 1, W+k1, km) ;
 
  643                 LUnumeric [block] = 
NULL ;
 
  655         if (Common->
myid == 0)
 
  657             for (k = k1 ; k < k2 ; k++)
 
  660                 for (p = Fp [k] ; p < Fp [k+1] ; p++)
 
  662                     W [Fi [p]] -= Fx [p] * wk ;
 
  672     if (Common->
myid == 0)
 
  674         for (jnew = 0 ; jnew < n ; jnew++)
 
  676             B [Qbtf [jnew]] = W [jnew] ;
 
  678         CHOLMOD (free) (n, 
sizeof (double), W, cm) ;
 
  697     Int n, block, nblocks, k1, k2, nk, *Rbtf ;
 
  701     if (LU_btf_symbolic_handle == 
NULL)
 
  705     LU_btf_symbolic = *LU_btf_symbolic_handle ; 
 
  706     if (LU_btf_symbolic == 
NULL)
 
  708   *LU_btf_symbolic_handle = 
NULL ;
 
  715     Rbtf = LU_btf_symbolic->
Rbtf ;
 
  716     n = LU_btf_symbolic->
n ;
 
  717     nblocks = LU_btf_symbolic->
nblocks ;
 
  718     for (block = 0 ; block < nblocks ; block++)
 
  720   k2 = Rbtf [block+1] ;
 
  735         LUsymbolic [block] = 
NULL ;
 
  740   LU_btf_symbolic, cm) ;
 
  759     if (LU_btf_numeric_handle == 
NULL)
 
  763     LU_btf_numeric = *LU_btf_numeric_handle ; 
 
  764     if (LU_btf_numeric == 
NULL)
 
  766   *LU_btf_numeric_handle = 
NULL ;
 
  772     nblocks = LU_btf_numeric->
nblocks ;
 
  774     for (block = 0 ; block < nblocks ; block++)
 
  793         LUnumeric [block] = 
NULL ;
 
  797     CHOLMOD (free) (nblocks, 
sizeof (
void *), LUnumeric, cm) ;
 
  801   LU_btf_numeric, cm) ;
 
struct paraklete_btf_numeric_struct paraklete_btf_numeric
 
paraklete_btf_symbolic * amesos_paraklete_btf_analyze(cholmod_sparse *A, paraklete_common *Common)
 
size_t CHOLMOD() add_size_t(size_t a, size_t b, int *ok)
 
size_t CHOLMOD() mult_size_t(size_t a, size_t k, int *ok)
 
#define PARAKLETE_ERROR(status, message)
 
paraklete_btf_numeric * amesos_paraklete_btf_factorize(cholmod_sparse *A, paraklete_btf_symbolic *LU_btf_symbolic, paraklete_common *Common)
 
void amesos_paraklete_free_numeric(paraklete_numeric **LUHandle, paraklete_common *Common)
 
paraklete_btf_symbolic * amesos_paraklete_btf_alloc_symbolic(Int n, Int nblocks, paraklete_common *Common)
 
int CHOLMOD() free_sparse(cholmod_sparse **AHandle, cholmod_common *Common)
 
struct paraklete_btf_symbolic_struct paraklete_btf_symbolic
 
Int amesos_paraklete_solve(paraklete_numeric *LU, paraklete_symbolic *LUsymbolic, double *B, paraklete_common *Common)
 
Int amesos_paraklete_btf_solve(paraklete_btf_numeric *LU_btf_numeric, paraklete_btf_symbolic *LU_btf_symbolic, double *B, paraklete_common *Common)
 
#define KLU_free_symbolic
 
void amesos_paraklete_free_symbolic(paraklete_symbolic **LUsymbolicHandle, paraklete_common *Common)
 
void amesos_paraklete_btf_free_symbolic(paraklete_btf_symbolic **LU_btf_symbolic_handle, paraklete_common *Common)
 
cholmod_sparse *CHOLMOD() allocate_sparse(size_t nrow, size_t ncol, size_t nzmax, int sorted, int packed, int stype, int xtype, cholmod_common *Common)
 
void amesos_paraklete_btf_free_numeric(paraklete_btf_numeric **LU_btf_numeric_handle, paraklete_common *Common)
 
paraklete_symbolic * amesos_paraklete_analyze(cholmod_sparse *A, paraklete_common *Common)
 
static Int paraklete_btf_bcast_symbolic(paraklete_btf_symbolic **LU_btf_symbolic_handle, paraklete_common *Common)
 
paraklete_numeric * amesos_paraklete_factorize(cholmod_sparse *A, paraklete_symbolic *LUsymbolic, paraklete_common *Common)