- Member SMALL_NUMBER_OF_ROWS
test all methods of GraphModel
test with GraphAdapter: add testGraphAdapter which is like testAdapter except is uses GraphAdapter queries and it may have edges weights.
Address the TODOs in the code below.
- File StridedData.cpp
- Some of the tests require that you look at the output to know if they did the right thing. Enhance this so the test itself determines correctness.
- Member testFromDataFile (const RCP< const Teuchos::Comm< int > > &comm, int nParts, string &filename, bool doRemap)
error handling
write some examples that don't use teuchos
check the solution, visualize it somehow
- File TpetraCrsMatrixInput.cpp
- test with geometric row coordinates.
- File TpetraRowMatrixInput.cpp
- test with geometric row coordinates.
- Member USERINPUT_FILE_FORMATS
for very large files, each process reads in part of the file
Zoltan1 mtx and mtxp files
- File XpetraCrsGraphInput.cpp
- add weights and coordinates
- File XpetraCrsMatrixInput.cpp
- test with geometric row coordinates.
- File XpetraMultiVectorInput.cpp
- test with weights
- File XpetraVectorInput.cpp
- add test with weights
- Class Zoltan2::AlgBlock< Adapter >
Block partitioning uses one weight only
check for memory allocation failures
The metrics come out really bad. Is it an error in algorithm or in metrics.
- Class Zoltan2::ColoringProblem< Adapter >
include pointers to examples
- Should Problems and Solution have interfaces for returning views and for returning RCPs? Or just one? At a minimum, we should have the word "View" in function names that return views.
- Currently, only serial and shared-memory coloring are supported.
- Class Zoltan2::DebugManager
- For nightly testing, add a build for -DZ2_OMIT_ALL_STATUS_MESSAGES.
- Class Zoltan2::EvaluateMapping< Adapter, MachineRep >
For some problems it will be necessary to build the Model again in order to compute metrics. For now we don't have any problems like that.
write a unit test for this class
- Class Zoltan2::EvaluatePartition< Adapter >
For some problems it will be necessary to build the Model again in order to compute metrics. For now we don't have any problems like that.
write a unit test for this class
- Member Zoltan2::GraphModel< Adapter >::GraphModel (const RCP< const MatrixAdapter< user_t, userCoord_t > > &ia, const RCP< const Environment > &env, const RCP< const Comm< int > > &comm, modelFlag_t &modelFlags)
- document the model flags that might be set
- Member Zoltan2::HyperGraphModel< Adapter >::HyperGraphModel (const RCP< const MatrixAdapter< user_t, userCoord_t > > &ia, const RCP< const Environment > &env, const RCP< const Comm< int > > &comm, modelFlag_t &modelFlags, CentricView view)
- document the model flags that might be set
- Member Zoltan2::imbalanceMetrics (const RCP< const Environment > &env, const RCP< const Comm< int > > &comm, multiCriteriaNorm mcNorm, const Adapter *ia, const PartitioningSolution< Adapter > *solution, const ArrayView< const typename Adapter::part_t > &partArray, const RCP< const GraphModel< typename Adapter::base_adapter_t > > &graphModel, typename Adapter::part_t &numExistingParts, typename Adapter::part_t &numNonemptyParts, ArrayRCP< RCP< BaseClassMetrics< typename Adapter::scalar_t > > > &metrics)
- check that part sizes sum to one if we're doing COMPLEX_ASSERTION
- Class Zoltan2::MatrixAdapter< User, UserCoord >
Create BasicCrsMatrixAdapter subclass
Do we want to require adapters to give us the global number of rows, columns etc? We can figure that out.
This is a row-oriented matrix. Do we need a column-oriented matrix? In particular - we assumed coordinates are for rows.
If the user can tell us there are no diagonal entries in a square matrix, it can save time if we have to remove them for the algorithm. Should we have a set method in subclasses for setMatrixHasDiagonalEntries yes, no and maybe?
- Class Zoltan2::MatrixPartitioningProblem< Adapter >
include pointers to examples
follow partitioning with global or local ordering
allow unsetting of part sizes by passing in null pointers
add a parameter by which user tells us there are no self edges to be removed.
- Should Problems and Solution have interfaces for returning views and for returning RCPs? Or just one? At a minimum, we should have the word "View" in function names that return views.
repartition given an initial solution
- Class Zoltan2::MatrixPartitioningSolution< Adapter >
Problem computes metrics using the Solution. Should Solution have a pointer to the metrics, since it may persist after the Problem is gone?
save an RCB tree, so it can be used in repartitioning, and supplied to the caller.
doxyfy the comments in this file.
- Class Zoltan2::Model< Adapter >
- Add HypergraphModel, CoordinateModel
- Member Zoltan2::normedPartWeights (const RCP< const Environment > &env, part_t numberOfParts, const ArrayView< const part_t > &parts, const ArrayView< StridedData< lno_t, scalar_t > > &vwgts, multiCriteriaNorm mcNorm, scalar_t *weights)
- - Zoltan_norm() in Zoltan may scale the weight. Do we ever need this?
- Class Zoltan2::OrderingProblem< Adapter >
include pointers to examples
- Should Problems and Solution have interfaces for returning views and for returning RCPs? Or just one? At a minimum, we should have the word "View" in function names that return views.
follow ordering with partitioning
- Class Zoltan2::PartitioningProblem< Adapter >
include pointers to examples
repartition given an initial solution
follow partitioning with global or local ordering
allow unsetting of part sizes by passing in null pointers
add a parameter by which user tells us there are no self edges to be removed.
- Should Problems and Solution have interfaces for returning views and for returning RCPs? Or just one? At a minimum, we should have the word "View" in function names that return views.
hierarchical partitioning
- Member Zoltan2::PartitioningProblem< Adapter >::setPartSizes (int len, part_t *partIds, scalar_t *partSizes, bool makeCopy=true)
- A user should be able to give us one set of part sizes that applies to all weight indices. Right now for each weight index that does not have uniform part sizes, the user has to give us the part sizes once for each.
- Class Zoltan2::PartitioningSolution< Adapter >
Problem computes metrics using the Solution. Should Solution have a pointer to the metrics, since it may persist after the Problem is gone?
save an RCB tree, so it can be used in repartitioning, and supplied to the caller.
doxyfy the comments in this file.
- Member Zoltan2::PartitioningSolution< Adapter >::getCriteriaPartSize (int idx, part_t part) const
- It would be useful to algorithms to get the sum of part sizes from a to b, or the sum or a list of parts.
- Member Zoltan2::PartitioningSolution< Adapter >::getLocalFractionOfPart () const
- More useful to get number of processes owning part? Or not useful at all - remove this?
- Member Zoltan2::PartitioningSolution< Adapter >::PartitioningSolution (const RCP< const Environment > &env, const RCP< const Comm< int > > &comm, int nUserWeights, ArrayView< ArrayRCP< part_t > > reqPartIds, ArrayView< ArrayRCP< scalar_t > > reqPartSizes, const RCP< Algorithm< Adapter > > &algorithm=Teuchos::null)
- handle errors that may arise - like duplicate part numbers
- Class Zoltan2::TpetraCrsGraphAdapter< User, UserCoord >
test for memory alloc failure when we resize a vector
we assume FillComplete has been called. Should we support objects that are not FillCompleted.
- Class Zoltan2::TpetraCrsMatrixAdapter< User, UserCoord >
we assume FillComplete has been called. We should support objects that are not FillCompleted.
add RowMatrix
- Class Zoltan2::TpetraRowGraphAdapter< User, UserCoord >
test for memory alloc failure when we resize a vector
we assume FillComplete has been called. Should we support objects that are not FillCompleted.
- Class Zoltan2::VectorAdapter< User >
- We can make global Ids optional. We don't need them.
- Class Zoltan2::XpetraCrsGraphAdapter< User, UserCoord >
test for memory alloc failure when we resize a vector
we assume FillComplete has been called. Should we support objects that are not FillCompleted.
- Class Zoltan2::XpetraCrsMatrixAdapter< User, UserCoord >
we assume FillComplete has been called. We should support objects that are not FillCompleted.
add RowMatrix
- File Zoltan2_IO.cpp
- write a solution and its model to an exodus file
- File Zoltan2_Solution.hpp
- The Solution classes are part of the API. This is problematic right now - they use many internal classes and are used by Problems and algorithms. Maybe there should be a SolutionAPI object within the Solution which is the visible part of the Solution. The source for this class could be in the src/input directory. This is where the input adapters which use that part of the solution reside.
- File Zoltan2_Standards.hpp
- Should we allow data types for part ID to be set as cmake configure options? Part ID lists in the PartitioningSolution are of length "number of objects". If part ID could be short or int, we save significant memory. For now - typedef'd to int so it is easy to change. It seems data type for proc should be int - since it is int in the rest of Trilinos.
- File Zoltan2_Util.hpp
- Should each class of utility functions be in a separate source file instead of having a source file with the unhelpful name of Util?