[Trilinos-Users] Is the Epetra support symmetrical matrix?
Heroux, Michael A
maherou at sandia.gov
Mon Apr 11 05:55:03 MDT 2011
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.
Mike
On 4/11/11 2:05 AM, "Shibin Tang" <rockydut at gmail.com> wrote:
> Dear Colleagues:
>
> I want to know if the Epetra can support symmetrical matrix storage?
> For example, the matrix is:
> 1 2 3
> 2 4 6
> 3 6 7
> Is the storage of matrix in Epetra can only store the upper or lower matrix,
> which can reduce the memory require?
> If it is right, how to do it?
>
>
> Best regards!
>
> Yours sincerely
> Rocky
>
>
> _______________________________________________
> Trilinos-Users mailing list
> Trilinos-Users at software.sandia.gov
> http://software.sandia.gov/mailman/listinfo/trilinos-users
More information about the Trilinos-Users
mailing list