[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