[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
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...
More information about the Trilinos-Users