On Dec 23, 2011, at 2:17 PM, Jed Brown wrote: > On Fri, Dec 23, 2011 at 13:11, Mark F. Adams <mark.adams at columbia.edu> > wrote: >> Sure, but what does the user need to provide? How much code can we reuse >> between the matrix-based implementation and the nonlinear implementation? > > You just have to provide a method like > > int applyGS( Mat mat, Vec lhs, Vec rhs, IS eqs, Bool reverse) > > that applies G-S to the local rows in "eqs" and processes them in reverse > order if "reverse" is true. Reverse is just to symmetrize the operator. > Since this is probably best used for non-symetric operators we could simplify > the algorithm a bit and get rid of this ... > > Sure, so this update lhs for some equations, but there is no Mat (because > it's nonlinear). To create the ISs, we'll have to specify the connections > between nodes (could use a matrix to denote that).
Ah yes, by "mat" I'm assuming a shell in this case. The construction of these ISs needs a graph -- its not magic -- its a parallel multiplicative method. Note, with one vertex per processor this algorithm degenerates to standard coloring G-S, so you can think of it in that way. If you did dumb coloring then you would need to use this new primitive on each color, and you need a graph to do the coloring. Mark -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20111223/ca22fb91/attachment.html>
