#include <Amesos_Scalapack.h>
Inheritance diagram for Amesos_Scalapack:
Public Member Functions | |
Amesos_Scalapack (const Epetra_LinearProblem &LinearProblem) | |
Amesos_Scalapack Constructor. | |
~Amesos_Scalapack (void) | |
Amesos_Scalapack Destructor. | |
int | SymbolicFactorization () |
Performs SymbolicFactorization on the matrix A. | |
int | NumericFactorization () |
Performs NumericFactorization on the matrix A. | |
int | Solve () |
Solves A X = B (or A^{T} X = B). | |
const Epetra_LinearProblem * | GetProblem () const |
Get a pointer to the Problem. | |
bool | MatrixShapeOK () const |
Returns true if SCALAPACK can handle this matrix shape. | |
int | SetUseTranspose (bool UseTranspose) |
SetUseTranpose(true) is more efficient in Amesos_Scalapack. | |
bool | UseTranspose () const |
Returns the current UseTranspose setting. | |
const Epetra_Comm & | Comm () const |
Returns a pointer to the Epetra_Comm communicator associated with this matrix. | |
int | SetParameters (Teuchos::ParameterList &ParameterList) |
Updates internal variables. | |
int | NumSymbolicFact () const |
Returns the number of symbolic factorizations performed by this object. | |
int | NumNumericFact () const |
Returns the number of numeric factorizations performed by this object. | |
int | NumSolve () const |
Returns the number of solves performed by this object. | |
void | PrintTiming () const |
Print timing information. | |
void | PrintStatus () const |
Print information about the factorization and solution phases. | |
void | GetTiming (Teuchos::ParameterList &TimingParameterList) const |
Extracts timing information from the current solver and places it in the parameter list. | |
Protected Attributes | |
int | iam_ |
int | NumGlobalElements_ |
int | NumGlobalNonzeros_ |
int | nprow_ |
int | npcol_ |
int | ictxt_ |
int | m_per_p_ |
int | DescA_ [10] |
Epetra_Map * | ScaLAPACK1DMap_ |
Epetra_CrsMatrix * | ScaLAPACK1DMatrix_ |
Epetra_Map * | VectorMap_ |
std::vector< double > | DenseA_ |
std::vector< int > | Ipiv_ |
int | NumOurRows_ |
int | NumOurColumns_ |
bool | UseTranspose_ |
const Epetra_LinearProblem * | Problem_ |
double | ConTime_ |
double | SymTime_ |
double | NumTime_ |
double | SolTime_ |
double | VecTime_ |
double | MatTime_ |
bool | TwoD_distribution_ |
int | grid_nb_ |
int | mypcol_ |
int | myprow_ |
Epetra_CrsMatrix * | FatOut_ |
int | nb_ |
int | lda_ |
Epetra_Time * | Time_ |
Amesos_Scalapack, an object-oriented wrapper for LAPACK and ScaLAPACK, will solve a linear systems of equations: A X = B
using Epetra objects and the ScaLAPACK library, where A
is an Epetra_RowMatrix and X
and B
are Epetra_MultiVector objects.
Amesos_Scalapack can be competitive for matrices that are not particularly sparse. ScaLAPACK solves matrices for which the fill-in is roughly 10% to 20% of the matrix size in time comparable to that achieve by other Amesos classes. Amesos_Scalapack scales well and hence its performance advantage will be largest when large number of processes are involved.
Amesos_Scalapack uses the ScaLAPACK functions PDGETRF and PDGETRS if more than one process is used. If only one process is used, Amesos_ScaLAPACK uses the LAPACK function PDGETRF and PDGETRS.
AmesosScaLAPACK uses full partial pivoting and will therefore provide answers that are at least as accurate as any direct sparse solver.
AmesosScalapack makes sense under the following circumstances:
Amesos_Scalapack supports the following parameters which are common to across multiple Amesos solvers:
None of the following limitations would be particularly difficult to remove.
The present implementation limits the number of right hand sides to the number of rows assigned to each process. i.e. nrhs < n/p.
The present implementation does not take advantage of symmetric or symmetric positive definite matrices, although ScaLAPACK has separate routines to take advantages of such matrices.
Amesos_Scalapack::Amesos_Scalapack | ( | const Epetra_LinearProblem & | LinearProblem | ) |
Amesos_Scalapack Constructor.
Creates an Amesos_Scalapack instance, using an Epetra_LinearProblem, passing in an already-defined Epetra_LinearProblem object.
Note: The operator in LinearProblem must be an Epetra_RowMatrix.
Amesos_Scalapack::~Amesos_Scalapack | ( | void | ) |
Amesos_Scalapack Destructor.
Completely deletes an Amesos_Scalapack object.
bool Amesos_Scalapack::MatrixShapeOK | ( | ) | const [virtual] |
Returns true if SCALAPACK can handle this matrix shape.
Returns true if the matrix shape is one that SCALAPACK can handle. SCALAPACK only works with square matrices.
Implements Amesos_BaseSolver.
int Amesos_Scalapack::NumericFactorization | ( | ) | [virtual] |
Performs NumericFactorization on the matrix A.
In addition to performing numeric factorization on the matrix A, the call to NumericFactorization() implies that no change will be made to the underlying matrix without a subsequent call to NumericFactorization().
preconditions:
postconditions:
Implements Amesos_BaseSolver.
int Amesos_Scalapack::SetParameters | ( | Teuchos::ParameterList & | ParameterList | ) | [virtual] |
Updates internal variables.
<br >Preconditions:
<br >Postconditions:
Implements Amesos_BaseSolver.
int Amesos_Scalapack::SetUseTranspose | ( | bool | UseTranspose | ) | [inline, virtual] |
SetUseTranpose(true) is more efficient in Amesos_Scalapack.
A^{T} X = B is computed
A X = B is computed
Implements Amesos_BaseSolver.
int Amesos_Scalapack::Solve | ( | ) | [virtual] |
Solves A X = B (or A^{T} X = B).
preconditions:
postconditions:
Implements Amesos_BaseSolver.
int Amesos_Scalapack::SymbolicFactorization | ( | ) | [virtual] |
Performs SymbolicFactorization on the matrix A.
There is no symbolic factorization phase in ScaLAPACK, as it operates only on dense matrices. Hence, Amesos_Scalapack::SymbolicFactorization() takes no action.
Implements Amesos_BaseSolver.