40 #ifndef ISORROPIA_EPETRA_ZOLTAN_QUERYOBJECT_H
41 #define ISORROPIA_EPETRA_ZOLTAN_QUERYOBJECT_H
45 #include <Teuchos_RCP.hpp>
47 #include <zoltan_cpp.h>
52 class Epetra_BlockMap;
53 class Epetra_CrsGraph;
54 class Epetra_RowMatrix;
55 class Epetra_MultiVector;
92 Teuchos::RCP<const Epetra_CrsGraph>
graph_;
98 Teuchos::RCP<const Epetra_RowMatrix>
matrix_;
105 Teuchos::RCP<const Epetra_MultiVector>
coords_;
119 Teuchos::RCP<const Isorropia::Epetra::CostDescriber>
costs_;
148 ZOLTAN_ID_PTR global_ids, ZOLTAN_ID_PTR local_ids,
149 int weight_dim,
float * object_weights,
int * ierr );
156 int num_obj, ZOLTAN_ID_PTR global_ids, ZOLTAN_ID_PTR local_ids,
157 int *num_edges,
int * ierr );
164 int num_obj, ZOLTAN_ID_PTR global_ids, ZOLTAN_ID_PTR local_ids,
165 int *num_edges, ZOLTAN_ID_PTR neighbor_global_ids,
int * neighbor_procs,
166 int weight_dim,
float * edge_weights,
int * ierr );
171 void My_HG_Size_CS (
int* num_lists,
int* num_pins,
int* format,
177 void My_HG_CS (
int num_gid_entries,
int num_row_or_col,
int num_pins,
178 int format, ZOLTAN_ID_PTR vtxedge_GID,
int* vtxedge_ptr, ZOLTAN_ID_PTR pin_GID,
185 void My_FGHG_CS (
int num_gid_entries,
int num_row_or_col,
int num_pins,
186 int format, ZOLTAN_ID_PTR vtxedge_GID,
int* vtxedge_ptr, ZOLTAN_ID_PTR pin_GID,
199 void My_HG_Edge_Weights(
int num_gid_entries,
int num_lid_entries,
int num_edges,
int edge_weight_dim,
200 ZOLTAN_ID_PTR edge_GID, ZOLTAN_ID_PTR edge_LID,
float* edge_weights,
int* ierr);
212 int num_obj, ZOLTAN_ID_PTR gids, ZOLTAN_ID_PTR lids,
int num_dim,
213 double *geom_vec,
int *ierr);
219 QueryObject( Teuchos::RCP<const Epetra_CrsGraph> graph,
220 Teuchos::RCP<const Isorropia::Epetra::CostDescriber> costs,
226 QueryObject( Teuchos::RCP<const Epetra_RowMatrix> matrix,
227 Teuchos::RCP<const Isorropia::Epetra::CostDescriber> costs,
232 QueryObject( Teuchos::RCP<const Epetra_MultiVector> coords,
233 Teuchos::RCP<const Epetra_MultiVector> weights);
238 QueryObject(Teuchos::RCP<const Epetra_CrsGraph> graph,
239 Teuchos::RCP<const Isorropia::Epetra::CostDescriber> costs,
240 Teuchos::RCP<const Epetra_MultiVector> coords,
241 Teuchos::RCP<const Epetra_MultiVector> weights,
247 QueryObject(Teuchos::RCP<const Epetra_RowMatrix> matrix,
248 Teuchos::RCP<const Isorropia::Epetra::CostDescriber> costs,
249 Teuchos::RCP<const Epetra_MultiVector> coords,
250 Teuchos::RCP<const Epetra_MultiVector> weights,
256 QueryObject( Teuchos::RCP<const Epetra_BlockMap> inputMap,
370 static void Object_List (
void * data,
int num_gid_entries,
int num_lid_entries,
371 ZOLTAN_ID_PTR global_ids, ZOLTAN_ID_PTR local_ids,
372 int weight_dim,
float * object_weights,
int * ierr );
378 static void Number_Edges_Multi (
void * data,
int num_gid_entries,
int num_lid_entries,
379 int num_obj, ZOLTAN_ID_PTR global_ids, ZOLTAN_ID_PTR local_ids,
380 int *num_edges,
int * ierr );
384 static void Edge_List_Multi(
void * data,
int num_gid_entries,
int num_lid_entries,
385 int num_obj, ZOLTAN_ID_PTR global_ids, ZOLTAN_ID_PTR local_ids,
386 int *num_edges, ZOLTAN_ID_PTR neighbor_global_ids,
int * neighbor_procs,
387 int weight_dim,
float * edge_weights,
int * ierr );
393 static void HG_Size_CS (
void * data,
int* num_lists,
int* num_pins,
int* format,
397 static void HG_CS (
void * data,
int num_gid_entries,
int num_row_or_col,
int num_pins,
398 int format, ZOLTAN_ID_PTR vtxedge_GID,
int* vtxedge_ptr, ZOLTAN_ID_PTR pin_GID,
407 int num_gid_entries,
int num_lid_entries,
int num_edges,
int edge_weight_dim,
408 ZOLTAN_ID_PTR edge_GID, ZOLTAN_ID_PTR edge_LID,
float* edge_weights,
int* ierr);
416 static void Geom_Multi(
void *data,
int num_gid_entries,
int num_lid_entries,
417 int num_obj, ZOLTAN_ID_PTR gids, ZOLTAN_ID_PTR lids,
int num_dim,
418 double *geom_vec,
int *ierr);
429 #endif //ISORROPIA_EPETRA_ZOLTAN_QUERYOBJECT_H
static void HG_CS(void *data, int num_gid_entries, int num_row_or_col, int num_pins, int format, ZOLTAN_ID_PTR vtxedge_GID, int *vtxedge_ptr, ZOLTAN_ID_PTR pin_GID, int *ierr)
The interface to a particular QueryObject's My_HG_CS query function.
void My_Geom_Multi(int num_gid_entries, int num_lid_entries, int num_obj, ZOLTAN_ID_PTR gids, ZOLTAN_ID_PTR lids, int num_dim, double *geom_vec, int *ierr)
My_Geom_Multi() is a query function used for geometric partitioning only.
QueryObject(Teuchos::RCP< const Epetra_CrsGraph > graph, Teuchos::RCP< const Isorropia::Epetra::CostDescriber > costs, int inputType)
Constructor.
int My_Number_Objects(int *ierr)
My_Number_Objects() returns the number of objects currently assigned to this process.
void My_FGHG_CS(int num_gid_entries, int num_row_or_col, int num_pins, int format, ZOLTAN_ID_PTR vtxedge_GID, int *vtxedge_ptr, ZOLTAN_ID_PTR pin_GID, int *ierr)
My_FGHG_CS() is a query function used for fine-grain hypergraph partitioning only.
void My_HG_Size_Edge_Weights(int *num_edges, int *ierr)
My_HG_Size_Edge_Weights() is a query function used for hypergraph partitioning only.
static void HG_Size_CS(void *data, int *num_lists, int *num_pins, int *format, int *ierr)
The interface to a particular QueryObject's My_HG_Size_CS query function.
static void Edge_List_Multi(void *data, int num_gid_entries, int num_lid_entries, int num_obj, ZOLTAN_ID_PTR global_ids, ZOLTAN_ID_PTR local_ids, int *num_edges, ZOLTAN_ID_PTR neighbor_global_ids, int *neighbor_procs, int weight_dim, float *edge_weights, int *ierr)
The interface to a particular QueryObject's My_Edges_Multi query function.
virtual ~QueryObject()
Destructor.
int My_Number_Geom(int *ierr)
My_Number_Geom() is a query function used for geometric partitioning only.
const Epetra_BlockMap & RowMap(void)
Return the map associated with the object to be partitioned.
Definition: QueryObject.hpp:345
unsigned int myProc_
Definition: QueryObject.hpp:131
Teuchos::RCP< const Epetra_MultiVector > weights_
The MultiVector contains optional object (point) weights for geometric partitioning.
Definition: QueryObject.hpp:126
static const int graph_geometric_input_
input_type_ == graph_geometric_input_ This indicates that the Epetra_MultiVector represents graph and...
Definition: QueryObject.hpp:314
static const int simple_input_
input_type_ == simple_input_ This indicates that a simple method (block, cyclic, or random) will be u...
Definition: QueryObject.hpp:326
QueryObject is a class that contains the query functions required by the Zoltan library.
Definition: QueryObject.hpp:81
Teuchos::RCP< const Epetra_MultiVector > coords_
The MultiVector containing 1, 2 or 3 dimensional coordinates.
Definition: QueryObject.hpp:105
static void Object_List(void *data, int num_gid_entries, int num_lid_entries, ZOLTAN_ID_PTR global_ids, ZOLTAN_ID_PTR local_ids, int weight_dim, float *object_weights, int *ierr)
The interface to a particular QueryObject's My_Object_List query function.
Teuchos::RCP< const Epetra_RowMatrix > matrix_
The CrsMatrix.
Definition: QueryObject.hpp:98
static const int hgraph_graph_input_
input_type_ == hgraph_graph_input_ This indicates that the Epetra_MultiVector represents a hypergraph...
Definition: QueryObject.hpp:299
static const int hgraph2d_finegrain_input_
input_type_ == hgraph2d_finegrain_input_.
Definition: QueryObject.hpp:277
static const int hgraph_input_
input_type_ == hgraph_input_.
Definition: QueryObject.hpp:271
static const int hgraph_graph_geometric_input_
input_type_ == hgraph_graph_geometric_input_ This indicates that the Epetra_MultiVector represents a ...
Definition: QueryObject.hpp:321
static void Geom_Multi(void *data, int num_gid_entries, int num_lid_entries, int num_obj, ZOLTAN_ID_PTR gids, ZOLTAN_ID_PTR lids, int num_dim, double *geom_vec, int *ierr)
The interface to a particular QueryObject's My_Geom_Multi query function.
unsigned int base_
Definition: QueryObject.hpp:132
static int Number_Objects(void *data, int *ierr)
The interface to a particular QueryObject's My_Number_Objects query function.
static void HG_Edge_Weights(void *data, int num_gid_entries, int num_lid_entries, int num_edges, int edge_weight_dim, ZOLTAN_ID_PTR edge_GID, ZOLTAN_ID_PTR edge_LID, float *edge_weights, int *ierr)
The interface to a particular QueryObject's My_HG_Edge_Weights query function.
std::set< int > graph_self_edges_
Definition: QueryObject.hpp:129
void My_Object_List(int num_gid_entries, int num_lid_entries, ZOLTAN_ID_PTR global_ids, ZOLTAN_ID_PTR local_ids, int weight_dim, float *object_weights, int *ierr)
My_ObjectList() returns to Zoltan the global ID and weight of the objects currently assigned to this ...
static const int geometric_input_
input_type_ == geometric_input_.
Definition: QueryObject.hpp:292
static void HG_Size_Edge_Weights(void *data, int *num_edges, int *ierr)
The interface to a particular QueryObject's My_HG_Size_Edge_Weights query function.
static int Number_Geom(void *data, int *ierr)
The interface to a particular QueryObject's My_Number_Geom query function.
Teuchos::RCP< const Epetra_CrsGraph > graph_
The CrsGraph.
Definition: QueryObject.hpp:92
int input_type_
The input_type_ indicates how the object to be partitioned is to be interpreted - as a graph or a hyp...
Definition: QueryObject.hpp:341
static void Number_Edges_Multi(void *data, int num_gid_entries, int num_lid_entries, int num_obj, ZOLTAN_ID_PTR global_ids, ZOLTAN_ID_PTR local_ids, int *num_edges, int *ierr)
The interface to a particular QueryObject's My_Number_Edges_Multi query function. ...
std::map< int, int > procmap_
Definition: QueryObject.hpp:128
const bool haveGraph_
haveGraph is true if we have CrsGraph, and not a CrsMatrix or a MultiVector.
Definition: QueryObject.hpp:87
bool haveVertexWeights()
Return true if any of the processes in the application have defined vertex weights.
const Epetra_BlockMap * colMap_
The graph or matrix column map.
Definition: QueryObject.hpp:113
void My_HG_CS(int num_gid_entries, int num_row_or_col, int num_pins, int format, ZOLTAN_ID_PTR vtxedge_GID, int *vtxedge_ptr, ZOLTAN_ID_PTR pin_GID, int *ierr)
My_HG_CS() is a query function used for hypergraph partitioning only.
const Epetra_BlockMap * rowMap_
The graph or matrix row map, or the MultiVector map.
Definition: QueryObject.hpp:109
static const int unspecified_input_
input_type_ == unspecified_input_.
Definition: QueryObject.hpp:332
void My_HG_Edge_Weights(int num_gid_entries, int num_lid_entries, int num_edges, int edge_weight_dim, ZOLTAN_ID_PTR edge_GID, ZOLTAN_ID_PTR edge_LID, float *edge_weights, int *ierr)
My_HG_Edge_Weights() is a query function used for hypergraph partitioning only.
void My_Edge_List_Multi(int num_gid_entries, int num_lid_entries, int num_obj, ZOLTAN_ID_PTR global_ids, ZOLTAN_ID_PTR local_ids, int *num_edges, ZOLTAN_ID_PTR neighbor_global_ids, int *neighbor_procs, int weight_dim, float *edge_weights, int *ierr)
My_Edge_List_Multi() is a query function used for graph partitioning only.
bool haveHypergraphEdgeWeights()
Return true if any of the processes in the application have defined hypergraph edge weights...
static const int graph_input_
input_type_ == graph_input_.
Definition: QueryObject.hpp:284
Teuchos::RCP< const Isorropia::Epetra::CostDescriber > costs_
The CostDescriber contains optional vertex and/or edge weights for graph and hypergraph partitioning...
Definition: QueryObject.hpp:119
bool haveGraphEdgeWeights()
Return true if any of the processes in the application have defined graph edge weights.
void My_HG_Size_CS(int *num_lists, int *num_pins, int *format, int *ierr)
My_HG_Size_CS() is a query function used for hypergraph partitioning only.
static const int hgraph_geometric_input_
input_type_ == hgraph_geometric_input_ This indicates that the Epetra_MultiVector represents a hyperg...
Definition: QueryObject.hpp:306
void My_Number_Edges_Multi(int num_gid_entries, int num_lid_entries, int num_obj, ZOLTAN_ID_PTR global_ids, ZOLTAN_ID_PTR local_ids, int *num_edges, int *ierr)
My_Number_Edges_Multi() is a query function used for graph partitioning only.