51 #ifndef _ZOLTAN2_MATCHINGPROBLEM_HPP_
52 #define _ZOLTAN2_MATCHINGPROBLEM_HPP_
57 #include <Zoltan2_MatchingAlgorithms.hpp>
65 using Teuchos::rcp_dynamic_cast;
90 template<
typename Adapter>
91 class MatchingProblem :
public Problem<Adapter>
95 typedef typename Adapter::scalar_t scalar_t;
96 typedef typename Adapter::gno_t gno_t;
97 typedef typename Adapter::lno_t lno_t;
101 #ifdef HAVE_ZOLTAN2_MPI
102 typedef Teuchos::OpaqueWrapper<MPI_Comm> mpiWrapper_t;
107 virtual ~MatchingProblem() {};
110 #ifdef HAVE_ZOLTAN2_MPI
113 MatchingProblem(Adapter *A, ParameterList *p, MPI_Comm comm)
114 : Problem<Adapter>(A, p, comm)
117 createMatchingProblem();
123 MatchingProblem(Adapter *A, ParameterList *p) : Problem<Adapter>(A, p)
126 createMatchingProblem();
145 void solve(
bool updateInputData=
true);
151 MatchingSolution<Adapter> *getSolution() {
153 return solution_.getRawPtr();
157 void createMatchingProblem();
159 RCP<MatchingSolution<Adapter> > solution_;
165 template <
typename Adapter>
166 void MatchingProblem<Adapter>::solve(
bool newData)
170 size_t nVtx = this->baseModel_->getLocalNumObjects();
174 this->solution_ = rcp(
new MatchingSolution<Adapter>(nVtx));
181 std::string method = this->params_->template get<std::string>(
"color_method",
"SerialGreedy");
186 if (method.compare(
"SerialGreedy") == 0)
188 AlgSerialGreedy<Adapter> alg(this->graphModel_, this->params_,
189 this->env_, this->comm_);
190 alg.color(this->solution_);
193 else if (method.compare(
"speculative") == 0)
195 AlgGM<base_adapter_t> alg(this->graphModel_, this->comm_);
196 alg.color(this->solution_, this->params_);
217 template <
typename Adapter>
218 void MatchingProblem<Adapter>::createMatchingProblem()
221 using Teuchos::ParameterList;
236 std::bitset<NUM_MODEL_FLAGS> graphFlags;
237 std::bitset<NUM_MODEL_FLAGS> idFlags;
244 this->graphModel_ = rcp(
new GraphModel<base_adapter_t>(
245 this->baseInputAdapter_, this->envConst_, this->comm_, graphFlags));
247 this->baseModel_ = rcp_implicit_cast<
const Model<base_adapter_t> >(
256 std::cout <<
__func__zoltan2__ <<
" Model type " << modelType <<
" not yet supported."
Zoltan2::BaseAdapter< userTypes_t > base_adapter_t
ModelType
An identifier for the general type of model.
#define Z2_FORWARD_EXCEPTIONS
Forward an exception back through call stack.
algorithm requires no self edges
Defines the Problem base class.
Gathering definitions used in software development.
Defines the GraphModel interface.
model represents graph within only one rank
#define __func__zoltan2__
Zoltan2::BasicUserTypes< zscalar_t, zlno_t, zgno_t > user_t