On Mar 15, 2011, at 5:24 PM, Jed Brown wrote: > On Tue, Mar 15, 2011 at 20:47, Barry Smith <bsmith at mcs.anl.gov> wrote: > Do you form the big-assed matrix > > | A dg_dx | > > | df_dy df_dx | > > explicitly as one big matrix? And each time-step you changes values in the > dg_dx, df_dy and df_dx parts with MatSetValues? > > > One fix may be to make PCSetUp() smarter and know the matrix has not > changed and hence it doesn't have to be refactored (instead of only relying > on the flag passed to KSPSetOperators()). > > If you use MatNest (the logical choice with PCFieldSplit, it's a runtime > option except for preallocation), then we could PetscObjectStateQuery() to > decide when sub-objects need to be rebuilt. Seems like a better > general-purpose solution if you want an easy high-level way to control when > things get rebuilt.
I'd like the flow control and ability to "do things" on inner blocks to be the same regardless of the matrix class being used. I don't want suddenly much more to code with or better functionality if you've chose one matrix class over another (maybe much better speed but that is a different question). So that's why I don't want it hardwired to MatNest (and that would also make it non-general purpose even though you claim it "better general purpose".) Barry
