Ifpack Package Browser (Single Doxygen Collection) Development
Loading...
Searching...
No Matches
Ifpack_METISReordering.h
Go to the documentation of this file.
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
52class Epetra_Comm;
53class Ifpack_Graph;
54class Epetra_Map;
55class Epetra_BlockMap;
56class Epetra_Import;
57
59
61
62public:
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",
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
122private:
130 std::vector<int> Reorder_;
132 std::vector<int> InvReorder_;
133
134}; // class Ifpack_METISReordering
135
136#endif // IFPACK_METISREORDERING_H
adjacency_list< vecS, vecS, undirectedS, no_property, property< edge_weight_t, double > > Graph
Ifpack_Graph: a pure virtual class that defines graphs for IFPACK.
Ifpack_METISReordering: A class to reorder a graph using METIS.
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,...
bool IsComputed_
If true, the reordering has been successfully computed.
virtual int InvReorder(const int i) const
Returns the inverse reordered index of row i.
virtual std::ostream & Print(std::ostream &os) const
Prints basic information on iostream. This function is used by operator<<.
bool UseSymmetricGraph_
If true, the graph has to be symmetrized before calling 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,...
virtual ~Ifpack_METISReordering()
Destructor.
virtual bool IsComputed() const
Returns true is the reordering object has been successfully initialized, false otherwise.
virtual int SetParameter(const std::string Name, const int Value)
Sets integer parameters ‘Name’.
virtual int Compute(const Ifpack_Graph &Graph)
Computes all it is necessary to initialize the reordering object.
virtual int SetParameter(const std::string, const double)
Sets double parameters ‘Name’.
std::vector< int > Reorder_
Contains the reordering.
virtual int Reorder(const int i) const
Returns the reordered index of row i.
int NumMyRows_
Number of local rows in the graph.
virtual int SetParameters(Teuchos::ParameterList &List)
Sets all the parameters for the partitioner (none at moment).
std::vector< int > InvReorder_
Contains the inverse reordering.
Ifpack_Reordering: basic class for reordering for a Ifpack_Graph object.
int bool