Mark, <div>It looks like you should destroy ASMLocalIDsArr[level] before zeroing it out: GASM increfs it internally,</div><div>and when you set this IS to 0, you leak the reference you acquired when creating it in PetscCDGetASMBlocks().</div>

<div><br></div><div>Dmitry.</div><div><br><br><div class="gmail_quote">On Fri, Mar 30, 2012 at 9:04 AM, Mark F. Adams <span dir="ltr"><<a href="mailto:mark.adams@columbia.edu">mark.adams@columbia.edu</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Thanks, it seems to work but I have a memory leak.  I use:<div><br></div><div><div>          ierr = PCGASMSetLocalSubdomains( subpc, sz, is, PETSC_NULL ); CHKERRQ(ierr);</div>

<div class="im"><div>          ierr = PetscFree( is ); CHKERRQ(ierr);</div><div><br></div></div><div>and it looks like the ISs are not getting destroyed in GASM.</div><span class="HOEnZb"><font color="#888888"><div><br></div>

<div>Mark</div></font></span><div><div class="h5"><div><br></div><div><div>On Mar 29, 2012, at 9:35 PM, Dmitry Karpeev wrote:</div><br><blockquote type="cite">Now it should work the way you intended.<div>Let me know if it doesn't, though.</div>

<div><br></div><div>Dmitry.<br><div><br><div class="gmail_quote">On Thu, Mar 29, 2012 at 7:49 PM, Mark F. Adams <span dir="ltr"><<a href="mailto:mark.adams@columbia.edu" target="_blank">mark.adams@columbia.edu</a>></span> wrote:<br>



<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><br><div><div><div><div>On Mar 29, 2012, at 11:38 AM, Dmitry Karpeev wrote:</div>

<br><blockquote type="cite"><br><br><div class="gmail_quote">On Thu, Mar 29, 2012 at 10:13 AM, 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:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div><div class="gmail_quote">On Thu, Mar 29, 2012 at 08:28, Dmitry Karpeev <span dir="ltr"><<a href="mailto:karpeev@mcs.anl.gov" target="_blank">karpeev@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">






<div>Back to the original problem: how shall we prevent a shared pc from being gutted by an unprotected PCReset() cascading from a KSPDestroy() on one of the containing ksps?  I can factor out KSPReset_Private()/PCReset_Private() as indicated before, unless there are objections.</div>






</blockquote></div><br></div><div> What do you think of my suggestion of masking ksp->pc when KSPDestroy calls KSPReset? Then KSPReset does not call PCReset if ksp->pc does not exist.</div></blockquote><div>I guess that works too, but I thought your suggestion applied to userland code right before calling KSPDestroy(&ksp)?</div>





<div>I suppose that will fix Mark's problem.  Maybe that's the right approach: he got himself into this mess by reusing a pc</div><div>in the inner ksp, he should know how to extricate himself :-)</div></div></blockquote>



<div><br></div></div></div>BTW, this is not a matter of being lazy, I need an eigen estimate of the smoothers preconditioned operator.  In the past I created a new PC from the command line database (ugly), but this GASM smoother can not be reconstructed from the database (it uses the AMG aggregates).  I could do a deep copy of the smoother but that would require two setups of the GASM PC, which would be ugly.</div>



<div><br></div><div>Mark</div><div><br><blockquote type="cite"><div class="gmail_quote"><div><br></div>

<div>Dmitry.</div><div><br></div></div>
</blockquote></div><br></div></blockquote></div><br></div></div>
</blockquote></div><br></div></div></div></div></blockquote></div><br></div>