[petsc-dev] mat nest is done
Barry Smith
bsmith at mcs.anl.gov
Fri Nov 26 14:27:55 CST 2010
On Nov 26, 2010, at 12:29 PM, Jed Brown wrote:
> On Fri, Nov 26, 2010 at 01:29, Barry Smith <bsmith at mcs.anl.gov> wrote:
> The easiest fix would be to put MatPreallocated() at the beginning of MatGetSizes() and whatever else doesn't have it. I don't know if there would be any bad side affects to making this change.
>
> The problem is that MatGetSize() is not collective.
>
> Is it really necessary to have preallocation be the same as knowing the sizes?
No, they can be done at different stages. It is just a question of how many "setup" stages we want to have, it looks like we are heading for more and more.
> What I didn't notice is that, while there is still ops->setsizes, none of the implementations use it any more. I thought the idea was that MatCreate_X would set up the layout if the sizes had been set, otherwise it would drop its callback into ops->setsizes, and set up the layout when the user subsequently called MatSetSizes
I think this model would work.
> (where this dispatch logic still is).
But note the code then overwrites the sizes
A->rmap->n = m;
A->cmap->n = n;
A->rmap->N = M;
A->cmap->N = N;
which is wrong.
> I didn't realize/remember that it was actually MatCreate_X that was registered in the callback. That of course causes trouble because you MatSetType(A,MATAIJ) and then calls to MATSeqAIJXXX are ignored.
>
> I know it is some added implementation complexity, but how about calling MatCreate_X directly in MatSetType,
It is currently called at that time.
> and have an independent ops->setsizes which will set up the layout?
Yes, I had squeezed it into the preallocated check because I was trying to avoid too many stages of "setup" but I think we have no choice but to introduce this one more stage.
Barry
>
> Jed
More information about the petsc-dev
mailing list