[Trilinos-Users] CrsMatrix with col map is broken
Jonathan Guyer
jonathan.guyer at nist.gov
Tue Mar 29 11:30:58 MDT 2011
On Mar 28, 2011, at 9:55 AM, Williams, Alan B wrote:
>>
>>> From my perusal of the code, it's not clear that Epetra really solves
>> anything. Rather, it uses the row map for the column map and than
>> blithely ignores it for the purposes of InsertGlobalValues(), allowing
>> you to write into "off-processor" columns. I actually went looking for
>> how it made a "proper" column map and it doesn't look like it does.
>>
>
> It creates a column-map during FillComplete().
Ah, OK. I confess that I didn't look that far, because I was confused how InsertGlobalValues() could even do the right thing in the first place. Once I determined that it cheated, I didn't go any further.
> It's true that constructor arguments don't fully define the structure of the matrix.
> Note that the column-map is defined by your sparsity pattern (the structure of your graph). It can range from being the same as your row-map (if your matrix is block-diagonal) to being full (1 to global-n) on every processor. So it depends on how your graph ends up.
> You pass a domain-map and range-map to FillComplete(). Domain-map and range-map define the "mathematical shape" of your matrix. If you don't pass these to FillComplete, then epetra assumes that your matrix is square and that the range-map is the row-map.
OK, I think I follow. The examples in Mike Heroux's talk <http://www.hpcsw.org/presentations/workshops/scalable_tools/heroux_101.pdf> make it seem like you can mix and match all four of these maps, but I see that you really can't.
Thanks to your (and Matt's) help, I think I now have things working the way I want them. It didn't take as much special-casing as I feared.
More information about the Trilinos-Users
mailing list