[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