[petsc-dev] xlocal = da.getLocalVec() .. da.restoreLocalVec(xlocal) skip the restore

Barry Smith bsmith at petsc.dev
Wed Feb 1 20:06:36 CST 2023


  Hmm,  When I do

   def somePythonfunction():
   ...
   x = da.createLocalVec()
   ....
   return 

  The x seems to be properly "garbage collected" at some point; I was guessing it was at the return or some time later than the return, but it did not wait until PetscFinalize().

  So does the x above HAVE to exist until PetscFinalize()? If not then somehow Python realizes x is no longer referenced and VecDestroy() is called on it when some garbage collection takes place. I would like the same thing happen with the x = da.getLocalVec() but calling x.da.restoreLocalVec() instead of x.destroy().  Note specifically parallelism doesn't play a role here because x is local.

  Barry


> On Feb 1, 2023, at 8:07 PM, Matthew Knepley <knepley at gmail.com> wrote:
> 
> On Wed, Feb 1, 2023 at 6:33 PM Barry Smith <bsmith at petsc.dev <mailto:bsmith at petsc.dev>> wrote:
>> 
>>   Would it be possible to rig the xlocal obtained from self.da.getLocalVec()  to automatically trigger the da.restoreLocalVec() when the xlocal goes out of scope so that the user does not need to explicitly make the call. If so, how should I go about implementing it?
> 
> This would work in C++ where the object has a defined lifetime, but Python is garbage collected. The way it does this
> pattern is using the "with" statement.
> 
>    Matt
>  
>>   Barry
> -- 
> What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
> -- Norbert Wiener
> 
> https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20230201/3420f18d/attachment-0003.html>


More information about the petsc-dev mailing list