Isorropia: Partitioning, Load Balancing and more
Functions
ispatest Namespace Reference

ispatest is the namespace that contains isorropia's test-utilities. More...

Functions

int fill_matrix (Epetra_CrsMatrix &matrix, int numNonzerosPerRow, bool verbose)
 Fill a matrix with the specified number of nonzeros per row, using matrix.InsertGlobalValues. More...
 
int fill_graph (Epetra_CrsGraph &graph, int numNonzerosPerRow, bool verbose)
 Fill a graph with the specified number of nonzeros per row. More...
 
bool test_matrix_vector_multiply (Epetra_CrsMatrix &A)
 Verify that a matrix is a valid Epetra_CrsMatrix by attempting to multiply with it. More...
 
bool test_row_matrix_vector_multiply (Epetra_RowMatrix &R)
 Verify that a matrix is a valid Epetra_RowMatrix by attempting to multiply with it. More...
 
bool test_matrix_vector_multiply (Epetra_CrsGraph &G)
 Verify that a matrix is a valid Epetra_CrsGraph by attempting to multiply with it. More...
 
bool test_matrix_vector_multiply (Epetra_LinearProblem &LP)
 Verify that the Epetra_RowMatrix in a Epetra_LinearProblem is valid by attempting to multiply with it. More...
 
Epetra_Map * map_from_blockmap (const Epetra_BlockMap &b)
 Method to create an Epetra_Map from an Epetra_BlockMap, when using methods that require an Epetra_Map but you only have an Epetra_BlockMap. More...
 
int readCoordFile (const std::string &fname, std::vector< double > &x, std::vector< double > &y, std::vector< double > &z)
 Read in the file "fname". More...
 
Epetra_MultiVector * makeWeights (const Epetra_BlockMap &map, double(*wFunc)(const int, const int, const int, const int))
 Create a multivector of 1 dimensional weights with the same distribution as the supplied map. More...
 
double unitWeights (const int id, const int me, const int nids, const int nprocs)
 A function for makeWeights, returns 1.0 for the object's weight. More...
 
double veeWeights (const int id, const int me, const int nids, const int nprocs)
 A function for makeWeights, weight is based on global ID, lower in the middle and higher at both ends. More...
 
double alternateWeights (const int id, const int me, const int nids, const int nprocs)
 A function for makeWeights, weights alternate 1.0, 2.0, 1.0, etc. More...
 
Epetra_MultiVector * file2multivector (const Epetra_Comm &comm, const std::string &fname)
 Read in a file of 1, 2 or 3 dimensional coordinates and create a multivector with a standard linear distribution. More...
 
int printMultiVector (const Epetra_MultiVector &mv, std::ostream &os, const char *s, int max=1000)
 Print out the contents of the multivector by process, with optional title. More...
 
int printRowMatrix (const Epetra_RowMatrix &m, std::ostream &os, const char *s, bool withGraphCuts, int max=1000)
 Print out the contents of a small Epetra_RowMatrix, with optional title. More...
 
int compute_balance (const Epetra_Vector &wgts, double myGoalWeight, double &min, double &max, double &avg)
 Given an Epetra_Vector of weights, compute the weight imbalance on each process. More...
 
int compute_hypergraph_metrics (const Epetra_CrsGraph &graph, Isorropia::Epetra::CostDescriber &costs, double &myGoalWeight, double &balance, double &cutn, double &cutl)
 Compute Zoltan-style hypergraph metrics given a partitioned CrsGraph and a CostDescriber (weight) object. More...
 
int compute_hypergraph_metrics (const Epetra_RowMatrix &matrix, Isorropia::Epetra::CostDescriber &costs, double &myGoalWeight, double &balance, double &cutn, double &cutl)
 Compute Zoltan-style hypergraph metrics given a partitioned RowMatrix and a CostDescriber (weight) object. More...
 
int compute_graph_metrics (const Epetra_RowMatrix &matrix, Isorropia::Epetra::CostDescriber &costs, double &myGoalWeight, double &balance, int &numCuts, double &cutWgt, double &cutn, double &cutl)
 Compute graph metrics given an Epetra_RowMatrix. More...
 
int compute_graph_metrics (const Epetra_CrsGraph &graph, Isorropia::Epetra::CostDescriber &costs, double &myGoalWeight, double &balance, int &numCuts, double &cutWgt, double &cutn, double &cutl)
 Compute graph metrics given an Epetra_CrsGraph. More...
 
void show_matrix (const char *txt, const Epetra_RowMatrix &matrix, const Epetra_Comm &comm)
 Print out a distributed RowMatrix. More...
 
void show_matrix (const char *txt, const Epetra_CrsGraph &graph, const Epetra_Comm &comm)
 Print out a distributed CrsGraph. More...
 
void show_matrix (const char *txt, const Epetra_LinearProblem &problem, const Epetra_Comm &comm)
 Print out a distributed LinearProblem. More...
 
void read_distribution (const char *filename, std::vector< int > &rows, std::vector< int > &cols, std::vector< int > &partitions)
 Read a matrix distribution from a file. More...
 
bool set_verbose (int localProc, int argc, char **argv)
 return a bool that's true if –v appears in the command-line arguments. More...
 

Detailed Description

ispatest is the namespace that contains isorropia's test-utilities.

These test-utilities are for internal testing, and are not generally expected to be seen or used by external users.

Function Documentation

int ispatest::fill_matrix ( Epetra_CrsMatrix &  matrix,
int  numNonzerosPerRow,
bool  verbose 
)

Fill a matrix with the specified number of nonzeros per row, using matrix.InsertGlobalValues.

Call FillComplete on the matrix before returning. If any negative error code is returned by an Epetra method, that will be the return value of this function.

int ispatest::fill_graph ( Epetra_CrsGraph &  graph,
int  numNonzerosPerRow,
bool  verbose 
)

Fill a graph with the specified number of nonzeros per row.

Call FillComplete on the graph before returning. If any non-zero error code is returned by an Epetra method, that will be the return value of this function.

bool ispatest::test_matrix_vector_multiply ( Epetra_CrsMatrix &  A)

Verify that a matrix is a valid Epetra_CrsMatrix by attempting to multiply with it.

Return true if successful, false otherwise.

A is the input matrix, and "x" and "y" will be created and then y = Ax will be computed.

"x" will be created with the domain map of the "A", "y" will be created with the range map.

Return true if successful, false otherwise.

bool ispatest::test_row_matrix_vector_multiply ( Epetra_RowMatrix &  R)

Verify that a matrix is a valid Epetra_RowMatrix by attempting to multiply with it.

Return true if successful, false otherwise.

y = Rx will be calculated, where "y" will be created with the OperatorRangeMap() of "R" and "x" will be created with the OperatorDomainMap() of "R".

Return true if successful, false otherwise.

bool ispatest::test_matrix_vector_multiply ( Epetra_CrsGraph &  G)

Verify that a matrix is a valid Epetra_CrsGraph by attempting to multiply with it.

Return true if successful, false otherwise.

An Epetra_CrsMatrix (A) will be created from the input graph G, and then y = Ax will be computed.

"x" will be created with the domain map of "G", and "y" will be created with the range map of "G".

Return true if successful, false otherwise.

bool ispatest::test_matrix_vector_multiply ( Epetra_LinearProblem &  LP)

Verify that the Epetra_RowMatrix in a Epetra_LinearProblem is valid by attempting to multiply with it.

An Epetra_RowMatrix (R) will be extracted from the linear problem, and then y = Rx will be computed.

"y" will be created with the OperatorRangeMap() of "R" and "x" will be created with the OperatorDomainMap() of "R".

This test does not use the vectors in the linear problem, it uses a made up vector. (Maybe it should use rhs and lhs?)

Return true if successful, false otherwise.

Epetra_Map* ispatest::map_from_blockmap ( const Epetra_BlockMap &  b)

Method to create an Epetra_Map from an Epetra_BlockMap, when using methods that require an Epetra_Map but you only have an Epetra_BlockMap.

Caller should delete the returned map when done with it.

int ispatest::readCoordFile ( const std::string &  fname,
std::vector< double > &  x,
std::vector< double > &  y,
std::vector< double > &  z 
)

Read in the file "fname".

It should be a text file with a list of 1, 2 or 3-dimensional floating point coordinates. Each is on one line of the file, and coordinates are separated by white space. Blank lines are allowed.

Fill the vectors x, y, and z with the x, y and z coordinates. (z will have size 0 for 1 and 2 dimensional coordinates, y will have size 0 for 1 dimensional coordinates.)

Return the dimension of the coordinates, or 0 if none could be read.

Epetra_MultiVector* ispatest::makeWeights ( const Epetra_BlockMap &  map,
double(*)(const int, const int, const int, const int)  wFunc 
)

Create a multivector of 1 dimensional weights with the same distribution as the supplied map.

The weight for each object will be computed with the supplied function. The arguments for the supplied function are the global ID of the object, the rank of the calling process, the global number of objects, and the number of processes.

Examples:
geometric/example_rcb.cpp.
double ispatest::unitWeights ( const int  id,
const int  me,
const int  nids,
const int  nprocs 
)

A function for makeWeights, returns 1.0 for the object's weight.

double ispatest::veeWeights ( const int  id,
const int  me,
const int  nids,
const int  nprocs 
)

A function for makeWeights, weight is based on global ID, lower in the middle and higher at both ends.

Graph of weights for IDs would be "v" shaped.

double ispatest::alternateWeights ( const int  id,
const int  me,
const int  nids,
const int  nprocs 
)

A function for makeWeights, weights alternate 1.0, 2.0, 1.0, etc.

by process ID.

Examples:
geometric/example_rcb.cpp.
Epetra_MultiVector* ispatest::file2multivector ( const Epetra_Comm &  comm,
const std::string &  fname 
)

Read in a file of 1, 2 or 3 dimensional coordinates and create a multivector with a standard linear distribution.

Examples:
geometric/example_rcb.cpp.
int ispatest::printMultiVector ( const Epetra_MultiVector &  mv,
std::ostream &  os,
const char *  s,
int  max = 1000 
)

Print out the contents of the multivector by process, with optional title.

This is more compact the Epetra_MultiVector::Print().

Examples:
geometric/example_rcb.cpp.
int ispatest::printRowMatrix ( const Epetra_RowMatrix &  m,
std::ostream &  os,
const char *  s,
bool  withGraphCuts,
int  max = 1000 
)

Print out the contents of a small Epetra_RowMatrix, with optional title.

There is no Epetra_RowMatrix::Print. If m is symmetric, we can view it as a graph and show graph cuts if "withGraphCuts" is true.

int ispatest::compute_balance ( const Epetra_Vector &  wgts,
double  myGoalWeight,
double &  min,
double &  max,
double &  avg 
)

Given an Epetra_Vector of weights, compute the weight imbalance on each process.

Set the minimum imbalance across all processes, the maximum, and the average. myShare is between 0 and 1, and usually would be 1.0/numProc.

Examples:
geometric/example_rcb.cpp.
int ispatest::compute_hypergraph_metrics ( const Epetra_CrsGraph &  graph,
Isorropia::Epetra::CostDescriber costs,
double &  myGoalWeight,
double &  balance,
double &  cutn,
double &  cutl 
)

Compute Zoltan-style hypergraph metrics given a partitioned CrsGraph and a CostDescriber (weight) object.

If the CostDescriber has no weights in it, reasonable defaults will be used.

Examples:
hgedge_weights.cpp, matrix_1.cpp, and part_redist.cpp.
int ispatest::compute_hypergraph_metrics ( const Epetra_RowMatrix &  matrix,
Isorropia::Epetra::CostDescriber costs,
double &  myGoalWeight,
double &  balance,
double &  cutn,
double &  cutl 
)

Compute Zoltan-style hypergraph metrics given a partitioned RowMatrix and a CostDescriber (weight) object.

If the CostDescriber has no weights in it, reasonable defaults will be used.

int ispatest::compute_graph_metrics ( const Epetra_RowMatrix &  matrix,
Isorropia::Epetra::CostDescriber costs,
double &  myGoalWeight,
double &  balance,
int &  numCuts,
double &  cutWgt,
double &  cutn,
double &  cutl 
)

Compute graph metrics given an Epetra_RowMatrix.

A CostDescriber object may provide vertex (row) and/or edge (non-zeroes) weights, or it may be an initialized object with no weights. If no vertex weights are provided, each vertex is assumed to be weight 1. If no edge weights are provided, each edge is assumed to be weight 1.

The goal weight for a process is the proportion of the total vertex (row) weights that were to be assigned to this process under repartitioning. If all processes are to get an equal proportion of the weight, set this value to (1.0 / # processes). This value is needed in order to compute how close the repartitioning is to being perfectly balanced.

If the CostDescriber has no weights in it, reasonable defaults will be used.

Examples:
graphedge_weights.cpp, matrix_1.cpp, and vert_weights.cpp.
int ispatest::compute_graph_metrics ( const Epetra_CrsGraph &  graph,
Isorropia::Epetra::CostDescriber costs,
double &  myGoalWeight,
double &  balance,
int &  numCuts,
double &  cutWgt,
double &  cutn,
double &  cutl 
)

Compute graph metrics given an Epetra_CrsGraph.

A CostDescriber object may provide vertex (row) and/or edge (non-zeroes) weights, or it may be an initialized object with no weights. If no vertex weights are provided, each vertex is assumed to be weight 1. If no edge weights are provided, each edge is assumed to be weight 1.

The goal weight for a process is the proportion of the total vertex (row) weights that were to be assigned to this process under repartitioning. If all processes are to get an equal proportion of the weight, set this value to (1.0 / # processes). This value is needed in order to compute how close the repartitioning is to being perfectly balanced.

If the CostDescriber has no weights in it, reasonable defaults will be used.

void ispatest::show_matrix ( const char *  txt,
const Epetra_RowMatrix &  matrix,
const Epetra_Comm &  comm 
)

Print out a distributed RowMatrix.

This only works for small test matrices of 1s and 0s, and 10 or fewer processes.

void ispatest::show_matrix ( const char *  txt,
const Epetra_CrsGraph &  graph,
const Epetra_Comm &  comm 
)

Print out a distributed CrsGraph.

This only works for small test matrices of 1s and 0s and 10 or fewer processes.

void ispatest::show_matrix ( const char *  txt,
const Epetra_LinearProblem &  problem,
const Epetra_Comm &  comm 
)

Print out a distributed LinearProblem.

This only works for small test matrices of 1s and 0s and 10 or fewer processes.

void ispatest::read_distribution ( const char *  filename,
std::vector< int > &  rows,
std::vector< int > &  cols,
std::vector< int > &  partitions 
)

Read a matrix distribution from a file.

The file is expected to follow a very simple format where each line corresponds to a single nonzero of the matrix, and each line contains 3 numbers which specify a row number, a column-number, and a partition number. When this function returns, each of the three vectors should have the same length, which is the number of nonzeros.

bool ispatest::set_verbose ( int  localProc,
int  argc,
char **  argv 
)

return a bool that's true if –v appears in the command-line arguments.