[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