<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Dec 23, 2011, at 2:17 PM, Jed Brown wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div class="gmail_quote">On Fri, Dec 23, 2011 at 13:11, Mark F. Adams <span dir="ltr"><<a href="mailto:mark.adams@columbia.edu">mark.adams@columbia.edu</a>></span> wrote: <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><div class="im"><blockquote type="cite"><div>Sure, but what does the user need to provide? How much code can we reuse between the matrix-based implementation and the nonlinear implementation?</div>
</blockquote></div></div><br><div>You just have to provide a method like </div><div><br></div><div>int applyGS( Mat mat, Vec lhs, Vec rhs, IS eqs, Bool reverse)</div><div><br></div><div>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 ...</div>
</blockquote></div><br><div>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).</div>
</blockquote><br></div><div>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.</div><div><br></div><div>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.</div><div><br></div><div>Mark</div><br></body></html>