[Trilinos-Users] EpetraExt MatrixMatrix

Kevin Long kevin.long at ttu.edu
Tue Jun 1 17:23:29 MDT 2010


Hi,

Vicki Howle and I have encountered a problem for which we want to compute 
explicitly (as an Epetra_CrsMatrix) the product B^T D B, where D is a 
diagonal matrix. We have B as an Epetra_CrsMatrix and diag(D) as an 
Epetra_Vector. 

We can do this easily enough by making an Epetra_CrsMatrix representation of 
D, then calling EpetraExt::MatrixMatrix::Multiply() twice, first to form 
C1=D*B, then again to form C= B^T C1.  The second call can use 
transposeA=true so we don't need to form B^T. 

Alternatively, I could form C1=sqrt(D) B, then do C1^T C1. Again, not hard to 
write. 

However, neither approach takes advantage of the fact that D is diagonal, 
which means (a) I need to construct a whole Epetra_CrsMatrix for something 
that can really just be stored as a vector, and (b) inside 
MatrixMatrix::Multiply(), I'm doing needless work to find the graph of the 
product D B when I already know that D B and B will have the same graph. 

The operation B^T D B is a fairly common; any chance that someone will extend 
MatrixMatrix to provide an optimized multiply for that case? Or better yet, 
has anyone already written such code?  

Thanks,

Kevin





-- 
------------------------------------------------------
Kevin Long
Associate Professor
Department of Mathematics and Statistics
Texas Tech University
Lubbock, TX 

"The end of fear is the beginning of wisdom" 
    -- Bertrand Russell
------------------------------------------------------



More information about the Trilinos-Users mailing list