43 #include "Ifpack_ConfigDefs.h" 
   44 #include "Ifpack_TriDiContainer.h" 
   45 #include "Epetra_RowMatrix.h" 
   57   IsInitialized_ = 
false;
 
   59   IFPACK_CHK_ERR(LHS_.
Reshape(NumRows_,NumVectors_));
 
   60   IFPACK_CHK_ERR(RHS_.
Reshape(NumRows_,NumVectors_));
 
   61   IFPACK_CHK_ERR(ID_.
Reshape(NumRows_,NumVectors_));
 
   62   IFPACK_CHK_ERR(Matrix_.Reshape(NumRows_,NumRows_));
 
   69   if(Matrix_.
A() == NULL ) Matrix_.
Shape(NumRows_);
 
   70   int size = (NumRows_ == 1) ? 1 : 4*(NumRows_ -1);
 
   71   memset(Matrix_.
A(),0,
sizeof(double)*size);
 
   74   for (
int i = 0 ; i < NumRows_ ; ++i)
 
   75     for (
int j = 0 ; j < NumVectors_ ; ++j) {
 
   81   for (
int i = 0 ; i < NumRows_ ; ++i)
 
   85     IFPACK_CHK_ERR(Solver_.
SetMatrix(Matrix_));
 
   89   IsInitialized_ = 
true;
 
   97   return(LHS_.
A()[Vector * NumRows_ + i]);
 
  103   return(RHS_.
A()[Vector * NumRows_ + i]);
 
  113   if ((row < 0) || (row >= 
NumRows())) {
 
  117   if ((col < 0) || (col >= 
NumRows())) {
 
  121   Matrix_(row, col) = value;
 
  136     IFPACK_CHK_ERR(Solver_.
Solve());
 
  138 #ifdef IFPACK_FLOPCOUNTERS 
  139   ApplyInverseFlops_ += 2.0 * NumVectors_ * NumRows_ * NumRows_;
 
  155   for (
int j = 0 ; j < NumRows_ ; ++j) {
 
  166   std::vector<double> Values;
 
  167   Values.resize(Length);
 
  168   std::vector<int> Indices;
 
  169   Indices.resize(Length);
 
  171   for (
int j = 0 ; j < NumRows_ ; ++j) {
 
  179                               &Values[0], &Indices[0]);
 
  180     IFPACK_CHK_ERR(ierr);
 
  182     for (
int k = 0 ; k < NumEntries ; ++k) {
 
  184       int LCID = Indices[k];
 
  194       for (
int kk = 0 ; kk < NumRows_ ; ++kk)
 
  215   if (KeepNonFactoredMatrix_)
 
  216     NonFactoredMatrix_ = Matrix_;
 
  219   IFPACK_CHK_ERR(Extract(Matrix_in));
 
  221   if (KeepNonFactoredMatrix_)
 
  222     NonFactoredMatrix_ = Matrix_;
 
  226     IFPACK_CHK_ERR(Solver_.
Factor());
 
  228   Label_ = 
"Ifpack_TriDiContainer";
 
  231 #ifdef IFPACK_FLOPCOUNTERS 
  232   ComputeFlops_ += 4.0 * NumRows_ * NumRows_ * NumRows_ / 3;
 
  242    IFPACK_CHK_ERR(-300);
 
  263     os << 
"================================================================================" << endl;
 
  264   os << 
"Ifpack_TriDiContainer" << endl;
 
  265   os << 
"Number of rows          = " << 
NumRows() << endl;
 
  266   os << 
"Number of vectors       = " << 
NumVectors() << endl;
 
  268   os << 
"IsComputed()            = " << 
IsComputed() << endl;
 
  269 #ifdef IFPACK_FLOPCOUNTERS 
  270   os << 
"Flops in Compute()      = " << 
ComputeFlops() << endl;
 
  273   os << 
"================================================================================" << endl;
 
virtual int NumRows() const 
Returns the number of rows of the matrix and LHS/RHS. 
virtual std::ostream & Print(std::ostream &os) const 
Prints basic information on iostream. This function is used by operator<<. 
int Shape(int NumRowCol)
Set dimensions of a Ifpack_SerialTriDiMatrix object; init values to zero. 
virtual int Solve(void)
Computes the solution X to AX = B for the this matrix and the B provided to SetVectors().. 
virtual int NumVectors() const 
Returns the number of vectors in LHS/RHS. 
virtual const Epetra_IntSerialDenseVector & ID() const 
Returns the integer dense vector of IDs. 
virtual int Factor(void)
Computes the in-place LU factorization of the matrix using the LAPACK routine DGETRF. 
virtual int SetMatrixElement(const int row, const int col, const double value)
Set the matrix element (row,col) to value. 
virtual const Epetra_SerialDenseMatrix & RHS() const 
Returns the dense vector containing the RHS. 
int SetMatrix(Ifpack_SerialTriDiMatrix &A)
Sets the pointers for coefficient matrix. 
virtual const Epetra_SerialDenseMatrix & LHS() const 
Returns the dense vector containing the LHS. 
virtual int MaxNumEntries() const =0
virtual double ComputeFlops() const 
Returns the flops in Compute(). 
double * A() const 
Returns pointer to the this matrix. 
virtual int NumMyRows() const =0
int Reshape(int NumRows, int NumCols)
virtual int Apply()
Apply the matrix to RHS, results are stored in LHS. 
virtual double ApplyInverseFlops() const 
Returns the flops in ApplyInverse(). 
virtual int Compute(const Epetra_RowMatrix &Matrix_in)
Finalizes the linear system matrix and prepares for the application of the inverse. 
virtual int ApplyInverse()
Apply the inverse of the matrix to RHS, results are stored in LHS. 
virtual int Initialize()
Initialize the container. 
int Reshape(int NumRows, int NumCols)
int SetVectors(Epetra_SerialDenseMatrix &X, Epetra_SerialDenseMatrix &B)
Sets the pointers for left and right hand side vector(s). 
virtual int ExtractMyRowCopy(int MyRow, int Length, int &NumEntries, double *Values, int *Indices) const =0
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.