What the function of "restore the local form",  
can i use VecDestroy to free the local form only;








在 2013-08-15 19:13:52,"Jed Brown" <[email protected]> 写道:
>丁老师 <[email protected]> writes:
>
>> I want to know
>> 1. What is the relationship between Vhat and LocalVhat. Is the
>> LocalVhat a copy of the Vhat plus the Ghost values. I think the
>> LocalVhat will consume more memeory than the Vhat, am i right?
>
>Logically, you should think of them as separate vectors.  The global
>form contains only the global entries (non-overlapping partition) and
>the local form also contains the ghosted entries.  If you want to
>operate strictly on the global entries, you can access the global form
>directly.
>
>Implementation-wise, the vectors share memory for the global part.  This
>means that if you build a Krylov space with VecGhost, you have allocated
>storage for the ghosted entries for every Krylov vector, even though the
>algorithm will never use them.  VecGhost is premature "optimization"
>("pessimization") in many cases, so consider just using a local work
>vector and performing a scatter from global to local.  It's probably
>much cheaper than you think.
>
>> 2. can i direct call VecGetArrary to the Vhat if i do not operate on the 
>> ghost value.
>>
>>
>>
>>     Vec Vhat;
>>     Vec LocalVhat;
>>     double* VhatVec;
>>
>>   
>> VecCreateGhost(PETSC_COMM_WORLD,aMesh->Nx*aMesh->Ny/Commsize,PETSC_DECIDE,aMesh->nghosts,&aMesh->ghosts[0],&Vhat);
>>       
>>     VecGhostGetLocalForm(Vhat,&LocalVhat);
>
>Update, _then_ get the local form.  Remember to restore the local form
>when you are done with it.
>
>>     VecGhostUpdateBegin(Vhat,INSERT_VALUES,SCATTER_FORWARD);
>>     VecGhostUpdateEnd(Vhat,INSERT_VALUES,SCATTER_FORWARD); 

Reply via email to