<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jan 28, 2013 at 1:50 PM, Ling Zou <span dir="ltr"><<a href="mailto:lingzou80@gmail.com" target="_blank">lingzou80@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class=""><div class="im">On Mon, Jan 28, 2013 at 12:43 PM, Jed Brown <span dir="ltr"><<a href="mailto:jedbrown@mcs.anl.gov" target="_blank">jedbrown@mcs.anl.gov</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div><br><div class="gmail_quote">On Mon, Jan 28, 2013 at 1:36 PM, Ling Zou <span dir="ltr"><<a href="mailto:lingzou80@gmail.com" target="_blank">lingzou80@gmail.com</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div>I guess I got the impression that M is generally the same as A from reading the manual.(PETSc Users Manual, Reversion 3.3, page 71, under 4.1 Using KSP)<br>


<br>"<span style="background-color:rgb(255,255,153)"><span style="color:rgb(153,0,0)">Typically the preconditioning matrix (i.e., the matrix from which the preconditioner is to be constructed), Pmat, is the same as the matrix that defines the linear system, Amat</span></span>; however, occasionally these matrices differ (for instance, when a preconditioning matrix is obtained from a lower order method than that employed to form the linear system matrix)."</div>


</blockquote></div><br></div>I think you are getting confused by mixed notation. A PC in PETSc is an algorithm that takes a matrix (Pmat in the docs) and does some work to be able to apply an operation (named "M^{-1}" in your first email). This does *not* imply that M=Pmat, or that M is ever available or used, there is just a a linear operation named "M^{-1}".</div>

</div></blockquote></div></div><div><div class=""><br></div>Hmmm...it's getting more complicated now. </div></blockquote><div><br></div><div style>It's not that bad, the notation "M^{-1}" is just misleading. Let's try writing the preconditioned equation differently</div>
<div style><br></div><div style>  T A x = T b</div><div style><br></div><div style>T is a linear operator defined as a _function_, not as an assembled matrix.</div><div style><br></div><div style>Now suppose there is an operation T = MakePreconditioner(SomeMatrix). Usually T will be somehow "close" to SomeMatrix^{-1}, but this could be very approximate. There are many different algorithms "MakePreconditioner", but Jacobi (i.e., T = diag(SomeMatrix)^{-1}), incomplete factorization, and domain decomposition are common cases.<br>
</div><div style><br></div><div style>When you call KSPSetOperators(ksp,A,Pmat,...), you're telling PETSc to use T = MakePreconditioner(Pmat).</div><div style><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div>I guess I need read the manual more carefully and study the example codes more. By the way, could you redirect me to an example code or a tutorial to understand this better?</div></blockquote></div><br>The examples using Pmat different from Amat are more advanced. I recommend just passing Pmat=Amat for now and revisit this topic later.</div>
</div>