<div dir="ltr">On Sun, Nov 10, 2013 at 4:05 AM, Lisandro Dalcin <span dir="ltr"><<a href="mailto:dalcinl@gmail.com" target="_blank">dalcinl@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">In this branch <a href="https://bitbucket.org/petsc/petsc/branch/dalcinl/dm-destroy" target="_blank">https://bitbucket.org/petsc/petsc/branch/dalcinl/dm-destroy</a><br>

you will find my attempts to "fix" DMDestroy() by breaking reference<br>
cycles with the vectors stored in the unnamed/named global/local<br>
vector caches.<br>
<br>
This work is preliminary, I have a few more things I would like to<br>
change, and currently there is a test (snes ex5) that  leaks memory.<br>
<br>
* I'm not sure why the lines below were introduced in DMDestroy(), but<br>
this is certainly not the right way to do it:<br>
<br>
  for (f = 0; f < (*dm)->numFields; ++f) {<br>
    PetscObjectCompose((*dm)->fields[f], "pmat", NULL);<br>
    PetscObjectCompose((*dm)->fields[f], "nullspace", NULL);<br>
    PetscObjectCompose((*dm)->fields[f], "nearnullspace", NULL);<br>
  }<br></blockquote><div><br></div><div>I don't think there is a better way to do it with composed objects. I was evaluating the</div><div>interface. It looks like this is the best thing we could come up with, so it should be</div>
<div>transitioned to real API calls, which can then be tracked in the same way as the</div><div>named vectors.</div><div><br></div><div>   Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

* I removed  some lines from PCMG, but Jed told me privately there is<br>
a better way to do it, so I will need help here.<br>
<br>
* After reviewing carefully DMCreate[Global|Local]Vector() and some<br>
discussion with Jed, I really believe that the call to<br>
VecSetDM(newvec,dm) should be moved from implementation code to<br>
interface code, i.e. :<br>
<br>
@@ -702,6 +702,7 @@ PetscErrorCode  DMCreateGlobalVector(DM dm,Vec *vec)<br>
   PetscFunctionBegin;<br>
   PetscValidHeaderSpecific(dm,DM_CLASSID,1);<br>
   ierr = (*dm->ops->createglobalvector)(dm,vec);CHKERRQ(ierr);<br>
+  ierr = VecSetDM(*vec,dm);CHKERRQ(ierr);<br>
   PetscFunctionReturn(0);<br>
 }<br>
<br>
Before continuing with this work, I would like your opinions about the<br>
approach. If it is accepted, then I'll proceed to ask for comments on<br>
what remains to be done.<br>
<span class="HOEnZb"><font color="#888888"><br>
<br>
<br>
--<br>
Lisandro Dalcin<br>
---------------<br>
CIMEC (UNL/CONICET)<br>
Predio CONICET-Santa Fe<br>
Colectora RN 168 Km 472, Paraje El Pozo<br>
3000 Santa Fe, Argentina<br>
Tel: <a href="tel:%2B54-342-4511594" value="+543424511594">+54-342-4511594</a> (ext 1016)<br>
Tel/Fax: <a href="tel:%2B54-342-4511169" value="+543424511169">+54-342-4511169</a><br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <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
</div></div>