[Trilinos-Users] Symmetric Epetra_CrsMatrix ?

Heroux, Michael A maherou at sandia.gov
Fri Nov 28 15:55:40 MST 2008


There is no explicit support for symmetric storage.  However, it is possible to realize the storage savings by storing the main diagonal as an Epetra_Vector object and the strictly upper or lower triangle as an Epetra_CrsMatrix object.  Then computing y = Ax would be approximatly as follows:

// upperA and diagA were previously constructed

Epetra_Vector Atx(y.Map());

upperA.Multiply(false, x, y);
upperA.Multiply(true, x, Atx);
diagA.Multiply(1.0, diagA, x, y, 1.0);
y.Update(1.0, Atx, 1.0);

Note that if your x and y are Epetra_MultiVectors, the same sequence works if you make Atx a MultiVector.

There are other combinations of functions that will work also.  This approach does not get the computational performance that a true symmetric matvec would get, but does save storage.   We have discussed a symmetric multiply function in the past, but have not followed through on its implementation.  When considered in the larger context of preconditioned iterative methods, full support for symmetric storage is a large effort and its payoff is hard to realize for our typical problem base that is primarily a broad set that is mostly nonsymmetric.

We will continue to evaluate the value of native support for symmetric storage.

I hope this helps.


On 11/27/08 2:43 PM, "Antoine Dechaume" <boolegue at gmail.com> wrote:


is there a way to specify a symmetric Epetra_CrsMatrix that will store
only upper part for instance ?


Trilinos-Users mailing list
Trilinos-Users at software.sandia.gov

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://software.sandia.gov/mailman/private/trilinos-users/attachments/20081128/6327201a/attachment.html 

More information about the Trilinos-Users mailing list