[petsc-users] Dropping single entries in matrix insertion for block matrices
Jed Brown
jed at jedbrown.org
Mon Dec 10 20:30:59 CST 2018
"Smith, Barry F." <bsmith at mcs.anl.gov> writes:
>> 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 could just create a scalar mapping.
>> 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.
Is that an interface changing or just not erroring in a circumstance
where it previously did? I normally think of interface change meaning
that previously correct code either behaves differently or fails.
More information about the petsc-users
mailing list