[petsc-users] Accessing Vector's ghost values

Bojan Niceno bojan.niceno at psi.ch
Thu Feb 23 17:38:46 CST 2012


Yeeee-ha!

VecGhostUpdateBegin() / VecGhostUpdateEnd() was indeed what I was missing.

Thank you Mohammad, thank you all who helped me today!


     Cheers


     Bojan



On 2/24/2012 12:27 AM, Mohammad Mirzadeh wrote:
> You also need calls to VecGhostUpdateBegin()/VecGhostUpdateEnd() 
> functions to update the ghost values if you change them in the global 
> representation. See Petsc Manual 3.2 pp 55-56
>
> Mohammad
>
> On Thu, Feb 23, 2012 at 3:18 PM, Bojan Niceno <bojan.niceno at psi.ch 
> <mailto:bojan.niceno at psi.ch>> wrote:
>
>     On 2/23/2012 11:49 PM, Mohammad Mirzadeh wrote:
>>     based on,
>>
>>     VecCreateGhost(PETSC_COMM_WORLD, n, PETSC_DECIDE, nghost,
>>     &ghosts[0], &x);
>>
>>
>>     it seems to me that x is your actual ghosted vector. If this is
>>     true, then you need to get its "local" form via
>>     VecGhostGetLocalForm
>>     <http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/VecGhostGetLocalForm.html#VecGhostGetLocalForm>().
>>     Once you have done, you should be able to access the ghosted
>>     nodes. Are you calling this function anywhere?
>
>     I tried that before.  I did:
>
>     Vec lx;
>     VecGhostGetLocalForm(x, &lx)
>
>     then I copied "lx" to my variable, like
>
>     for(Int i=1; i<N; i++)    /* N includes buffer cells */
>       unk[i] = lx[i]
>
>     but ghost values were also zero.   I am thinking that PETSc
>     somehow clears the ghost values after a call to KSP.  Is it the case?
>
>
>         Kind regards,
>
>
>         Bojan
>
>
>>
>>     On Thu, Feb 23, 2012 at 2:32 PM, Bojan Niceno
>>     <bojan.niceno at psi.ch <mailto:bojan.niceno at psi.ch>> wrote:
>>
>>         Dear Mohammad,
>>
>>
>>         it doesn't help me, or I did not understand your explanation.
>>
>>         If I do this:
>>
>>           /* copy internal values (THIS WORKS, BUT COPIES NO BUFFER
>>         VALUES) */
>>
>>           for(Int i=0; i<n; i++) {
>>             Int gi = mesh.nodes[i].global_number;
>>             VecGetValues(x, 1, &gi, &unk[i]);
>>           }
>>
>>           /* copy ghost values (CREATES MANY WARNINGS */
>>
>>           for(Int i=n; i<N; i++) {
>>             VecGetValues(x, 1, &i, &unk[i]);
>>           }
>>
>>         I get arnings are like this.
>>
>>         [0]PETSC ERROR: --------------------- Error Message
>>         ------------------------------------
>>         [0]PETSC ERROR: Argument out of range!
>>         [0]PETSC ERROR: Can only get local values, trying 3518!
>>         [3]PETSC ERROR: --------------------- Error Message
>>         ------------------------------------
>>         [3]PETSC ERROR: Argument out of range!
>>         [3]PETSC ERROR: Can only get local values, trying 3511!
>>         [3]PETSC ERROR:
>>         ------------------------------------------------------------------------
>>
>>         What am I doing wrong here?
>>
>>
>>             Cheers,
>>
>>
>>             Bojan
>>
>>
>>
>>         On 2/23/2012 11:23 PM, Mohammad Mirzadeh wrote:
>>>
>>>         just index x with the local numberings. if you have 'n'
>>>         local nodes and 'g' ghost nodes in x, ghost nodes indecies
>>>         run from 'n' to 'n+g-1'
>>>
>>>         On Feb 23, 2012 1:16 PM, "Bojan Niceno" <bojan.niceno at psi.ch
>>>         <mailto:bojan.niceno at psi.ch>> wrote:
>>>
>>>             Dear Jed,
>>>
>>>             thanks.
>>>
>>>             Now I have the following:
>>>
>>>             - Array unk, which should hold values inside the
>>>             partition and in ghost cells.  It is big enough to hold both
>>>             - Vec x, created by command VecCreateGhost, with proper
>>>             padding for ghost cells
>>>             - Successful call to linear solver in parallel.
>>>
>>>             But I need to copy ghost values from x to my array unk.
>>>
>>>             How can I do it?
>>>
>>>
>>>                 Kind regards,
>>>
>>>
>>>                 Bojan
>>>
>>>             On 2/23/2012 10:10 PM, Jed Brown wrote:
>>>>             On Thu, Feb 23, 2012 at 15:05, Bojan Niceno
>>>>             <bojan.niceno at psi.ch <mailto:bojan.niceno at psi.ch>> wrote:
>>>>
>>>>                 No, I use global.
>>>>
>>>>
>>>>             The local form is just a local vector. It doesn't even
>>>>             know that a global problem exists. You can't index into
>>>>             it using global indices. (In general, there is no
>>>>             efficient way to look up information in the local
>>>>             vector (includes ghost points) using global indices.)
>>>>
>>>>
>>>>                   for(Int i=0; i<n; i++) {
>>>>                     Int gi = mesh.nodes[i].global_number;
>>>>                     VecGetValues(x, 1, &gi, &unk[i]);
>>>>                   }
>>>>
>>>>                 "n" is defined as the number of cells inside, i.e.
>>>>                 without buffers.  "unk" is my external array.  If I
>>>>                 try to access buffer values, I use:
>>>>
>>>>                   for(Int i=0; i<N; i++) {
>>>>                     Int gi = mesh.nodes[i].global_number;
>>>>                     VecGetValues(x, 1, &gi, &unk[i]);
>>>>                   }
>>>>
>>>>                 But then I end up with tons of warnings, presumably
>>>>                 because I am going beyond "n".  Vector x was
>>>>                 created with VecCreateGhost.
>>>>
>>>>
>>>
>>>
>>>             -- 
>>>
>>
>>
>>         -- 
>>
>>
>
>
>     -- 
>
>


-- 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120224/8d860f63/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/png
Size: 6515 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120224/8d860f63/attachment-0004.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/png
Size: 6515 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120224/8d860f63/attachment-0005.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/png
Size: 6515 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120224/8d860f63/attachment-0006.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Signature.png
Type: image/png
Size: 6515 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120224/8d860f63/attachment-0007.png>


More information about the petsc-users mailing list