Good point. Actually, should this be pushed all the way to the level of VecScatter? That would necessitate an introduction of something like VecScatterTranspose (by analogy with the induced linear operator) or VecScatterInvert. The implementation of VecScatterTranspose is trivially carried out at the interface level with a flag, which would cause an appropriate change in the ScatterMode submitted to ops->scatterbegin, ops->scatterend.
Then, MatTranspose for MATSCATTER could be implemented by transposing the underlying VecScatter (incurring extra storage) or transposing the underlying scatter on MatScatterGetVecScatter (this is much less clean, though). Any thoughts? Thanks. Dmitry. On Mon, Mar 29, 2010 at 1:14 PM, Jed Brown <jed at 59a2.org> wrote: > On Mon, 29 Mar 2010 12:57:53 -0600, Dmitry Karpeev <karpeev at mcs.anl.gov> > wrote: >> Is there any reason why MATSCATTER doesn't implement MatTranspose? >> It seems to me that it would be easy to accomplish by reversing >> MatMultXXX and MatMultTransposeXXX >> in MATSCATTER's ops vtable. > > Makes sense to me, just be careful with MatScatterGetVecScatter(). > > Jed >
