[petsc-dev] MetSetBlockSize issue

Hong Zhang hzhang at mcs.anl.gov
Wed Apr 25 11:22:49 CDT 2012


Mark,

I attach it with this code:
>
>  /* attach block size of columns */
>  if( pc_gamg->col_bs_id == -1 ) {
>    ierr = PetscObjectComposedDataRegister( &pc_gamg->col_bs_id );
> assert(pc_gamg->col_bs_id != -1 );
>  }
>  ierr = PetscObjectComposedDataSetInt( (PetscObject)Prol,
> pc_gamg->col_bs_id, data_cols ); CHKERRQ(ierr);
>
> which Hong can not see w/o my ID.  so we need a mechanism for me to get
> this to PtAP.
>

Sorry, I do not understand what do you mean here.
Do you want add above into the implementation of PtAP or petsc?
Hong

>
> And MatGetSubMatrix has to inherit block size, which I assume is trial.
>
> Mark
>
> On Apr 24, 2012, at 11:14 PM, Barry Smith wrote:
>
> >
> > On Apr 24, 2012, at 8:14 PM, Mark F. Adams wrote:
> >
> >>
> >> On Apr 24, 2012, at 5:01 PM, Barry Smith wrote:
> >>
> >>>
> >>> On Apr 24, 2012, at 2:38 PM, Mark F. Adams wrote:
> >>>
> >>>>
> >>>> On Apr 24, 2012, at 3:28 PM, Hong Zhang wrote:
> >>>>
> >>>>> Mark :
> >>>>> Shall C=PtAP inherit the block size of A?
> >>>>> Currently, MatPtAP() is only implemented with aij bs=1.
> >>>>
> >>>> No, as I said, algebraically it should inherit the column block size
> of P, but that is not available.
> >>>
> >>> What is the column block size of P and how do you know what it is?
> >>
> >> I now attach it to the P matrix instead of adding it as a return
> parameter of the create P method.  So I keep track of it in the code.  Its
> size is the number of null space vectors.
> >
> >  Ok if P knows its block size then the code that computes PtAP can set
> the block size of the resulting matrix as it creates it using the
> information in P. So is the issue on calling MatSetBlockSize() now resolved
> and everyone happy?
> >
> >   Barry
> >
> >>
> >> Mark
> >>
> >>>
> >>> Barry
> >>>
> >>>>
> >>>> Perhaps PtAP should take a parameter for the block size ...
> >>>>
> >>>> Mark
> >>>>
> >>>>> Hong
> >>>>>
> >>>>> On Apr 24, 2012, at 2:55 PM, Barry Smith wrote:
> >>>>>
> >>>>>>
> >>>>>> On Apr 24, 2012, at 1:39 PM, Mark F. Adams wrote:
> >>>>>>
> >>>>>>> Now I'm getting this error with code like this:
> >>>>>>>
> >>>>>>>  ierr = MatGetSubMatrix( Cmat, new_eq_indices, new_eq_indices,
> MAT_INITIAL_MATRIX, &mat );
> >>>>>>>  CHKERRQ(ierr);
> >>>>>>>  ierr = MatSetBlockSize( mat, cbs );      CHKERRQ(ierr);
> >>>>>>>
> >>>>>>> and like this:
> >>>>>>>
> >>>>>>> ierr = MatPtAP( Amat_fine, Pold, MAT_INITIAL_MATRIX, 2.0, &Cmat );
> CHKERRQ(ierr);
> >>>>>>> ierr = MatSetBlockSize( Cmat, cbs );      CHKERRQ(ierr);
> >>>>>>
> >>>>>> Right you cannot do this. The matrix already exists so you cannot
> now set its size.
> >>>>>>
> >>>>>> Does Cmat have a block size of cbs
> >>>>>>
> >>>>>> What about Amat?   By default these routines should create the new
> matrix with the correct blocksize.
> >>>>>>
> >>>>>> The harder part is if the blocksize of mat would be different than
> Cmat?
> >>>>>>
> >>>>>
> >>>>> It seems like MatGetSubMatrix should just inherit the block size but
> PtAP is harder.  The block size of the Cmat is the column block size of P.
>  But I can not set a column block size (!= row block size) so I don't set
> block size on P at all.  Here cbs is this column block size of P, or what
> it should be.
> >>>>>
> >>>>> Mark
> >>>>>
> >>>>>> Barry
> >>>>>>
> >>>>>>>
> >>>>>>> Mark
> >>>>>>>
> >>>>>>> On Apr 23, 2012, at 9:09 PM, Barry Smith wrote:
> >>>>>>>
> >>>>>>>>
> >>>>>>>> Yes, look, for example how ex32 is handled at the bottom of the
> makefile.
> >>>>>>>>
> >>>>>>>> Thanks
> >>>>>>>>
> >>>>>>>> Barry
> >>>>>>>>
> >>>>>>>> On Apr 23, 2012, at 5:50 PM, Mark F. Adams wrote:
> >>>>>>>>
> >>>>>>>>>
> >>>>>>>>> On Apr 23, 2012, at 5:59 PM, Barry Smith wrote:
> >>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> It was changed a while ago that MatSetBlockSize() couldn't be
> set after the matrix was full instantiated. I guess that example did not
> get fixed because it is not listed in the makefile to run in the makeall.
> >>>>>>>>>
> >>>>>>>>> May I add it?
> >>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> I have fixed the example to call MatSetBlockSize() at a safe
> point.
> >>>>>>>>>>
> >>>>>>>>>> Barry
> >>>>>>>>>>
> >>>>>>>>>> On Apr 23, 2012, at 4:29 PM, Mark F. Adams wrote:
> >>>>>>>>>>
> >>>>>>>>>>> ex55.c in ksp is failing with:
> >>>>>>>>>>>
> >>>>>>>>>>> [0]PETSC ERROR: --------------------- Error Message
> ------------------------------------
> >>>>>>>>>>> [0]PETSC ERROR: Arguments are incompatible!
> >>>>>>>>>>> [0]PETSC ERROR: Cannot change block size 1 to 2!
> >>>>>>>>>>> [0]PETSC ERROR:
> ------------------------------------------------------------------------
> >>>>>>>>>>>
> >>>>>>>>>>> on this line 57 of ex55.c:
> >>>>>>>>>>>
> >>>>>>>>>>> ierr = MatSetBlockSize(Amat,2);      CHKERRQ(ierr);
> >>>>>>>>>>>
> >>>>>>>>>>> Any idea what happened here?
> >>>>>>>>>>>
> >>>>>>>>>>> Mark
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>>
> >>>>>
> >>>>>
> >>>>
> >>>
> >>>
> >>
> >
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20120425/220e612c/attachment.html>


More information about the petsc-dev mailing list