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)
152 AlgSerialGreedy<Adapter> alg(this->graphModel_, this->params_,
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;
208 this->graphModel_ = rcp(
new GraphModel<base_adapter_t>(
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.
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