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> 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> 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/99ad7b8a/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/99ad7b8a/attachment-0003.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/99ad7b8a/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/20120223/99ad7b8a/attachment-0005.png>
