<div><br></div><div><br><div class="gmail_quote"><div dir="ltr">On Tue, 23 Oct 2018 at 02:24, Matthew Knepley <<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Mon, Oct 22, 2018 at 7:44 PM Andrew Ho <<a href="mailto:andrewh0@uw.edu" target="_blank">andrewh0@uw.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I have a specialized matrix structure I'm trying to take advantage of for solving large scale (non)linear systems. I think for this purpose using a Shell matrix is sufficient for interfacing with PETSc's KSP linear solvers.<div><br></div><div>Looking at the examples which use shell matrices, it seems most only require implementing MatMult, and sometimes MatMultTranspose. Is there a list of what operations are required (or optional but good to have) for the different KSP solver types? This is specifically for the KSP solve itself, not constructing the actual matrix. I'd also be interested if any of the required/optional operations changes if preconditioners (left and/or right) are used.</div></div>
</blockquote></div><br clear="all"><div>There is no list, but its hard to think of another operation KSP would ask for. Preconditioners are another story unfortunately. They often want</div><div>explicit access to matrix entries. its really unusual for KSPs to work without a good preconditioner (the notable exception being well-conditioned systems like some boundary integral operators).</div></div></blockquote><div dir="auto"><br></div><div dir="auto">The most basic PC is Jacobi - for that to work you need to implement MatGetDiagonal.</div><div dir="auto"><br></div><div dir="auto">Thanks,</div><div dir="auto">  Dave</div><div dir="auto"><br></div><div dir="auto"><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div></div><div><br></div><div>  Thanks,</div><div><br></div><div>    Matt</div></div><div dir="ltr"><div><br></div>-- <br><div dir="ltr" class="m_-5670733265617892029gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>
</blockquote></div></div>