43 #ifndef IFPACK_TRIDICONTAINER_H
44 #define IFPACK_TRIDICONTAINER_H
46 #include "Ifpack_ConfigDefs.h"
47 #include "Ifpack_Container.h"
48 #include "Ifpack_SerialTriDiMatrix.h"
49 #include "Ifpack_SerialTriDiSolver.h"
50 #include "Epetra_IntSerialDenseVector.h"
51 #include "Epetra_SerialDenseVector.h"
126 NumRows_(NumRows_in),
127 NumVectors_(NumVectors_in),
128 KeepNonFactoredMatrix_(false),
129 IsInitialized_(false),
133 ApplyInverseFlops_(0.0)
145 if (KeepNonFactoredMatrix_)
170 if (KeepNonFactoredMatrix_)
195 if (NumVectors_ == NumVectors_in)
198 NumVectors_ = NumVectors_in;
199 IFPACK_CHK_ERR(RHS_.
Reshape(NumRows_,NumVectors_));
200 IFPACK_CHK_ERR(LHS_.
Reshape(NumRows_,NumVectors_));
202 for (
int i = 0 ; i < NumRows_ ; ++i)
203 for (
int j = 0 ; j < NumVectors_ ; ++j) {
209 IFPACK_CHK_ERR(Solver_.
SetVectors(LHS_,RHS_));
215 virtual double&
LHS(
const int i,
const int Vector = 0);
218 virtual double&
RHS(
const int i,
const int Vector = 0);
230 virtual int&
ID(
const int i);
245 return(IsInitialized_);
257 return(Label_.c_str());
263 KeepNonFactoredMatrix_ = flag;
270 return(KeepNonFactoredMatrix_);
294 return(NonFactoredMatrix_);
327 return(ComputeFlops_);
337 return(ApplyInverseFlops_);
341 virtual std::ostream&
Print(std::ostream& os)
const;
365 bool KeepNonFactoredMatrix_;
374 double ComputeFlops_;
378 double ApplyInverseFlops_;
virtual int Compute(const Epetra_RowMatrix &Matrix_in)
Finalizes the linear system matrix and prepares for the application of the inverse.
virtual double ApplyInverseFlops() const
Returns the flops in ApplyInverse().
virtual int SetNumVectors(const int NumVectors_in)
Sets the number of vectors for LHS/RHS.
virtual std::ostream & Print(std::ostream &os) const
Prints basic information on iostream. This function is used by operator<<.
virtual int Apply()
Apply the matrix to RHS, results are stored in LHS.
Ifpack_TriDiContainer & operator=(const Ifpack_TriDiContainer &rhs)
Operator=.
Ifpack_SerialTriDiMatrix: A class for constructing and using real double precision general TriDi matr...
Ifpack_TriDiContainer(const Ifpack_TriDiContainer &rhs)
Copy constructor.
virtual int Initialize()
Initialize the container.
virtual int NumRows() const
Returns the number of rows of the matrix and LHS/RHS.
virtual bool KeepNonFactoredMatrix() const
Returns KeepNonFactoredMatrix_.
virtual const char * Label() const
Returns the label of this container.
int SetVectors(Epetra_SerialDenseMatrix &X, Epetra_SerialDenseMatrix &B)
Sets the pointers for left and right hand side vector(s).
virtual const Ifpack_SerialTriDiMatrix & NonFactoredMatrix() const
Returns the non-factored dense matrix (only if stored).
Ifpack_TriDiContainer: a class to define containers for dense matrices.
virtual const Epetra_IntSerialDenseVector & ID() const
Returns the integer dense vector of IDs.
virtual double ComputeFlops() const
Returns the flops in Compute().
int Reshape(int NumRows, int NumCols)
virtual bool IsInitialized() const
Returns true is the container has been successfully initialized.
Ifpack_Container: a pure virtual class for creating and solving local linear problems.
virtual bool IsComputed() const
Returns true is the container has been successfully computed.
Ifpack_TriDiContainer(const int NumRows_in, const int NumVectors_in=1)
Default constructor.
virtual const Epetra_SerialDenseMatrix & RHS() const
Returns the dense vector containing the RHS.
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 double & LHS(const int i, const int Vector=0)
Returns the i-th component of the vector Vector of LHS.
virtual int NumVectors() const
Returns the number of vectors in LHS/RHS.
virtual double InitializeFlops() const
Returns the flops in Initialize().
virtual int SetKeepNonFactoredMatrix(const bool flag)
If flag is true, keeps a copy of the non-factored matrix.
virtual const Ifpack_SerialTriDiMatrix & Matrix() const
Returns the dense matrix or its factors.
virtual ~Ifpack_TriDiContainer()
Destructor.
Ifpack_SerialTriDiSolver: A class for solving TriDi linear problems.
virtual int & ID(const int i)
Returns the ID associated to local row i.
virtual const Epetra_SerialDenseMatrix & LHS() const
Returns the dense vector containing the LHS.
virtual int ApplyInverse()
Apply the inverse of the matrix to RHS, results are stored in LHS.
virtual double & RHS(const int i, const int Vector=0)
Returns the i-th component of the vector Vector of RHS.
virtual double ApplyFlops() const
Returns the flops in Apply().