IFPACK Development

Ifpack_DenseContainer: a class to define containers for dense matrices. More...
#include <Ifpack_DenseContainer.h>
Public Member Functions  
virtual double  InitializeFlops () const 
Returns the flops in Initialize().  
virtual double  ComputeFlops () const 
Returns the flops in Compute().  
virtual double  ApplyFlops () const 
Returns the flops in Apply().  
virtual double  ApplyInverseFlops () const 
Returns the flops in ApplyInverse().  
virtual ostream &  Print (std::ostream &os) const 
Prints basic information on iostream. This function is used by operator<<.  
Ifpack_DenseContainer (const int NumRows_in, const int NumVectors_in=1)  
Default constructor.  
Ifpack_DenseContainer (const Ifpack_DenseContainer &rhs)  
Copy constructor.  
virtual  ~Ifpack_DenseContainer () 
Destructor.  
Ifpack_DenseContainer &  operator= (const Ifpack_DenseContainer &rhs) 
Operator=.  
virtual int  NumRows () const 
Returns the number of rows of the matrix and LHS/RHS.  
virtual int  NumVectors () const 
Returns the number of vectors in LHS/RHS.  
virtual int  SetNumVectors (const int NumVectors_in) 
Sets the number of vectors for LHS/RHS.  
virtual double &  LHS (const int i, const int Vector=0) 
Returns the ith component of the vector Vector of LHS.  
virtual double &  RHS (const int i, const int Vector=0) 
Returns the ith component of the vector Vector of RHS.  
virtual int &  ID (const int i) 
Returns the ID associated to local row i.  
virtual int  SetMatrixElement (const int row, const int col, const double value) 
Set the matrix element (row,col) to value .  
virtual int  SetParameters (Teuchos::ParameterList &List) 
Sets all necessary parameters.  
virtual bool  IsInitialized () const 
Returns true is the container has been successfully initialized.  
virtual bool  IsComputed () const 
Returns true is the container has been successfully computed.  
virtual const char *  Label () const 
Returns the label of this container.  
virtual int  SetKeepNonFactoredMatrix (const bool flag) 
If flag is true , keeps a copy of the nonfactored matrix.  
virtual bool  KeepNonFactoredMatrix () const 
Returns KeepNonFactoredMatrix_.  
virtual const Epetra_SerialDenseMatrix &  LHS () const 
Returns the dense vector containing the LHS.  
virtual const Epetra_SerialDenseMatrix &  RHS () const 
Returns the dense vector containing the RHS.  
virtual const Epetra_SerialDenseMatrix &  Matrix () const 
Returns the dense matrix or its factors.  
virtual const Epetra_SerialDenseMatrix &  NonFactoredMatrix () const 
Returns the nonfactored dense matrix (only if stored).  
virtual const Epetra_IntSerialDenseVector &  ID () const 
Returns the integer dense vector of IDs.  
virtual int  Initialize () 
Initialize the container.  
virtual int  Compute (const Epetra_RowMatrix &Matrix_in) 
Finalizes the linear system matrix and prepares for the application of the inverse.  
virtual int  Apply () 
Apply the matrix to RHS, results are stored in LHS.  
virtual int  ApplyInverse () 
Apply the inverse of the matrix to RHS, results are stored in LHS. 
Ifpack_DenseContainer: a class to define containers for dense matrices.
To understand what an IFPACK container is, please refer to the documentation of the pure virtual class Ifpack_Container. Currently, containers are used by class Ifpack_BlockRelaxation.
Using block methods, one needs to store all diagonal blocks and to be also to apply the inverse of each diagonal block. Using class Ifpack_DenseContainer, one can store the blocks as dense matrices, which can be advantageous when the blocks are small. Otherwise, class Ifpack_SparseContainer is probably more appropriate.
A typical use of a container is as follows:
#include "Ifpack_DenseContainer.h" ... // local matrix of (5,5), with two vectors for solution and rhs. Ifpack_Container* Container = new Ifpack_DenseContainer(5,5); // assign local rows 1, 5, 12, 13, 16 to this container Container(0) = 1; Container(1) = 5; Container(2) = 12; Container(3) = 13; Container(4) = 16; // Now extract the submatrix corresponding to rows and columns: // 1. initialize the container. Container.Initialize(); // 2. extract matrix values from an Epetra_RowMatrix A, // and compute LU factors of the submatrix identified by rows // and columns 1, 5, 12, 13 and 16 using LAPACK Container.Compute(A); // We can set the RHS as follows: Container.RHS(0) = 1.0; Container.RHS(1) = 2.0; Container.RHS(2) = 3.0; Container.RHS(3) = 4.0; Container.RHS(4) = 5.0; // The linear system with the submatrix is solved as follows: Container.ApplyInverse().
A call to Compute() computes the LU factorization of the linear system matrix, using LAPACK (more precisely, by calling the corresponding routines in Epetra_SerialDenseSolver). The default behavior is to store the matrix factors by overwriting the linear system matrix itself. This way, method Apply() fails, as the original matrix does no longer exists. An alternative is to call KeepNonFactoredMatrix(true)
, which forces Ifpack_DenseContainer to maintain in memory a copy of the nonfactored matrix.
Definition at line 117 of file Ifpack_DenseContainer.h.
int & Ifpack_DenseContainer::ID  (  const int  i  )  [virtual] 
Returns the ID associated to local row i.
The set of (local) rows assigned to this container is defined by calling ID(i) = j, where i (from 0 to NumRows()) indicates the containerrow, and j indicates the local row in the calling process.
This is usually used to recorder the local row ID (on calling process) of the ith row in the container.
Implements Ifpack_Container.
Definition at line 141 of file Ifpack_DenseContainer.cpp.
Referenced by Ifpack_DenseContainer(), and operator=().