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
