[petsc-users] difference between local and global vectors
TAY wee-beng
zonexo at gmail.com
Wed Aug 19 03:28:25 CDT 2015
On 19/8/2015 4:26 PM, Dave May wrote:
>
>
> On 19 August 2015 at 10:20, TAY wee-beng <zonexo at gmail.com
> <mailto: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
>> <mailto: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?
Well, I mean when I don't need to solve the linear eqn. But of course,
later on in the code, when I need to, I will require the global vector.
Thanks
>
> Cheers,
> Dave
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20150819/179a7db6/attachment-0001.html>
More information about the petsc-users
mailing list