[petsc-users] difference between local and global vectors

Dave May dave.mayhem23 at gmail.com
Wed Aug 19 03:26:13 CDT 2015


On 19 August 2015 at 10:20, TAY wee-beng <zonexo at gmail.com> wrote:

>
> On 19/8/2015 1:17 PM, Dave May wrote:
>
>
>
> On 19 August 2015 at 03:38, TAY wee-beng <zonexo at gmail.com> wrote:
>
>> Hi,
>>
>> I am using DA. For e.g.
>>
>> DM da_u
>>
>> call
>> DMDACreate3d(MPI_COMM_WORLD,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DMDA_STENCIL_STAR,size_x,size_y,&
>>
>>
>> size_z,1,PETSC_DECIDE,PETSC_DECIDE,1,stencil_width,lx,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER,da_u,ierr)
>>
>> call DMCreateGlobalVector(da_u,u_global,ierr)
>>
>> call DMCreateLocalVector(da_u,u_local,ierr)
>>
>> To update the ghost values, I use:
>>
>> call DMLocalToLocalBegin(da_u,u_local,INSERT_VALUES,u_local,ierr)
>>
>> call DMLocalToLocalEnd(da_u,u_local,INSERT_VALUES,u_local,ierr)
>>
>
>
> This is incorrect.
> The manpage for DMLocalToLocal clearly says "Maps from a local vector
> (including ghost points that contain irrelevant values) to another local
> vector where the ghost points in the second are set correctly."
> To update ghost values from a global vector (e.g. to perform the scatter)
> you need to use DMGlobalToLocalBegin() , DMGlobalToLocalEnd().
>
>
I must apologize (and should have read my own email :D)
- I misunderstood what DMLocalToLocalBegin/End does.
Indeed it will give produce the correct / updated ghost values.



> Hi Dave,
>
> Thanks for the clarification although I'm still confused. Supposed I have
> a 1D vector da_u, It has size 8, so it's like da_u_array(8), with stencil
> width 1
>
> So for 2 procs,
>
> there will be 2 da_u_array - da_u_array(1:5) and da_u_array(4:8)
>
> After performing some operations on each procs's da_u_array, I need to
> update 1st procs's da_u_array(5) and 2nd procs's da_u_array(4) from the 2nd
> and 1st procs respectively. I simply call:
>
> call DMLocalToLocalBegin(da_u,u_local,INSERT_VALUES,u_local,ierr)
>
> call DMLocalToLocalEnd(da_u,u_local,INSERT_VALUES,u_local,ierr)
>
> and it seems to be enough. I check the ghost values and they have been
> updated.
>

Yeah, this is correct.
Sorry about my mistake in the previous email regarding what DMLocalToLocal
actually does.



> So if I am not using the linear solvers, I do not need the global
> vector,is that so?
>

I guess in the end it is application specific whether you need a global
vector or not.
I would have thought you always would want a global vector.

What is your application where you don't require a global vector?

Cheers,
  Dave
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20150819/3aad2788/attachment.html>


More information about the petsc-users mailing list