On Sat, May 14, 2011 at 11:51 AM, Barry Smith <bsmith at mcs.anl.gov> wrote:
>
> ? ?I have a proposal for a moderate/major change for how we handle knowledge 
> of subfields/splits in PETSc.
>
> ? ?Currently one can call PCFieldSplitSetIS() or PCFieldSplitSetFields() to 
> indicate the splitting of vectors(fields) into subvectors(subfields). ?But, 
> in fact, the knowledge of what splits make sense really comes in the 
> generation of the vectors and matrices and it is bad that the user needs to 
> stash that information somewhere and then bring it out and attach it to the 
> PCFieldSplit. It is especially annoying if one is using a fieldsplit inside, 
> say a multigrid preconditioner, and one has to somehow get that information 
> down into the inner PC.
>
> ? I propose an alternative. All Vecs and Mats currently have associated 
> PetscLayouts and when a Vec or Mat is duplicated the new Vec or Mat has that 
> same PetscLayout. I propose each PetscLayout have associated with it an 
> optional set of IS indicating the subfields/subvectors (note that this is 
> sort of already true when you set a blocksize larger than 1 the PCFieldSplit 
> will by default use the strides for subfields). Thus PCFieldSplit can get 
> directly from its matrix the appropriate default splits. ? Similarly the 
> VecStrideXXX() operations can be made more general becoming VecSubVecXXX(). 
> We also add VecGetSubVec() to get appropriated sized subvectors easily.
>
> ? The end result will be a relatively small change in the PETSc API and for 
> most users little or absolutely no change, but the power to compose easily 
> will really increase.
>
> ? Comments, objections, improvements?

Can these split ISs have communicators different from that of
PetscLayout (this is something I use in GASM,
for example)?

>
> ? ?Do this before or after the next release? (I guess the conventional wisdom 
> answer would be after?).
>
>
> ? ?Barry
>
>
> BTW: It is true that parallel vectors and matrices share the PetscLayout from 
> their parent object (via VecDuplicate/MatDuplicate) but this is not true to 
> sequential Vec and Mat. Before adding Field information to PetscLayouts I 
> would need to change all the sequential duplicates to get a reference to 
> their parents PetscLayout instead of creating a new one.
>
>

Reply via email to