[petsc-dev] MetSetBlockSize issue

Mark F. Adams mark.adams at columbia.edu
Tue Apr 24 20:14:25 CDT 2012


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.

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




More information about the petsc-dev mailing list