IFPACK  Development
Ifpack_METISReordering.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_METISREORDERING_H
44 #define IFPACK_METISREORDERING_H
45 
46 #include "Ifpack_ConfigDefs.h"
47 #include "Ifpack_Reordering.h"
48 #include "Epetra_RowMatrix.h"
49 #include "Teuchos_ParameterList.hpp"
50 #include "Teuchos_RefCountPtr.hpp"
51 
52 class Epetra_Comm;
53 class Ifpack_Graph;
54 class Epetra_Map;
55 class Epetra_BlockMap;
56 class Epetra_Import;
57 
59 
61 
62 public:
63 
66 
69 
71  virtual int SetParameter(const std::string Name, const int Value)
72  {
73  if (Name == "partitioner: use symmetric graph")
74  UseSymmetricGraph_ = (bool)Value;
75  return(0);
76  }
77 
79  virtual int SetParameter(const std::string /* Name */, const double /* Value */)
80  {
81  return(0);
82  };
83 
85  virtual int SetParameters(Teuchos::ParameterList& List)
86  {
87  UseSymmetricGraph_ = List.get("partitioner: use symmetric graph",
88  UseSymmetricGraph_);
89 
90  return(0);
91  }
92 
94  virtual int Compute(const Ifpack_Graph& Graph);
95 
97  virtual int Compute(const Epetra_RowMatrix& Matrix);
98 
100  virtual bool IsComputed() const
101  {
102  return(IsComputed_);
103  }
104 
106  virtual int Reorder(const int i) const;
107 
109  virtual int InvReorder(const int i) const;
110 
112  virtual int P(const Epetra_MultiVector& Xorig,
113  Epetra_MultiVector& X) const;
114 
116  virtual int Pinv(const Epetra_MultiVector& Xorig,
117  Epetra_MultiVector& X) const;
118 
120  virtual std::ostream& Print(std::ostream& os) const;
121 
122 private:
124  bool UseSymmetricGraph_;
126  int NumMyRows_;
128  bool IsComputed_;
130  std::vector<int> Reorder_;
132  std::vector<int> InvReorder_;
133 
134 }; // class Ifpack_METISReordering
135 
136 #endif // IFPACK_METISREORDERING_H
virtual int Reorder(const int i) const
Returns the reordered index of row i.
virtual int SetParameters(Teuchos::ParameterList &List)
Sets all the parameters for the partitioner (none at moment).
Ifpack_METISReordering: A class to reorder a graph using METIS.
virtual int P(const Epetra_MultiVector &Xorig, Epetra_MultiVector &X) const
Applies reordering to multivector Xorig, whose local length equals the number of local rows...
Ifpack_Reordering: basic class for reordering for a Ifpack_Graph object.
virtual int SetParameter(const std::string, const double)
Sets double parameters ‘Name’.
virtual int Compute(const Ifpack_Graph &Graph)
Computes all it is necessary to initialize the reordering object.
virtual ~Ifpack_METISReordering()
Destructor.
virtual bool IsComputed() const
Returns true is the reordering object has been successfully initialized, false otherwise.
Ifpack_Graph: a pure virtual class that defines graphs for IFPACK.
Definition: Ifpack_Graph.h:61
virtual int SetParameter(const std::string Name, const int Value)
Sets integer parameters ‘Name’.
virtual std::ostream & Print(std::ostream &os) const
Prints basic information on iostream. This function is used by operator<<.
virtual int Pinv(const Epetra_MultiVector &Xorig, Epetra_MultiVector &X) const
Applies inverse reordering to multivector Xorig, whose local length equals the number of local rows...
virtual int InvReorder(const int i) const
Returns the inverse reordered index of row i.