> > Or VecGetSubVectorDM(vec,PetscInt numfields,PetscInt *fields,&subvec)? The > problem with this one is each new call has to create a new subdm unless we > stash it in the DM.
I also don't like the name for this one as it doesn't have any DM in its arguments, while VecGetSubVectorDM(vec,subdm,&subvec) or DMCreateSubDM() do. On 7 November 2016 at 17:56, Barry Smith <[email protected]> wrote: > > So something like VecGetSubVectorDM(vec,subdm,&subvec)? I hate having > so many functions but don't see how to avoid it. Or > > VecGetSubVectorDM(vec,PetscInt numfields,PetscInt *fields,&subvec)? The > problem with this one is each new call has to create a new subdm unless we > stash it in the DM. > > > > > > On Nov 7, 2016, at 6:17 AM, Matthew Knepley <[email protected]> wrote: > > > > The way we have chosen to manage Vec output is to override the VecView > function with DM-specific output functions. This strategy is currently > broken for VecGetSubVector(). > > > > Really what we want is for the Vec to have the correct subdm if indeed > it is a subfield. However, its possible that the IS is some random thing, > like points intersecting some surface, so we don't want it to blindly copy > over the function pointers. > > > > How about we supplement DMCreateSubDM() with VecGetSubvectorDM(), which > calls it underneath and sets up the vector correctly? > > > > Matt > > > > -- > > What most experimenters take for granted before they begin their > experiments is infinitely more interesting than any results to which their > experiments lead. > > -- Norbert Wiener > >
