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? On Thu, Feb 23, 2012 at 2:32 PM, Bojan Niceno <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> 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> 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/20120223/f99f0851/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/20120223/f99f0851/attachment-0002.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/20120223/f99f0851/attachment-0003.png>
