<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Feb 2, 2017, at 6:02 PM, Matthew Knepley <<a href="mailto:knepley@gmail.com" class="">knepley@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote">On Thu, Feb 2, 2017 at 8:55 AM, Sonia Pozzi <span dir="ltr" class=""><<a href="mailto:sonia.pozzi@usi.ch" target="_blank" class="">sonia.pozzi@usi.ch</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word" class="">Dear Barry, <div class=""><br class=""></div><div class="">At the moment I’m dealing with the following problem.</div><div class=""><br class=""></div><div class="">Suppose I want to solve Sx=b, where is a product of matrices. In particular inside it contains also an inverse of a matrix.</div><div class="">To compute the action of S I have created a shell matrix, but know I would like to apply the ASM as preconditioner.</div></div></blockquote><div class=""><br class=""></div><div class="">Are you using a Schur complement? Have you looked at</div><div class=""><br class=""></div><div class="">  <a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/KSP/MatCreateSchurComplement.html" class="">http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/KSP/MatCreateSchurComplement.html</a></div></div></div></div></div></blockquote><div><br class=""></div><div><br class=""></div>Which kind of Schur complement is it? Why do you want to use ASM?</div><div>If it comes from non-overlapping domain decomposition, then you could try PCNN (though it has been not maintained for a while) or PCBDDC.</div><div><br class=""></div><div><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote"><div class=""> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word" class=""><div class="">Citing your words as answer to a previous similar question:</div><div class=""><br class=""></div><div class=""><i style="font-family:-webkit-standard;background-color:rgb(255,255,255)" class="">Thu Jan 13 13:14:47 CST 2011</i></div><div class=""><i style="font-family:times" class="">Is it possible use ASM and/or FieldSplit with a matrix-free method?</i></div><div class=""><pre style="background-color:rgb(255,255,255)" class=""><pre class=""><font face="Times" class="">"Yes, BUT the algorithms are coded around MatGetSubMatrix() and or MatGetSubMatrices() so to do matrix free you need to have code that applies "part" of the operator at a time (that is you cannot just have a matrix vector product that applies the entire operator to the entire vector. Once you have the ability to apply "part" of the operator at a time you need to code up a MATSHELL that responds appropriately to MatGetSubMatrix() and or MatGetSubMatrices() and returns new matrix-free shell matrices that apply only "their" part of the operator. This is non-trivial for many people but possible."</font>
</pre><div class=""><br class=""></div><div class=""><font face="Helvetica" class="">Could you be so kind to explain me better how, or do you have some code that is doing something similar?</font></div></pre></div></div></blockquote><div class="">ASM says "I will take a block of your operator and invert it", but we do not know how to take a block of your MATSHELL</div><div class="">because it only provides the action on a vector. You could</div><div class=""><br class=""></div><div class="">  a) Also provide MatGetSubmatrix() or MAtGetSubmatrices() for your MATSHELL as Barry says</div><div class=""><br class=""></div><div class="">  b) Make a matrix M that is an approximation to your MATSHELL, perhaps using the block diagonal portions of the inverse</div><div class="">      so that you can explicitly give the values. Then pass M in as the preconditioner matrix for the solver.</div><div class=""><br class=""></div><div class="">  c) Use Chebyshev or some matrix-free preconditioner instead of ASM</div><div class=""><br class=""></div><div class="">  Thanks,</div><div class=""><br class=""></div><div class="">    Matt <br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><pre style="background-color:rgb(255,255,255)" class=""><div class=""><font face="Helvetica" class="">Regards,</font></div><div class=""><font face="Helvetica" class=""><br class=""></font></div><div class=""><font face="Helvetica" class="">Sonia</font></div></pre></div></div></blockquote></div><br class=""><br clear="all" class=""><div class=""><br class=""></div>-- <br class=""><div class="gmail_signature">What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br class="">-- Norbert Wiener</div>
</div></div>
</div></blockquote></div><br class=""></body></html>