Thanks, it seems to work but I have a memory leak.  I use:

          ierr = PCGASMSetLocalSubdomains( subpc, sz, is, PETSC_NULL ); CHKERRQ(ierr);
          ierr = PetscFree( is ); CHKERRQ(ierr);

and it looks like the ISs are not getting destroyed in GASM.

Mark

On Mar 29, 2012, at 9:35 PM, Dmitry Karpeev wrote:

Now it should work the way you intended.
Let me know if it doesn't, though.

Dmitry.

On Thu, Mar 29, 2012 at 7:49 PM, Mark F. Adams <mark.adams@columbia.edu> wrote:

On Mar 29, 2012, at 11:38 AM, Dmitry Karpeev wrote:



On Thu, Mar 29, 2012 at 10:13 AM, Jed Brown <jedbrown@mcs.anl.gov> wrote:
On Thu, Mar 29, 2012 at 08:28, Dmitry Karpeev <karpeev@mcs.anl.gov> wrote:
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.

 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.
I guess that works too, but I thought your suggestion applied to userland code right before calling KSPDestroy(&ksp)?
I suppose that will fix Mark's problem.  Maybe that's the right approach: he got himself into this mess by reusing a pc
in the inner ksp, he should know how to extricate himself :-)

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.

Mark


Dmitry.