On Mar 15, 2011, at 6:09 PM, Jed Brown wrote:

> On Wed, Mar 16, 2011 at 00:01, Barry Smith <bsmith at mcs.anl.gov> wrote:
> When a submatrix set is obtained from an AIJ it could mark the ranges the 
> submatrices, row and column, then when MatSetValues is called in the future 
> on the big matrix it could check what box the values are being put in and any 
> box that has none put in is unchanged. For this to be efficient the 
> submatrices have to be truly submatrices not just logically submatrix.
> 
> [A B; C D]
> 
> Two cases:
> 
> 1. If you only modify A, then the columns of B will still be marked 
> unmodified so you know that B has not been changed so the cheap flag works.
> 
> 2. Modify B and C, now the rows and columns of A and D will both be marked as 
> modified. The cheap flag doesn't work.

  You cannot just check the row and column separately. You need to check them 
as a pair.  If row < m and column < n mark A as changed. If row > m-1 and 
column < n mark B as checked etc. 
  
   I am not sure this is practical, but my point is that this information can 
in theory be tracked.

  
> 
> 
> Also, if any of these blocks is a finite element assembly, the user will 
> typically zero the matrix before assembly. (They can avoid it by doing a 
> traversal with MatSetValues(...,zero,INSERT_VALUES), then an assembly, then 
> run over it again with ADD_VALUES, but that's awfully cumbersome.)
> 
> 
>  But we should muck around on this a bit more before we figure out how we 
> want to handle the propagation of this kind of information efficiently and 
> automatically.
> 
> Agree


Reply via email to