Amesos_Mumps Class Reference

Amesos_Mumps: An object-oriented wrapper for the double precision version of MUMPS. More...

#include <Amesos_Mumps.h>

Inheritance diagram for Amesos_Mumps:

Inheritance graph
[legend]
Collaboration diagram for Amesos_Mumps:

Collaboration graph
[legend]

List of all members.

Public Member Functions

bool MatrixShapeOK () const
 Returns true if the solver can handle this matrix shape.
const Epetra_Comm & Comm () const
 Returns a pointer to the Epetra_Comm communicator associated with this matrix.
const Epetra_LinearProblem * GetProblem () const
 Gets a pointer to the Epetra_LinearProblem.
 Amesos_Mumps (const Epetra_LinearProblem &LinearProblem)
 Amesos_Mumps Constructor.
 ~Amesos_Mumps (void)
 Amesos_Mumps Destructor.
int SymbolicFactorization ()
 Performs SymbolicFactorization on the matrix A.
int NumericFactorization ()
 Performs NumericFactorization on the matrix A.
int Solve ()
 Solves A X = B (or AT x = B).
void Destroy ()
 Destroys all data associated with this object.
int SetUseTranspose (bool UseTranspose)
 If set true, X will be set to the solution of AT X = B (not A X = B).
bool UseTranspose () const
 Returns the current UseTranspose setting.
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
 Prints timing information.
void PrintStatus () const
 Prints 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.
int SetPrecscaling (double *ColSca, double *RowSca)
 Set prescaling.
int SetRowScaling (double *RowSca)
 Set row scaling.
int SetColScaling (double *ColSca)
 Set column scaling.
int SetOrdering (int *PermIn)
 Sets ordering.
double * GetRINFO ()
 Gets the pointer to the RINFO array (defined on all processes).
int * GetINFO ()
 Gets the pointer to the INFO array (defined on all processes).
double * GetRINFOG ()
 Gets the pointer to the RINFOG array (defined on host only).
int * GetINFOG ()
 Get the pointer to the INFOG array (defined on host only).
void SetICNTL (int pos, int value)
 Set ICNTL[pos] to value. pos is expressed in FORTRAN style (starting from 1).
void SetCNTL (int pos, double value)
 Set CNTL[pos] to value. pos is expressed in FORTRAN style (starting from 1).

Protected Member Functions

Epetra_RowMatrix & Matrix ()
 Returns a reference to the linear system matrix.
const Epetra_RowMatrix & Matrix () const
Epetra_Map & RedistrMap ()
 Returns a reference to the map for redistributed matrix.
Epetra_Import & RedistrImporter ()
 Returns a reference for the redistributed importer.
Epetra_RowMatrix & RedistrMatrix (const bool ImportMatrix=false)
 Returns a reference to the redistributed matrix, imports it is ImportMatrix is true.
Epetra_Map & SerialMap ()
 Returns a reference to the map with all elements on process 0.
Epetra_Import & SerialImporter ()
 Returns a reference to the importer for SerialMap().
int ConvertToTriplet (const bool OnlyValues)
 Converts to MUMPS format (COO format).
int CheckError ()
 Checks for MUMPS error, prints them if any. See MUMPS' manual.
void CheckParameters ()
 Check input parameters.
void SetICNTLandCNTL ()

Protected Attributes

bool IsConvertToTripletOK_
 true if matrix has already been converted to COO format
bool IsComputeSchurComplementOK_
 true if the Schur complement has been computed (need to free memory)
bool NoDestroy_
std::vector< int > Row
 row indices of nonzero elements
std::vector< int > Col
 column indices of nonzero elements
std::vector< double > Val
 values of nonzero elements
int MaxProcs_
 Maximum number of processors in the MUMPS' communicator.
bool UseTranspose_
 If true, solve the problem with AT.
int MtxConvTime_
 Quick access pointers to the internal timers.
int MtxRedistTime_
int VecRedistTime_
int SymFactTime_
int NumFactTime_
int SolveTime_
double * RowSca_
 Row and column scaling.
double * ColSca_
int * PermIn_
 PermIn for MUMPS.
int NumSchurComplementRows_
 Number of rows in the Schur complement (if required).
int * SchurComplementRows_
 Rows for the Schur complement (if required).
RCP< Epetra_CrsMatrix > CrsSchurComplement_
 Pointer to the Schur complement, as CrsMatrix.
RCP< Epetra_SerialDenseMatrix > DenseSchurComplement_
 Pointer to the Schur complement,as DenseMatrix.
const Epetra_LinearProblem * Problem_
 Pointer to the linear problem to be solved.
RCP< Epetra_Map > RedistrMap_
 Redistributed matrix.
RCP< Epetra_Import > RedistrImporter_
 Redistributed importer (from Matrix().RowMatrixRowMap() to RedistrMatrix().RowMatrixRowMap()).
RCP< Epetra_CrsMatrix > RedistrMatrix_
 Redistributed matrix (only if MaxProcs_ > 1).
RCP< Epetra_Map > SerialMap_
 Map with all elements on process 0 (for solution and rhs).
RCP< Epetra_Import > SerialImporter_
 Importer from Matrix.OperatorDomainMap() to SerialMap_.
MPI_Comm MUMPSComm_
 MPI communicator used by MUMPS.
DMUMPS_STRUC_C MDS
std::map< int, int > ICNTL
std::map< int, double > CNTL


Detailed Description

Amesos_Mumps: An object-oriented wrapper for the double precision version of MUMPS.

Amesos_Mumps is an interface to the the double precision version of the sparse parallel direct solver MUMPS. Given an Epetra_RowMatrix A, and two Epetra_MultiVectors X and B, the solution with Amesos_Mumps reads as follows:

  1. Epetra_LinearProblem Problem; Amesos_BaseSolver * Solver; Amesos Amesos_Factory;
  2. Solver = Amesos_Factory.Create("Amesos_Mumps", Problem);
  3. if( Solver == 0 ) std::cerr << "library not available" << std::endl;
  4. Problem.SetMatrix(&A);
  5. Solver->SymbolicFactorization();
  6. Solver->NumericFactorization();
  7. Problem.SetLHS(&X);
  8. Problem.SetLHS(&B);
  9. Solver->Solve();

A number of parameters is available to tune the performances of MUMPS. We refer to the Amesos Reference Guide for a detailed overview of these parameters. Here, we just recall that it is possible to solve the linear system on a subset of the processes contained in the Comm object of the Epetra_LinearProblem.

Amesos_Mumps accepts any Epetra_RowMatrix derived class. However, special functions are available for Epetra_CrsMatrix and Epetra_VbrMatrix objects.

As Amesos is based on Epetra, and Epetra is only double-precision, we still require an Epetra_LinearProblem composed by a double-precision matrix, and two double-precision vectors. The solution vector is casted to double after solution. Single precision may be of interest if Amesos is used with ML, to solve the coarse problem (for which single-precision can be enough in term of numerical error, and usually save memory and CPU time).

Amesos_Mumps is based on Amesos_EpetraBaseSolver, that is derived from Amesos_BaseSolver. The main redistribution utilities, as well as a getrow function, is obtained by EpetraBaseSolver.

Warning:
This interface is compatible with MUMPS 4.5.4.
Date:
Last modified 26-Jan-06
Author:
Marzio Sala, ETHZ.

Constructor & Destructor Documentation

Amesos_Mumps::Amesos_Mumps ( const Epetra_LinearProblem &  LinearProblem  ) 

Amesos_Mumps Constructor.

Creates an Amesos_Mumps instance, using an Epetra_LinearProblem,

Amesos_Mumps::~Amesos_Mumps ( void   ) 

Amesos_Mumps Destructor.

Deletes an Amesos_Mumps object.


Member Function Documentation

int Amesos_Mumps::CheckError (  )  [protected]

Checks for MUMPS error, prints them if any. See MUMPS' manual.

void Amesos_Mumps::CheckParameters (  )  [protected]

Check input parameters.

const Epetra_Comm& Amesos_Mumps::Comm (  )  const [inline, virtual]

Returns a pointer to the Epetra_Comm communicator associated with this matrix.

Implements Amesos_BaseSolver.

int Amesos_Mumps::ConvertToTriplet ( const bool  OnlyValues  )  [protected]

Converts to MUMPS format (COO format).

void Amesos_Mumps::Destroy (  ) 

Destroys all data associated with this object.

int* Amesos_Mumps::GetINFO (  ) 

Gets the pointer to the INFO array (defined on all processes).

Gets the pointer to the internally stored INFO array, of type int.

int* Amesos_Mumps::GetINFOG (  ) 

Get the pointer to the INFOG array (defined on host only).

Gets the pointer to the internally stored INFOG (defined on the host process only) array, of type int.

const Epetra_LinearProblem* Amesos_Mumps::GetProblem (  )  const [inline, virtual]

Gets a pointer to the Epetra_LinearProblem.

Implements Amesos_BaseSolver.

double* Amesos_Mumps::GetRINFO (  ) 

Gets the pointer to the RINFO array (defined on all processes).

Gets the pointer to the internally stored RINFO array, of type float if option --enable-amesos-smumps is enabled, double otherwise.

double* Amesos_Mumps::GetRINFOG (  ) 

Gets the pointer to the RINFOG array (defined on host only).

Gets the pointer to the internally stored RINFOG array (defined on the host process only), of type float if option --enable-amesos-smumps is enabled, double otherwise.

void Amesos_Mumps::GetTiming ( Teuchos::ParameterList &  TimingParameterList  )  const [inline, virtual]

Extracts timing information from the current solver and places it in the parameter list.

Reimplemented from Amesos_BaseSolver.

const Epetra_RowMatrix& Amesos_Mumps::Matrix (  )  const [protected]

Epetra_RowMatrix& Amesos_Mumps::Matrix (  )  [protected]

Returns a reference to the linear system matrix.

bool Amesos_Mumps::MatrixShapeOK (  )  const [inline, virtual]

Returns true if the solver can handle this matrix shape.

Returns true if the matrix shape is one that the underlying sparse direct solver can handle. Classes that work only on square matrices should return false for rectangular matrices. Classes that work only on symmetric matrices whould return false for non-symmetric matrices.

Implements Amesos_BaseSolver.

int Amesos_Mumps::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().

<br >Preconditions:

  • GetProblem().GetOperator() != 0 (return -1)
  • MatrixShapeOk(GetProblem().GetOperator()) == true (return -6)
  • The non-zero structure of the matrix should not have changed since the last call to SymbolicFactorization(). (return -2 if the number of non-zeros changes) Other changes can have arbitrary consequences.
  • The distribution of the matrix should not have changed since the last call to SymbolicFactorization()
  • The matrix should be indexed from 0 to n-1, unless the parameter "Reindex" was set to "true" prior to the call to SymbolicFactorization(). (return -3 - if caught)
  • The paremeter "Reindex" should not be set to "true" except on CrsMatrices. (return -4)
  • The paremeter "Reindex" should not be set to "true" unless Amesos was built with EpetraExt, i.e. with --enable-epetraext on the configure line. (return -4)
  • Internal errors retur -5.

<br >Postconditions:

  • Numeric Factorization will be performed (or marked to be performed) allowing Solve() to be performed correctly despite a potential change in in the matrix values (though not in the non-zero structure).

Returns:
Integer error code, set to 0 if successful.

Implements Amesos_BaseSolver.

int Amesos_Mumps::NumNumericFact (  )  const [inline, virtual]

Returns the number of numeric factorizations performed by this object.

Implements Amesos_BaseSolver.

int Amesos_Mumps::NumSolve (  )  const [inline, virtual]

Returns the number of solves performed by this object.

Implements Amesos_BaseSolver.

int Amesos_Mumps::NumSymbolicFact (  )  const [inline, virtual]

Returns the number of symbolic factorizations performed by this object.

Implements Amesos_BaseSolver.

void Amesos_Mumps::PrintStatus (  )  const [virtual]

Prints information about the factorization and solution phases.

In the destruction phase, prints out some information furnished by MUMPS, like the amount of required memory, the MFLOPS.

Implements Amesos_BaseSolver.

void Amesos_Mumps::PrintTiming (  )  const [virtual]

Prints timing information.

In the destruction phase, prints out detailed information about the various phases: symbolic and numeric factorization, solution, gather/scatter for vectors and matrices.

Implements Amesos_BaseSolver.

Epetra_Import& Amesos_Mumps::RedistrImporter (  )  [protected]

Returns a reference for the redistributed importer.

Epetra_Map& Amesos_Mumps::RedistrMap (  )  [protected]

Returns a reference to the map for redistributed matrix.

Epetra_RowMatrix& Amesos_Mumps::RedistrMatrix ( const bool  ImportMatrix = false  )  [protected]

Returns a reference to the redistributed matrix, imports it is ImportMatrix is true.

Epetra_Import& Amesos_Mumps::SerialImporter (  )  [protected]

Returns a reference to the importer for SerialMap().

Epetra_Map& Amesos_Mumps::SerialMap (  )  [protected]

Returns a reference to the map with all elements on process 0.

void Amesos_Mumps::SetCNTL ( int  pos,
double  value 
)

Set CNTL[pos] to value. pos is expressed in FORTRAN style (starting from 1).

int Amesos_Mumps::SetColScaling ( double *  ColSca  )  [inline]

Set column scaling.

Use double precision vectors of size N (global dimension of the matrix) for column scaling.

Parameters:
ColSca (In) - float pointer with --enable-amesos-smumps, double pointer otherwise.

void Amesos_Mumps::SetICNTL ( int  pos,
int  value 
)

Set ICNTL[pos] to value. pos is expressed in FORTRAN style (starting from 1).

void Amesos_Mumps::SetICNTLandCNTL (  )  [protected]

int Amesos_Mumps::SetOrdering ( int *  PermIn  )  [inline]

Sets ordering.

Use integer vectors of size N (global dimension of the matrix) as given ordering. PermIn must be defined on the host only, and allocated by the user, if the user sets ICNTL(7) = 1.

int Amesos_Mumps::SetParameters ( Teuchos::ParameterList &  ParameterList  )  [virtual]

Updates internal variables.

<br >Preconditions:

  • None.

<br >Postconditions:

  • Internal variables controlling the factorization and solve will be updated and take effect on all subseuent calls to NumericFactorization() and Solve().
  • All parameters whose value are to differ from the default values must be included in ParameterList. Parameters not specified in ParameterList revert to their default values.

Returns:
Integer error code, set to 0 if successful.

Implements Amesos_BaseSolver.

int Amesos_Mumps::SetPrecscaling ( double *  ColSca,
double *  RowSca 
) [inline]

Set prescaling.

Use double precision vectors of size N (global dimension of the matrix) as scaling for columns and rows. ColSca and RowSca must be defined on the host only, and allocated by the user, if the user sets ICNTL(8) = -1.

Both input vectors are float with --enable-amesos-smumps, double otherwise.

int Amesos_Mumps::SetRowScaling ( double *  RowSca  )  [inline]

Set row scaling.

Use double precision vectors of size N (global dimension of the matrix) for row scaling.

Parameters:
RowSca (In) -float pointer with --enable-amesos-smumps, double pointer otherwise.

int Amesos_Mumps::SetUseTranspose ( bool  UseTranspose  )  [inline, virtual]

If set true, X will be set to the solution of AT X = B (not A X = B).

If the implementation of this interface does not support transpose use, this method should return a value of -1.

<br >Preconditions:

<br >Postconditions:

  • The next factorization and solve will be performed with the new value of UseTranspose.

Parameters:
UseTranspose -- (In) If true, solve AT X = B, otherwise solve A X = B.
Returns:
Integer error code, set to 0 if successful. Set to -1 if this implementation does not support transpose.

Implements Amesos_BaseSolver.

int Amesos_Mumps::Solve (  )  [virtual]

Solves A X = B (or AT x = B).

<br >Preconditions:

<br >Postconditions:

  • X will be set such that A X = B (or AT X = B), within the limits of the accuracy of the underlying solver.

Returns:
Integer error code, set to 0 if successful.

Implements Amesos_BaseSolver.

int Amesos_Mumps::SymbolicFactorization (  )  [virtual]

Performs SymbolicFactorization on the matrix A.

In addition to performing symbolic factorization on the matrix A, the call to SymbolicFactorization() implies that no change will be made to the non-zero structure of the underlying matrix without a subsequent call to SymbolicFactorization().

<br >Preconditions:

<br >Postconditions:

Returns:
Integer error code, set to 0 if successful.

Implements Amesos_BaseSolver.

bool Amesos_Mumps::UseTranspose (  )  const [inline, virtual]

Returns the current UseTranspose setting.

Implements Amesos_BaseSolver.


Member Data Documentation

std::map<int, double> Amesos_Mumps::CNTL [protected]

std::vector<int> Amesos_Mumps::Col [protected]

column indices of nonzero elements

double * Amesos_Mumps::ColSca_ [protected]

RCP<Epetra_CrsMatrix> Amesos_Mumps::CrsSchurComplement_ [protected]

Pointer to the Schur complement, as CrsMatrix.

RCP<Epetra_SerialDenseMatrix> Amesos_Mumps::DenseSchurComplement_ [protected]

Pointer to the Schur complement,as DenseMatrix.

std::map<int, int> Amesos_Mumps::ICNTL [protected]

true if the Schur complement has been computed (need to free memory)

true if matrix has already been converted to COO format

int Amesos_Mumps::MaxProcs_ [protected]

Maximum number of processors in the MUMPS' communicator.

DMUMPS_STRUC_C Amesos_Mumps::MDS [protected]

int Amesos_Mumps::MtxConvTime_ [protected]

Quick access pointers to the internal timers.

MPI_Comm Amesos_Mumps::MUMPSComm_ [protected]

MPI communicator used by MUMPS.

bool Amesos_Mumps::NoDestroy_ [protected]

int Amesos_Mumps::NumFactTime_ [protected]

Number of rows in the Schur complement (if required).

int* Amesos_Mumps::PermIn_ [protected]

PermIn for MUMPS.

const Epetra_LinearProblem* Amesos_Mumps::Problem_ [protected]

Pointer to the linear problem to be solved.

RCP<Epetra_Import> Amesos_Mumps::RedistrImporter_ [protected]

Redistributed importer (from Matrix().RowMatrixRowMap() to RedistrMatrix().RowMatrixRowMap()).

RCP<Epetra_Map> Amesos_Mumps::RedistrMap_ [protected]

Redistributed matrix.

RCP<Epetra_CrsMatrix> Amesos_Mumps::RedistrMatrix_ [protected]

Redistributed matrix (only if MaxProcs_ > 1).

std::vector<int> Amesos_Mumps::Row [protected]

row indices of nonzero elements

double* Amesos_Mumps::RowSca_ [protected]

Row and column scaling.

Rows for the Schur complement (if required).

RCP<Epetra_Import> Amesos_Mumps::SerialImporter_ [protected]

Importer from Matrix.OperatorDomainMap() to SerialMap_.

RCP<Epetra_Map> Amesos_Mumps::SerialMap_ [protected]

Map with all elements on process 0 (for solution and rhs).

int Amesos_Mumps::SolveTime_ [protected]

int Amesos_Mumps::SymFactTime_ [protected]

bool Amesos_Mumps::UseTranspose_ [protected]

If true, solve the problem with AT.

std::vector<double> Amesos_Mumps::Val [protected]

values of nonzero elements


The documentation for this class was generated from the following file: