Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members

Isorropia: Partitioning and Rebalancing package

Version 1.0d


Isorropia is a repartitioning/rebalancing package, intended to assist with redistributing objects such as matrices and matrix-graphs in a parallel execution setting, to allow for more efficient computations. To enable Isorropia in your Trilinos build, provide the argument '--enable-isorropia' to configure.

Isorropia is primarily an interface to the Zoltan library, but can be built and used with minimal capability without Zoltan. To enable Isorropia's Zoltan support, you need to add '--enable-isorropia-zoltan' and '--enable-epetraext' to your Trilinos configure command, and provide include-paths and library specifications for Zoltan version 2.0 (provide these to configure using the '--with-incdirs' and '--with-libs' configure arguments).

Overview of Isorropia.

Isorropia's user interface consists primarily of the Isorropia::Partitioner, Isorropia::Redistributor and Isorropia::CostDescriber classes, as well as the Isorropia::Epetra::create_balanced_copy functions.

The Isorropia::create_balanced_copy functions are free-standing functions (not class members) which simply take an input object (Epetra_CrsGraph, Epetra_CrsMatrix, etc.) and return a copy which is balanced across partitions.

For more sophisticated use-cases, such as performing one partitioning and then using it to redistribute multiple objects, it is more efficient to use the Isorropia::Partitioner and Isorropia::Redistributor classes. The general usage model is to:

  1. create a Isorropia::Partitioner instance (providing as input the matrix-graph or row-matrix object that is to be re-partitioned, and optionally a Isorropia::CostDescriber instance with weights/costs to influence the partitioning).
  2. create a Isorropia::Redistributor object (providing as input a Isorropia::Partitioner instance)
  3. Use the Isorropia::Redistributor to redistribute one or more objects to the new partitioning.

Isorropia is currently aimed primarily at repartitioning/redistributing Epetra objects, including Epetra_CrsGraph, Epetra_RowMatrix (which includes Epetra_CrsMatrix and Epetra_VbrMatrix) and Epetra_MultiVector.

Example Programs

A number of example programs which demonstrate using Isorropia are provided in the 'packages/isorropia/example' subdirectory.

matrix_1.cpp demonstrates creating a balanced copy of Epetra_CrsGraph and Epetra_CrsMatrix objects using Isorropia::Epetra::create_balanced_copy functions.

part_redist.cpp demonstrates repartitioning and redistributing the contents of an Epetra_LinearProblem object, using the Isorropia::Partitioner and Isorropia::Redistributor classes. This program does not use user-specified weights/costs.

Other programs in the example subdirectory demonstrate the use of weights/costs data to influence the partitioner. See vert_weights.cpp, graphedge_weights.cpp and hgedge_weights.cpp.

Defaults, Parameters, ...

Several Isorropia classes and methods accept Teuchos::ParameterList objects, allowing the user to control certain behavior.