26 double *LUix, *Xchild, *Ux, *X ;
27 Int *Child, *Childp, *Lost, *Lostp, *Cstart, *Uip, *Ulen,
28 *Cn, *Qinv, *Ui, *Sched, *Cparent ;
29 Int cp, nchild, child, cn, k, j, p, i, nfound, k1, k2, ulen,
30 ci, nlost_in, cn_child, cn_nfound, myid, parent ;
32 MPI (MPI_Request req) ;
39 PR0 ((Common->
file,
"\n\n########################### Usolve NODE "ID"\n", c));
46 Childp = LUsymbolic->
Childp ;
47 Child = LUsymbolic->
Child ;
48 nchild = Childp [c+1] - Childp [c] ;
50 Cstart = LUsymbolic->
Cstart ;
51 Sched = LUsymbolic->
Sched ;
60 nfound = LUnode->PK_NFOUND ;
62 parent = Cparent [c] ;
64 PR1 ((Common->
file,
"Usolve node "ID" cn "ID" nfound "ID"\n", c, cn, nfound)) ;
66 if (parent !=
EMPTY && Sched [parent] != myid)
68 PR1 ((Common->
file,
"Recving usolve from "ID
", size "ID
"\n", Sched [parent],
70 MPI (MPI_Irecv (X + nfound, cn-nfound, MPI_DOUBLE, Sched [parent],
71 TAG0, MPI_COMM_WORLD, &req)) ;
72 MPI (MPI_Wait (&req, &ms)) ;
84 for (j = cn-1 ; j >= nfound ; j--)
87 GET_COLUMN (Uip, Ulen, LUix, j, Ui, Ux, ulen) ;
88 for (p = 0 ; p < ulen ; p++)
90 X [Ui [p]] -= Ux [p] * xj ;
97 GET_COLUMN (Uip, Ulen, LUix, j, Ui, Ux, ulen) ;
98 xj = X [j] / Ux [ulen-1] ;
100 for (p = 0 ; p < ulen-1 ; p++)
102 X [Ui [p]] -= Ux [p] * xj ;
111 Lost = LUnode->
Lost ;
112 Lostp = LUnode->
Lostp ;
116 cn = nlost_in + Cn [c] ;
120 PR1 ((Common->
file,
"NODE "ID
" nlost_in: "ID
"\n", c, nlost_in)) ;
122 Qinv = LUnode->
Qinv ;
126 Int npiv = LUnode->PK_NPIV ;
128 ASSERT (cn == LUnode->PK_NN) ;
129 ASSERT (npiv == nlost_in + (k2 - k1)) ;
130 for (k = 0 ; k < npiv ; k++)
133 ASSERT (i >= 0 && i < npiv) ;
145 for (cp = 0 ; cp < nchild ; cp++)
147 child = Child [Childp [c] + cp] ;
148 cn_child = LU->
LUnode [child]->PK_NN ;
149 cn_nfound = LU->
LUnode [child]->PK_NFOUND ;
150 Xchild = LU->
LUnode [child]->
X + cn_nfound ;
152 PR1 ((Common->
file,
"child "ID
" cn "ID
" nfound "ID
"\n",
153 child, cn_child, cn_nfound)) ;
156 for (i = 0 ; i < Lost [cp] ; i++)
158 ci = i + Lostp [cp] ;
160 PR2 ((Common->
file,
"Xchild ["ID
"] = %g from X ["ID
"] (lost)\n",
166 for ( ; i < Lost [cp] + (k2-k1) ; i++)
168 ci = i + (nlost_in - Lost [cp]) ;
170 PR2 ((Common->
file,
"Xchild ["ID
"] = %g from X ["ID
"] (cand)\n",
176 for ( ; i < cn_child - cn_nfound ; i++)
178 k = i + (nlost_in - Lost [cp]) ;
179 PR2 ((Common->
file,
"Xchild ["ID
"] = %g from X ["ID
"] (anc)\n",
184 PR1 ((Common->
file,
"Usolve: Sending from "ID
" to child "ID
"\n", c, child));
185 if (Sched [child] != myid)
187 PR1 ((Common->
file,
"Sending to "ID
", size "ID
"\n", Sched [child],
188 cn_child - cn_nfound)) ;
189 MPI (MPI_Isend (Xchild, cn_child - cn_nfound, MPI_DOUBLE,
190 Sched [child],
TAG0, MPI_COMM_WORLD, &req)) ;
193 MPI (MPI_Request_free (&req)) ;
Int amesos_paraklete_usolve_node(Int c, paraklete_numeric *LU, paraklete_symbolic *LUsymbolic, paraklete_common *Common)
#define GET_COLUMN(Ap, Anz, Aix, j, Ai, Ax, len)
#define ASSERT(expression)
int CHOLMOD() print_perm(Int *Perm, size_t len, size_t n, char *name, cholmod_common *Common)