[petsc-users] ghost values

Barry Smith bsmith at mcs.anl.gov
Tue Apr 14 19:23:51 CDT 2015


> On Apr 14, 2015, at 6:25 PM, Gideon Simpson <gideon.simpson at gmail.com> wrote:
> 
> So other than the minor point of it zeroing out the data, is there any conceivable reason to use Create/Destroy over Get/Restore?

  The design intends that Create/Destroy are for long lived objects. For example in main you might call Create to make a vector you will store the solution for the entire simulation run in then just before you exit the program you destroy it.

   The Get/Restore are for work vectors that are used within one routine. The most classic example is in FormFunction where you often have something like  DMGetLocalVector() ;  DMGlobalToLocalBegin/End(global, local, ...) DMDAVecGetArray(local) ..../  DMRestoreLocalVector(). The idea is that rather creating work vectors in main and passing them around to use when needed, DM manages a "pool" of work vectors that you can grab whenever you need them and are low overhead to access.

  There is nothing that enforces you follow this style, but if you don't you need to be careful to know which vectors to call VecDestroy() on and which ones to call DMRestoreLocalVector() on plus it will be easier for other people to follow your code.

  Barry

> 
> -gideon
> 
>> On Apr 14, 2015, at 7:16 PM, Matthew Knepley <knepley at gmail.com> wrote:
>> 
>> On Tue, Apr 14, 2015 at 6:15 PM, Gideon Simpson <gideon.simpson at gmail.com> wrote:
>> Other than zeroing things out, is there any substantive difference between DMCreateLocalVector and DMGetLocalVector?
>> 
>> The Get version caches vectors, so you are not continually creating/destroying
>> 
>>    Matt
>>  
>> -gideon
>> 
>> > On Apr 14, 2015, at 7:02 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:
>> >
>> >
>> >  When PETSc vectors are created initially they always have 0 everywhere. So if you use DMCreateLocalVector() it will have zero in all those ghost places (as well as everywhere else).
>> >
>> >   But if you use DMGetLocalVector() it returns vectors that maybe dirty so you need to fill in any locations you want to have a known value with that known value. Or call VecSet() to clear the entire vector.
>> >
>> >  Barry
>> >
>> >> On Apr 14, 2015, at 5:52 PM, Gideon Simpson <gideon.simpson at gmail.com> wrote:
>> >>
>> >> If i use the DM_BOUNDARY_GHOSTED flag in the creation of a DMDA array, are the ghosted values automatically set to zero, or should they be manually set to zero if that’s the desired ghost value?
>> >>
>> >> -gideon
>> >>
>> >
>> 
>> 
>> 
>> 
>> -- 
>> 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
> 



More information about the petsc-users mailing list