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? 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 >> >>>>> >> >>>>> >> >>>> >> >>> >> >>> >> >> >> > >> > >> >> >