[petsc-users] Dropping single entries in matrix insertion for block matrices

Smith, Barry F. bsmith at mcs.anl.gov
Mon Dec 10 20:04:02 CST 2018



> On Dec 10, 2018, at 7:58 PM, Jed Brown <jed at jedbrown.org> wrote:
> 
> "Smith, Barry F. via petsc-users" <petsc-users at mcs.anl.gov> writes:
> 
>>   Well the thing is the indices you pass in are currently always
>>   "blocked base", they work automatically for both blocked and non
>>   blocked versions of MatSetValuesLocal(). 
> 
> What do you mean?

   The indices passed to ISLocalToGlobalMappingCreate() are with respect to the block size of the mapping which has to match the block size of the matrix.

>  You pass block indices to MatSetValuesBlocked and
> scalar indices to MatSetValues.  In MatSetValues_SeqBAIJ, for example
> 
>  for (k=0; k<m; k++) { /* loop over added rows */
>    row  = im[k];
>    brow = row/bs;
> 
>>   To support what you want you need to be able to pass in nonblock
>>   based version of the indices and (as you noted) keep track of
>>   whether you pass in the blocked or non blocked indices so you can
>>   apply the scaling or not.
>> 
>>   Ok, give it a try, it does change the interface a bit but I suppose
>>   is worth it since it introduces more functionality.
> 
> How would the interface change?

    One would now be able to pass a non-blocked ISLocalToGlobalMapping to a blocked matrix. This is currently not allowed/supported. 



More information about the petsc-users mailing list