[petsc-users] dmda and vec distribution

Barry Smith bsmith at mcs.anl.gov
Wed Jan 1 14:33:32 CST 2014


On Jan 1, 2014, at 2:13 PM, Gideon Simpson <gideon.simpson at gmail.com> wrote:

> 
> On Jan 1, 2014, at 3:06 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:
> 
>> 
>> On Jan 1, 2014, at 1:48 PM, Gideon Simpson <gideon.simpson at gmail.com> wrote:
>> 
>>> I'll try that, but I'm still a bit confused over the relationship between DMDA and Vec objects. 
>>> 
>>> Supposing I called DMDACreate1d with M as my global dimension and dof as the number of degrees of freedom.  So this is really managing M * dof scalars.  When I call DMCreateGlobalVector, isn't that associated with an M * dof size vector? I really just want to clone a vector of size M, but with the same partitioning.
>>> 
>>    You should create two DM objects: one with a dof argument > 1 and one with a dof argument of 1. Now use the DMCreateGlobalVector() on the one with dof of 1 to create the vector of total size M.
>> 
>>   When you create DMDA objects with all other arguments the same except the dof they are guaranteed to have the same parallel distribution.
>> 
> 
> This is somehow enforced as soon as PetscInitialize is called?

   No, nothing to do with PetscInitialize(). It is simply that when a DMDA object is created all the dof values for a grid point are always on the same process hence it doesn’t matter what dof is, the same grid points are always on the same process for any such DMDA regardless of what its dof is.

   Barry

> 
> -gideon
> 
> 
>>  Barry
>> 
>> 
>>> -gideon
>>> 
>>> On Jan 1, 2014, at 2:41 PM, Jed Brown <jedbrown at mcs.anl.gov> wrote:
>>> 
>>>> Gideon Simpson <gideon.simpson at gmail.com> writes:
>>>> 
>>>>> Suppose I have a 1D dmda structure distributed across N processors,
>>>>> where there are some number of degrees of freedom (dof) associated
>>>>> with each element.  Now, suppose I want to have a vec also distributed
>>>>> across the N processors, but distributed "in the same way" as the
>>>>> dmda.  That is to say, if I call
>>>>> 
>>>>> DMDAGetCorners(da, &idx_lo, NULL, NULL, &idx_width, NULL, NULL);
>>>>> 
>>>>> idx_lo to idx_lo+ idx_width
>>>>> 
>>>>> are the same indices I'd get if I called
>>>>> 
>>>>> VecGetOwnershipRange(vec, &idx_low, &idx_hi);
>>>>> 
>>>>> Can I do this?  How?
>>>> 
>>>> What's wrong with DMCreateGlobalVector()?
>>> 
>> 
> 



More information about the petsc-users mailing list