IFPACK  Development
 All Classes Namespaces Files Functions Variables Enumerations Friends Pages
Ifpack_Container.h
1 /*@HEADER
2 // ***********************************************************************
3 //
4 // Ifpack: Object-Oriented Algebraic Preconditioner Package
5 // Copyright (2002) Sandia Corporation
6 //
7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8 // license for use of this work by or on behalf of the U.S. Government.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are
12 // met:
13 //
14 // 1. Redistributions of source code must retain the above copyright
15 // notice, this list of conditions and the following disclaimer.
16 //
17 // 2. Redistributions in binary form must reproduce the above copyright
18 // notice, this list of conditions and the following disclaimer in the
19 // documentation and/or other materials provided with the distribution.
20 //
21 // 3. Neither the name of the Corporation nor the names of the
22 // contributors may be used to endorse or promote products derived from
23 // this software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 //
37 // Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38 //
39 // ***********************************************************************
40 //@HEADER
41 */
42 
43 #ifndef IFPACK_CONTAINER_H
44 #define IFPACK_CONTAINER_H
45 
46 class Epetra_RowMatrix;
47 class Ifpack_Partitioner;
48 namespace Teuchos {
49  class ParameterList;
50 }
51 
53 
99 
100 public:
101 
103  virtual ~Ifpack_Container() {};
104 
106  virtual int NumRows() const = 0;
107 
109  virtual int NumVectors() const = 0;
110 
112  virtual int SetNumVectors(const int i) = 0;
113 
115  virtual double& LHS(const int i, const int Vector = 0) = 0;
116 
118  virtual double& RHS(const int i, const int Vector = 0) = 0;
119 
121 
130  virtual int& ID(const int i) = 0;
131 
133  virtual int SetMatrixElement(const int row, const int col,
134  const double value) = 0;
135 
137  virtual int Initialize() = 0;
138 
140  virtual int Compute(const Epetra_RowMatrix& A) = 0;
141 
143  virtual int SetParameters(Teuchos::ParameterList& List) = 0;
144 
146  virtual bool IsInitialized() const = 0;
147 
149  virtual bool IsComputed() const = 0;
150 
152  virtual int Apply() = 0;
153 
155  virtual int ApplyInverse() = 0;
156 
158  virtual const char* Label() const = 0;
159 
161  virtual double InitializeFlops() const = 0;
162 
164  virtual double ComputeFlops() const = 0;
165 
167  virtual double ApplyFlops() const = 0;
168 
170  virtual double ApplyInverseFlops() const = 0;
171 
173  virtual std::ostream& Print(std::ostream& os) const = 0;
174 };
175 
176 inline std::ostream& operator<<(std::ostream& os, const Ifpack_Container& obj)
177 {
178  return(obj.Print(os));
179 }
180 
181 #endif // IFPACK_CONTAINER_H
virtual int SetNumVectors(const int i)=0
Sets the number of vectors for LHS/RHS.
virtual double InitializeFlops() const =0
Returns the flops in Initialize().
virtual int SetParameters(Teuchos::ParameterList &List)=0
Sets all necessary parameters.
virtual ~Ifpack_Container()
Destructor.
virtual bool IsInitialized() const =0
Returns true is the container has been successfully initialized.
virtual double ApplyInverseFlops() const =0
Returns the flops in ApplyInverse().
virtual const char * Label() const =0
Returns the label of this container.
virtual int Initialize()=0
Initializes the container, by performing all operations that only require matrix structure.
virtual int Apply()=0
Apply the matrix to RHS, results are stored in LHS.
virtual int SetMatrixElement(const int row, const int col, const double value)=0
Set the matrix element (row,col) to value.
virtual int Compute(const Epetra_RowMatrix &A)=0
Finalizes the linear system matrix and prepares for the application of the inverse.
Ifpack_Partitioner: A class to decompose local Ifpack_Graph&#39;s.
virtual int ApplyInverse()=0
Apply the inverse of the matrix to RHS, results are stored in LHS.
virtual double & RHS(const int i, const int Vector=0)=0
Returns the i-th component of the vector Vector of RHS.
virtual double ApplyFlops() const =0
Returns the flops in Apply().
virtual std::ostream & Print(std::ostream &os) const =0
Prints out basic information about the container.
virtual double ComputeFlops() const =0
Returns the flops in Compute().
virtual int NumRows() const =0
Returns the number of rows of the matrix and LHS/RHS.
Ifpack_Container: a pure virtual class for creating and solving local linear problems.
virtual int NumVectors() const =0
Returns the number of vectors in LHS/RHS.
virtual bool IsComputed() const =0
Returns true is the container has been successfully computed.
virtual double & LHS(const int i, const int Vector=0)=0
Returns the i-th component of the vector Vector of LHS.
virtual int & ID(const int i)=0
Returns the ID associated to local row i.