15#ifndef _ZOLTAN2_MATCHINGPROBLEM_HPP_
16#define _ZOLTAN2_MATCHINGPROBLEM_HPP_
21#include <Zoltan2_MatchingAlgorithms.hpp>
29using Teuchos::rcp_dynamic_cast;
54template<
typename Adapter>
55class MatchingProblem :
public Problem<Adapter>
59 typedef typename Adapter::scalar_t scalar_t;
60 typedef typename Adapter::gno_t
gno_t;
61 typedef typename Adapter::lno_t
lno_t;
62 typedef typename Adapter::user_t
user_t;
65#ifdef HAVE_ZOLTAN2_MPI
66 typedef Teuchos::OpaqueWrapper<MPI_Comm> mpiWrapper_t;
71 virtual ~MatchingProblem() {};
74#ifdef HAVE_ZOLTAN2_MPI
77 MatchingProblem(Adapter *A, ParameterList *p, MPI_Comm comm)
78 : Problem<Adapter>(A, p, comm)
81 createMatchingProblem();
87 MatchingProblem(Adapter *A, ParameterList *p) : Problem<Adapter>(A, p)
90 createMatchingProblem();
109 void solve(
bool updateInputData=
true);
115 MatchingSolution<Adapter> *getSolution() {
117 return solution_.getRawPtr();
121 void createMatchingProblem();
123 RCP<MatchingSolution<Adapter> > solution_;
129template <
typename Adapter>
130void MatchingProblem<Adapter>::solve(
bool newData)
134 size_t nVtx = this->baseModel_->getLocalNumObjects();
138 this->solution_ = rcp(
new MatchingSolution<Adapter>(nVtx));
145 std::string method = this->params_->template get<std::string>(
"color_method",
"SerialGreedy");
150 if (method.compare(
"SerialGreedy") == 0)
153 this->env_, this->comm_);
154 alg.color(this->solution_);
157 else if (method.compare(
"speculative") == 0)
159 AlgGM<base_adapter_t> alg(this->graphModel_, this->comm_);
160 alg.color(this->solution_, this->params_);
181template <
typename Adapter>
182void MatchingProblem<Adapter>::createMatchingProblem()
185 using Teuchos::ParameterList;
200 std::bitset<NUM_MODEL_FLAGS> graphFlags;
201 std::bitset<NUM_MODEL_FLAGS> idFlags;
209 this->baseInputAdapter_, this->envConst_, this->comm_, graphFlags));
211 this->baseModel_ = rcp_implicit_cast<const Model<base_adapter_t> >(
220 std::cout <<
__func__zoltan2__ <<
" Model type " << modelType <<
" not yet supported."
Zoltan2::BasicUserTypes< zscalar_t, zlno_t, zgno_t > user_t
#define Z2_FORWARD_EXCEPTIONS
Forward an exception back through call stack.
#define __func__zoltan2__
Defines the GraphModel interface.
Defines the Problem base class.
Gathering definitions used in software development.
GraphModel defines the interface required for graph models.
Problem base class from which other classes (PartitioningProblem, ColoringProblem,...
map_t::local_ordinal_type lno_t
map_t::global_ordinal_type gno_t
Zoltan2::BaseAdapter< userTypes_t > base_adapter_t
Created by mbenlioglu on Aug 31, 2020.
ModelType
An identifier for the general type of model.
@ REMOVE_SELF_EDGES
algorithm requires no self edges
@ BUILD_LOCAL_GRAPH
model represents graph within only one rank