On Jan 1, 2014, at 3:06 PM, Barry Smith <[email protected]> wrote: > > On Jan 1, 2014, at 1:48 PM, Gideon Simpson <[email protected]> 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? -gideon > Barry > > >> -gideon >> >> On Jan 1, 2014, at 2:41 PM, Jed Brown <[email protected]> wrote: >> >>> Gideon Simpson <[email protected]> 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()? >> >
