<div class="gmail_quote">On Mon, Nov 29, 2010 at 20:01, Gaetan Kenway <span dir="ltr">&lt;<a href="mailto:kenway@utias.utoronto.ca">kenway@utias.utoronto.ca</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div id=":1rb">I am wondering how one sets options for the sub-ksp contexts when using the ASM preconditoner for the krylov solve in a SNES.  After I create the snes context, set the FormFunction routine, set the snesSetJacobian routine, I run something like this:<br>

<br>
  call SNESGetKSP(snes,ksp,ierr)<br>
  call KSPSetType(ksp,KSPGMRES,ierr)<br>
  call KSPGMRESSetRestart(ksp, 80, ierr)<br>
  call KSPGetPC(ksp,pc,ierr)<br>
  call PCSetType( pc, PCASM, ierr)<br>
  call PCASMSetOverlap(pc,3,ierr)<br>
<br>
All good up until here.  Elsewhere where I use just a Krylov solve (for the adjoint of the non-linear system),  I would normally use<br>
<br>
call PCASMGetSubKSP( pc, nlocal,  first, subksp, ierr)<br>
call KSPGetPC( subksp, subpc, ierr)<br>
call PCSetType( subpc, PCILU, ierr)<br>
call PCFactorSetLevels( subpc, fillLevel , ierr)<br>
call KSPSetType(subksp, KSPPREONLY, ierr)<br></div></blockquote><div><br></div><div>Note that you are basically just setting defaults, but maybe this is a model for where your application takes active control of the algorithm?</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div id=":1rb">
However, calling the PCASMGetSubKSP gives an error, specifically Error Code 58: &quot;Operation done in wrong order&quot;.</div></blockquote></div><br><div>The these cannot be created (or they wouldn&#39;t be useful yet) because we don&#39;t have a matrix yet, so we can&#39;t know how big the overlap 3 system will be.  You can call these functions after PCSetUp, but you need to set a matrix (with correct nonzero, not necessarily correct values) to do PCSetUp.  So you should either find a way to provide that information before SNESSolve() and call PCSetUp before PCASMGetSubKSP, or use the options database to customize the inner solvers.</div>
<div><br></div><div>Jed</div>