Thanks Matt and Dave for the explanation, that is very helpful.

Best
Sean






On Thu, May 12, 2016 at 8:58 AM -0700, "Dave May" 
<[email protected]<mailto:[email protected]>> wrote:


Matt beat me to the punch... :D
Anyway, here is my more detailed answer.


Thanks!  Somehow I missed DM{Get,Create}LocalVector().  BTW what is the 
difference between the Get and Create versions?  It is not obvious from the 
documentation.

The DMDA contains a pool of vectors (both local and global) which can be 
re-used by the user. This avoids the need to continually allocate and 
deallocate memory. Thus, the Get methods are simply an optimization.

The Get methods retrieve from the pool, a vector which isn't currently in use. 
In this case, You can think of Restore as returning the vector back to the pool 
to be used somewhere else.
If all vectors in the pool are in use, a new one will be allocated for you. In 
this case, Restore will actually deallocate memory.

Since Get methods may return vectors which have been used else where in the 
code, you should always call VecZeroEntries() on them.

The Create methods ALWAYS allocate new memory and thus you ALWAYS need to call 
Destroy on them. Vectors obtained via VecCreate() will always be initialized 
with 0's.


Thanks,
  Dave


Also, can you explain the difference between DMDAVecGetArrayDOF and 
DMDAVecGetArrayDOFRead?

Thanks again,
Sean



Thanks,
  Dave



Thanks very much!

Sean Dettrick



Reply via email to