[petsc-dev] MetSetBlockSize issue
Barry Smith
bsmith at mcs.anl.gov
Tue Apr 24 16:01:36 CDT 2012
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
>> >>>>>
>> >>>>>
>> >>>>
>> >>>
>> >>>
>> >>
>> >
>> >
>>
>>
>
More information about the petsc-dev
mailing list