10#ifndef IFPACK2_ZOLTAN2_PARTITIONER_DEF_HPP
11#define IFPACK2_ZOLTAN2_PARTITIONER_DEF_HPP
13#if defined(HAVE_IFPACK2_ZOLTAN2)
14#include "Ifpack2_ConfigDefs.hpp"
15#include "Ifpack2_Zoltan2Partitioner_decl.hpp"
21template <
class GraphType>
22Zoltan2Partitioner<GraphType>::
23 Zoltan2Partitioner(
const Teuchos::RCP<const row_graph_type>& graph)
24 : OverlappingPartitioner<GraphType>(graph)
25 , zoltan2AlgoName_(
"phg") {}
27template <
class GraphType>
28Zoltan2Partitioner<GraphType>::~Zoltan2Partitioner() {}
30template <
class GraphType>
31void Zoltan2Partitioner<GraphType>::
32 setPartitionParameters(Teuchos::ParameterList& List) {
34 zoltan2AlgoName_ = List.get<std::string>(
"zoltan2: algorithm", zoltan2AlgoName_);
37template <
class GraphType>
38void Zoltan2Partitioner<GraphType>::computePartitions() {
40 Zoltan2GraphAdapterType zoltan2_graph(this->Graph_);
43 Teuchos::ParameterList zoltan2_params;
44 zoltan2_params.set(
"partitioning_approach",
"partition");
45 zoltan2_params.set(
"num_local_parts", this->NumLocalParts_);
46 if (zoltan2AlgoName_ ==
"parmetis") {
47 zoltan2_params.set(
"algorithm",
"parmetis");
48 zoltan2_params.set(
"symmetrize_input",
"transpose");
49 zoltan2_params.set(
"partitioning_objective",
"minimize_cut_edge_weight");
51 zoltan2_params.set(
"algorithm", zoltan2AlgoName_);
55 Zoltan2::PartitioningProblem<Zoltan2GraphAdapterType>
56 problem(&zoltan2_graph, &zoltan2_params, this->Graph_->getComm());
60 auto parts = problem.getSolution().getPartListView();
61 for (
size_t i = 0; i < this->Graph_->getLocalNumRows(); ++i) {
62 this->Partition_[i] = parts[i];
68#define IFPACK2_ZOLTAN2PARTITIONER_INSTANT(LO, GO, N) \
69 template class Ifpack2::Zoltan2Partitioner<Tpetra::CrsGraph<LO, GO, N> >; \
70 template class Ifpack2::Zoltan2Partitioner<Tpetra::RowGraph<LO, GO, N> >;
Preconditioners and smoothers for Tpetra sparse matrices.
Definition Ifpack2_AdditiveSchwarz_decl.hpp:40