<div dir="ltr">That's what I suspected. Thanks for the help. I have my current issue fixed.<div><br></div><div>John</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jun 19, 2013 at 10:13 PM, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@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 class="im"><br>
On Jun 19, 2013, at 8:05 PM, John Mousel <<a href="mailto:john.mousel@gmail.com">john.mousel@gmail.com</a>> wrote:<br>
<br>
> I just figured out that I had a well hidden duplication of a duplication of the vector I was trying to resize. Hence the run-up in persistent communications. This kind of dependency is somewhat difficult to track down. Is there any way to check the vectors dependent on a particular scatter?<br>

<br>
</div>   Unfortunately not. It would not be terribly difficult to graphically display all the objects and their dependencies but we don't have that currently.<br>
<span class="HOEnZb"><font color="#888888"><br>
   Barry<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
><br>
><br>
> On Wed, Jun 19, 2013 at 5:59 PM, Barry Smith <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>> wrote:<br>
><br>
>   John,<br>
><br>
>    When a VecCreateGhost() is duplicated the new vector shares the VecScatter with the original vector. In your example below vec2 and vec3 share the VecScatter. Hence the VecScatter has a reference count of 3. When you call VecDestroy(vec1) the reference count for that scatter falls to 2. Once vec2 and vec3 are destroyed the reference count for the VecScatter falls to zero and it is destroyed. Hence no memory (or MPI persistent communication resources) should be lost.<br>

><br>
>     Note that even if you do not plan to use the "local vector" part of vec2 and vec3 that VecScatter will still be around until you destroy vec2 and vec3 and any other Vecs obtained by VecDuplicating any of these. If you want to eliminate the VecScatter then don't use a VecDuplicate() on the ghosted vector instead create a non-ghosted vector.<br>

><br>
><br>
>    This is the way it is suppose to be anyways. Are you observing something different that could be reproduced in a somewhat reasonably small example?<br>
><br>
>    Barry<br>
><br>
> On Jun 19, 2013, at 2:45 PM, John Mousel <<a href="mailto:john.mousel@gmail.com">john.mousel@gmail.com</a>> wrote:<br>
><br>
> > Looking at the message queue graph in Totalview, it seems that I'm running up the number of persistent communications when I try to resize a vector by duplicating, copying, destroying, and calling VecCreateGhost.<br>

> ><br>
> ><br>
> > On Wed, Jun 19, 2013 at 2:42 PM, Matthew Knepley <<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>> wrote:<br>
> > On Wed, Jun 19, 2013 at 6:24 PM, John Mousel <<a href="mailto:john.mousel@gmail.com">john.mousel@gmail.com</a>> wrote:<br>
> > Is it legal to destroy a ghosted vector if it has been used in VecDuplicate?<br>
> ><br>
> > This is fine.<br>
> ><br>
> >    MAtt<br>
> ><br>
> > Something like:<br>
> ><br>
> > VecCreateGhost(...,vec1)<br>
> > VecDuplicate(vec1,vec2)<br>
> > VecDuplicate(vec1,vec3)<br>
> > VecDestroy(vec1)<br>
> > VecAXPY(vec2,1.0,vec3)<br>
> ><br>
> > Is this legal or are the scatters left hanging in the ether?<br>
> ><br>
> ><br>
> > John<br>
> ><br>
> ><br>
> ><br>
> > --<br>
> > What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
> > -- Norbert Wiener<br>
> ><br>
><br>
><br>
<br>
</div></div></blockquote></div><br></div>