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;
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.
map_t::global_ordinal_type gno_t
algorithm requires no self edges
Defines the Problem base class.
map_t::local_ordinal_type lno_t
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