[Trilinos-Users] Epetra_SerialDenseSolver, Solve method.

Heroux, Mike MHeroux at csbsju.edu
Wed Nov 27 12:46:01 MST 2013


The reason for wanting B and X to be the same array is that the next line of code:

    GETRS(TRANS_, N_, NRHS_, AF_, LDAF_, IPIV_, X_, LDX_, &INFO_);

 is a call to the LAPACK function DGETRS, which expects the RHS and solution vector to be the same array.

I think you can fix this issue by passing X in as both arguments to the SetVectors method.  Make sure that prior to calling Solve, X contains the right-hand-side values.

Does this help?


From: <Bertagna>, Luca <lbertag at emory.edu<mailto:lbertag at emory.edu>>
Date: Monday, November 25, 2013 6:46 PM
To: "trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>" <trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>
Subject: [Trilinos-Users] Epetra_SerialDenseSolver, Solve method.

Dear all,

I have a question about Epetra_SerialDenseSolver, in particular about its Solve method.

I am calling Solve after setting as solution vector an Epetra_SerialDenseVector X which is the view of an array Y. However, when the Solve method is performed and the matrix is not inverted, the following piece of code is executed:

    if (B_!=X_) {

       *LHS_ = *RHS_; // Copy B to X if needed

       X_ = LHS_->A(); LDX_ = LHS_->LDA();


This copies the rhs B into the solution vector X, which causes the loss of the view property of the vector X.

I'm having a hard time understanding what's the reason of this implementation choice. After all, if the matrix is already inverted, this copy X => B is not performed (there's even a comment specifying that B and X must be different in that case). And, even more, X and B might even have different dimensions, as far as I understand (otherwise the variable MinMN_ would have no meaning).


Luca Bertagna
Math&CS, Emory University, Atlanta

More information about the Trilinos-Users mailing list