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

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



> On Dec 10, 2018, at 8:30 PM, Jed Brown <jed at jedbrown.org> wrote:
> 
> "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?

    It is more than not erroring; it could not do what is requested (and it printed a useful error message). In the new case where you pass a scalar mapping it will not be able to do the MatSetValuesLocalBlocked() while it can do MatSetValuesLocal() so it could be slightly confusing. I'm fine with trying it as I said.

>  I normally think of interface change meaning
> that previously correct code either behaves differently or fails.



More information about the petsc-users mailing list