47#ifndef _ZOLTAN2_SPHYNXPROBLEM_HPP_
48#define _ZOLTAN2_SPHYNXPROBLEM_HPP_
75 RCP<Teuchos::StringValidator> sphynx_preconditionner_type_method_Validator =
76 Teuchos::rcp(
new Teuchos::StringValidator(Teuchos::tuple<std::string>(
"muelu",
"jacobi",
"polynomial")));
78 pl.set(
"sphynx_preconditioner_type",
"polynomial",
"Sphynx preconditioner type", sphynx_preconditionner_type_method_Validator);
81 RCP<Teuchos::StringValidator> sphynx_initial_guess_method_Validator =
82 Teuchos::rcp(
new Teuchos::StringValidator(Teuchos::tuple<std::string>(
"random",
"constants")));
84 pl.set(
"sphynx_initial_guess",
"random",
"Sphynx initial guess", sphynx_initial_guess_method_Validator);
86 RCP<Teuchos::StringValidator> sphynx_eigensolver_Validator =
87 Teuchos::rcp(
new Teuchos::StringValidator(Teuchos::tuple<std::string>(
"LOBPCG",
"randomized")));
89 pl.set(
"sphynx_eigensolver",
"LOBPCG",
"Sphynx eigensolver", sphynx_eigensolver_Validator);
91 RCP<Teuchos::StringValidator> sphynx_problem_type_method_Validator =
92 Teuchos::rcp(
new Teuchos::StringValidator(Teuchos::tuple<std::string>(
"combinatorial",
"normalized",
"generalized")));
94 pl.set(
"sphynx_problem_type",
"combinatorial",
"Sphynx problem type", sphynx_problem_type_method_Validator);
96 RCP<Teuchos::EnhancedNumberValidator<int>> sphynx_verbosity_validator =
97 Teuchos::rcp(
new Teuchos::EnhancedNumberValidator<int>(0, 1) );
98 pl.set(
"sphynx_verbosity", 0,
"Sphynx verbosity.", sphynx_verbosity_validator);
100 pl.set(
"sphynx_max_iterations", 1000,
"Sphynx max iterations");
101 pl.set(
"sphynx_block_size", 0,
"Sphynx block size");
108 const Teuchos::ParameterList &plSome,
109 const Teuchos::ParameterList &plAll,
110 Teuchos::ParameterList &plVal)
112 ParameterList::ConstIterator next = plSome.begin();
114 while (next != plSome.end()){
116 const std::string &name = next->first;
117 const ParameterEntry &entrySome = plSome.getEntry(name);
118 const ParameterEntry &entryAll = plAll.getEntry(name);
120 if (entrySome.isList()){
125 plVal.setEntry(name, entryAll);
132 template <
typename Adapter>
141 using lno_t =
typename Adapter::lno_t;
142 using gno_t =
typename Adapter::gno_t;
144 using mvector_t =
typename Tpetra::MultiVector<scalar_t, lno_t, gno_t, node_t>;
153 Teuchos::ParameterList *p,
154 RCP<Teuchos::ParameterList> sphynxParams,
155 const RCP<
const Teuchos::Comm<int> > &comm):
159 ParameterList validParams;
161 ParameterList allParameters;
168 sphynxParams_->validateParametersAndSetDefaults(validParams, 0);
169 this->
env_->convertStringToInt(*sphynxParams_.get());
172 const Teuchos::ParameterEntry *pe = this->params_->getEntryPtr(
"num_global_parts");
174 nparts = pe->getValue<
int>(&nparts);
177 throw std::runtime_error(
"\nUser did not set num_global_parts"
178 "in the parameter list!n");
181#ifdef HAVE_ZOLTAN2_MPI
183 SphynxProblem(Adapter *A, ParameterList *p, RCP<Teuchos::ParameterList> sphynxParams, MPI_Comm mpicomm):
185 rcp<const Comm<int> >(new
Teuchos::MpiComm<int>(
186 Teuchos::opaqueWrapper(mpicomm))))
191 SphynxProblem(Adapter *A, ParameterList *p, RCP<Teuchos::ParameterList> sphynxParams):
203 void processAlgorithmName(
const std::string& algorithm,
const std::string& defString,
const std::string& model,
204 Environment &env,
bool& removeSelfEdges,
bool& isGraphType,
bool& needConsecutiveGlobalIds)
override;
222 Teuchos::RCP<Teuchos::ParameterList> envParams_;
223 RCP<ParameterList> sphynxParams_;
224 RCP<mvector_t> eigenVectors_;
233 template <
typename Adapter>
235 const std::string &algorithm,
const std::string &defString,
236 const std::string &model,
Environment &env,
bool &removeSelfEdges,
237 bool &isGraphType,
bool &needConsecutiveGlobalIds)
239 this->
algName_ = std::string(
"sphynx");
242 template <
typename Adapter>
246 if (this->
algName_ == std::string(
"sphynx")) {
252 if( this->eigenVectors_!=Teuchos::null ){
257 throw std::logic_error(
"partitioning algorithm not supported");
266 template <
typename Adapter>
269 eigenVectors_ = userEvects;
275 template <
typename Adapter>
276 Teuchos::RCP<Tpetra::MultiVector<double, typename Adapter::lno_t, typename Adapter::gno_t, typename Adapter::node_t> >
283 return Teuchos::null;
#define Z2_FORWARD_EXCEPTIONS
Forward an exception back through call stack.
Defines the PartitioningProblem class.
Defines the PartitioningSolution class.
The user parameters, debug, timing and memory profiling output objects, and error checking methods.
static RCP< Teuchos::BoolParameterEntryValidator > getBoolValidator()
Exists to make setting up validators less cluttered.
PartitioningProblem(Adapter *A, ParameterList *p, const RCP< const Teuchos::Comm< int > > &comm)
Constructor where Teuchos communicator is specified.
RCP< PartitioningSolution< Adapter > > solution_
A PartitioningSolution is a solution to a partitioning problem.
RCP< const Environment > envConst_
RCP< const Adapter > inputAdapter_
RCP< ParameterList > params_
RCP< const Comm< int > > comm_
RCP< Algorithm< Adapter > > algorithm_
typename Adapter::node_t node_t
typename Adapter::part_t part_t
void setUserEigenvectors(const RCP< mvector_t > &userEvects)
SphynxProblem(Adapter *A, Teuchos::ParameterList *p, RCP< Teuchos::ParameterList > sphynxParams, const RCP< const Teuchos::Comm< int > > &comm)
void createAlgorithm() override
typename Tpetra::MultiVector< scalar_t, lno_t, gno_t, node_t > mvector_t
typename Adapter::lno_t lno_t
SphynxProblem(Adapter *A, ParameterList *p, RCP< Teuchos::ParameterList > sphynxParams)
typename Adapter::gno_t gno_t
const PartitioningSolution< Adapter > & getSolution()
RCP< mvector_t > getSphynxEigenvectors()
void processAlgorithmName(const std::string &algorithm, const std::string &defString, const std::string &model, Environment &env, bool &removeSelfEdges, bool &isGraphType, bool &needConsecutiveGlobalIds) override
Adapter::base_adapter_t base_adapter_t
typename Adapter::scalar_t weight_t
Created by mbenlioglu on Aug 31, 2020.
static void getSphynxValidParameters(ParameterList &pl)
Set up validators specific to this algorithm.
static void setSphynxValidatorsInList(const Teuchos::ParameterList &plSome, const Teuchos::ParameterList &plAll, Teuchos::ParameterList &plVal)