[petsc-dev] MetSetBlockSize issue
Mark F. Adams
mark.adams at columbia.edu
Tue Apr 24 14:00:49 CDT 2012
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