On Apr 25, 2012, at 2:44 PM, Mark F. Adams wrote:

> 
> On Apr 25, 2012, at 12:22 PM, Hong Zhang wrote:
> 
>> 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? 
> 
> This is an architectural/API decision.  I will do what you and Barry want.  
> You could add a parameter to PtAP, or add a field to Mat (column block size), 
> or whatever.

   Mark,

     I'm leaning towards setting a column block size, MatSetColumnBlockSize(). 
But what exactly is a "column block size"?  Is it really a column blocksize in 
the sense that nbs columns next to each other always have the exact same 
nonzero pattern: for example

xx  00   xx 00 
yy  00   yy 00 
zz  00  zz  00 

or is it a more vague thing that defined by "well if you compute Pt A P the 
result has a blocksize of nbs".  In that case we would provide a 
MatSetVirtualColumnBlockSize() 

    Thanks

   Barry

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


Reply via email to