Isorropia: Partitioning, Load Balancing and more
Isorropia_EpetraLibrary.hpp
Go to the documentation of this file.
1//@HEADER
2//************************************************************************
3//
4// Isorropia: Partitioning and Load Balancing Package
5// Copyright (2006) 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//************************************************************************
38//@HEADER
39
40#ifndef _Isorropia_EpetraLibrary_hpp_
41#define _Isorropia_EpetraLibrary_hpp_
42
44#include <Teuchos_RCP.hpp>
45#include <Teuchos_ParameterList.hpp>
46
48
49#ifdef HAVE_EPETRA
50class Epetra_Map;
51class Epetra_BlockMap;
52class Epetra_Import;
53class Epetra_Vector;
54class Epetra_MultiVector;
55class Epetra_CrsGraph;
56class Epetra_CrsMatrix;
57class Epetra_RowMatrix;
58class Epetra_LinearProblem;
59
60namespace Isorropia {
61
62namespace Epetra {
63 class CostDescriber;
64
70class Library {
71public:
72
73 Library(Teuchos::RCP<const Epetra_CrsGraph> input_graph, int itype = unspecified_input_);
74 Library(Teuchos::RCP<const Epetra_CrsGraph> input_graph, Teuchos::RCP<const Epetra_MultiVector> input_coords,
75 int itype = unspecified_input_);
76 Library(Teuchos::RCP<const Epetra_CrsGraph> input_graph,
77 Teuchos::RCP<CostDescriber> costs, int itype = unspecified_input_);
78 Library(Teuchos::RCP<const Epetra_CrsGraph> input_graph, Teuchos::RCP<CostDescriber> costs,
79 Teuchos::RCP<const Epetra_MultiVector> input_coords, Teuchos::RCP<const Epetra_MultiVector> weights,
80 int itype = unspecified_input_);
81 Library(Teuchos::RCP<const Epetra_RowMatrix> input_matrix, int itype = unspecified_input_);
82 Library(Teuchos::RCP<const Epetra_RowMatrix> input_matrix, Teuchos::RCP<const Epetra_MultiVector> input_coords,
83 int itype = unspecified_input_);
84 Library(Teuchos::RCP<const Epetra_RowMatrix> input_matrix,
85 Teuchos::RCP<CostDescriber> costs, int itype = unspecified_input_);
86 Library(Teuchos::RCP<const Epetra_RowMatrix> input_matrix, Teuchos::RCP<CostDescriber> costs,
87 Teuchos::RCP<const Epetra_MultiVector> input_coords, Teuchos::RCP<const Epetra_MultiVector> weights,
88 int itype = unspecified_input_);
89 Library(Teuchos::RCP<const Epetra_MultiVector> input_coords, int itype = unspecified_input_);
90 Library(Teuchos::RCP<const Epetra_MultiVector> input_coords,
91 Teuchos::RCP<const Epetra_MultiVector> weights, int itype = unspecified_input_);
92 Library(Teuchos::RCP<const Epetra_BlockMap> input_map, int itype = unspecified_input_);
93
94 virtual ~Library();
95
96 virtual int
97 repartition(Teuchos::ParameterList& paramlist,
98 std::vector<int>& myNewElements,
99 int& exportsSize,
100 std::vector<int>& imports) = 0;
101
102 virtual int
103 color(Teuchos::ParameterList& paramlist,
104 std::vector<int>& colorAssignment) = 0 ;
105
106 virtual int
107 order(Teuchos::ParameterList& paramlist,
108 std::vector<int>& orderAssignment) = 0 ;
109
115 static const int hgraph_input_ = 1;
116
121 static const int hgraph2d_finegrain_input_ = 2;
122
128 static const int graph_input_ = 3;
129
136 static const int geometric_input_ = 4;
137
143 static const int hgraph_graph_input_ = 5;
144
150 static const int hgraph_geometric_input_ = 6;
151
157 static const int graph_geometric_input_ = 7;
158
164 static const int hgraph_graph_geometric_input_ = 8;
165
166
171 static const int simple_input_ = 9;
172
173
178 static const int unspecified_input_ = 10;
179
181
184 float *partSizes;
185
186protected:
187
188 Teuchos::RCP<const Epetra_BlockMap> input_map_;
189 Teuchos::RCP<const Epetra_CrsGraph> input_graph_;
190 Teuchos::RCP<const Epetra_RowMatrix> input_matrix_;
191 Teuchos::RCP<const Epetra_MultiVector> input_coords_;
192 Teuchos::RCP<Isorropia::Epetra::CostDescriber> costs_;
193 Teuchos::RCP<const Epetra_MultiVector> weights_;
194
195 virtual int precompute();
196
197 virtual int postcompute() = 0;
198
199};//class Library
200
201}//namespace Epetra
202}//namespace Isorropia
203
204#endif //HAVE_EPETRA
205
206#endif
207
An implementation of the Partitioner interface that operates on Epetra matrices and linear systems.
Definition Isorropia_EpetraLibrary.hpp:70
static const int graph_geometric_input_
input_type_ == graph_geom_input_ This indicates that the Epetra_MultiVector represents a hypergraph a...
Definition Isorropia_EpetraLibrary.hpp:157
int * partGIDs
Definition Isorropia_EpetraLibrary.hpp:183
static const int unspecified_input_
input_type_ == unspecified_input_ This value is the "unset" state for the input_type_ instance variab...
Definition Isorropia_EpetraLibrary.hpp:178
static const int hgraph2d_finegrain_input_
input_type_ == hgraph2d_finegrain_input_ This indicates that the matrix or graph represents a hypergr...
Definition Isorropia_EpetraLibrary.hpp:121
Library(Teuchos::RCP< const Epetra_MultiVector > input_coords, int itype=unspecified_input_)
Library(Teuchos::RCP< const Epetra_CrsGraph > input_graph, int itype=unspecified_input_)
Library(Teuchos::RCP< const Epetra_RowMatrix > input_matrix, Teuchos::RCP< const Epetra_MultiVector > input_coords, int itype=unspecified_input_)
virtual int postcompute()=0
int numPartSizes
Definition Isorropia_EpetraLibrary.hpp:182
Library(Teuchos::RCP< const Epetra_RowMatrix > input_matrix, int itype=unspecified_input_)
Library(Teuchos::RCP< const Epetra_CrsGraph > input_graph, Teuchos::RCP< CostDescriber > costs, Teuchos::RCP< const Epetra_MultiVector > input_coords, Teuchos::RCP< const Epetra_MultiVector > weights, int itype=unspecified_input_)
Library(Teuchos::RCP< const Epetra_RowMatrix > input_matrix, Teuchos::RCP< CostDescriber > costs, int itype=unspecified_input_)
virtual int order(Teuchos::ParameterList &paramlist, std::vector< int > &orderAssignment)=0
Teuchos::RCP< const Epetra_MultiVector > weights_
Definition Isorropia_EpetraLibrary.hpp:193
Teuchos::RCP< Isorropia::Epetra::CostDescriber > costs_
Definition Isorropia_EpetraLibrary.hpp:192
Library(Teuchos::RCP< const Epetra_MultiVector > input_coords, Teuchos::RCP< const Epetra_MultiVector > weights, int itype=unspecified_input_)
Teuchos::RCP< const Epetra_RowMatrix > input_matrix_
Definition Isorropia_EpetraLibrary.hpp:190
float * partSizes
Definition Isorropia_EpetraLibrary.hpp:184
static const int hgraph_input_
input_type_ == hgraph_input_ This indicates that the matrix or graph represents a hypergraph.
Definition Isorropia_EpetraLibrary.hpp:115
virtual int color(Teuchos::ParameterList &paramlist, std::vector< int > &colorAssignment)=0
static const int graph_input_
input_type_ == graph_input_ This indicates that the square symmetric matrix or graph represents a gra...
Definition Isorropia_EpetraLibrary.hpp:128
static const int geometric_input_
input_type_ == geometric_input_ This indicates that the Epetra_MultiVector represents geometric coord...
Definition Isorropia_EpetraLibrary.hpp:136
virtual int repartition(Teuchos::ParameterList &paramlist, std::vector< int > &myNewElements, int &exportsSize, std::vector< int > &imports)=0
Teuchos::RCP< const Epetra_CrsGraph > input_graph_
Definition Isorropia_EpetraLibrary.hpp:189
Library(Teuchos::RCP< const Epetra_CrsGraph > input_graph, Teuchos::RCP< CostDescriber > costs, int itype=unspecified_input_)
Library(Teuchos::RCP< const Epetra_RowMatrix > input_matrix, Teuchos::RCP< CostDescriber > costs, Teuchos::RCP< const Epetra_MultiVector > input_coords, Teuchos::RCP< const Epetra_MultiVector > weights, int itype=unspecified_input_)
static const int simple_input_
input_type_ == simple_input_ This is used to indicate that a simple partitiong method (block,...
Definition Isorropia_EpetraLibrary.hpp:171
Teuchos::RCP< const Epetra_MultiVector > input_coords_
Definition Isorropia_EpetraLibrary.hpp:191
static const int hgraph_graph_input_
input_type_ == hgraph_graph_input_ This indicates that the Epetra_MultiVector represents a hypergraph...
Definition Isorropia_EpetraLibrary.hpp:143
int input_type_
Definition Isorropia_EpetraLibrary.hpp:180
static const int hgraph_graph_geometric_input_
input_type_ == hgraph_graph_geom_input_ This indicates that the Epetra_MultiVector represents a hyper...
Definition Isorropia_EpetraLibrary.hpp:164
static const int hgraph_geometric_input_
input_type_ == hgraph_geom_input_ This indicates that the Epetra_MultiVector represents a hypergraph ...
Definition Isorropia_EpetraLibrary.hpp:150
Library(Teuchos::RCP< const Epetra_CrsGraph > input_graph, Teuchos::RCP< const Epetra_MultiVector > input_coords, int itype=unspecified_input_)
Library(Teuchos::RCP< const Epetra_BlockMap > input_map, int itype=unspecified_input_)
Teuchos::RCP< const Epetra_BlockMap > input_map_
Definition Isorropia_EpetraLibrary.hpp:188
Isorropia is the namespace that contains general definitions that apply to all partitioners and that ...
Definition Isorropia_Epetra.hpp:60