14 #ifndef _ZOLTAN2_PROBLEM_HPP_
15 #define _ZOLTAN2_PROBLEM_HPP_
20 #include <Teuchos_StandardParameterEntryValidators.hpp>
21 #include <Teuchos_Tuple.hpp>
36 virtual RCP<const Comm<int> >
getComm() = 0;
40 virtual void solve(
bool updateInputData =
true) = 0;
47 template<
typename Adapter>
53 Problem(
const Adapter *input, ParameterList *params,
54 const RCP<
const Comm<int> > &comm):
64 comm_ = comm->duplicate();
65 setupProblemEnvironment(params);
96 #ifdef Z2_OMIT_ALL_ERROR_CHECKING
102 timer_->printAndResetToZero();
110 pl.set(
"compute_metrics",
false,
"Compute metrics after computing solution",
113 RCP<Teuchos::StringValidator> hypergraph_model_type_Validator =
114 Teuchos::rcp(
new Teuchos::StringValidator(
115 Teuchos::tuple<std::string>(
"traditional",
"ghosting" )));
116 pl.set(
"hypergraph_model_type",
"traditional",
"construction type when "
117 "creating a hypergraph model", hypergraph_model_type_Validator);
120 pl.set(
"subset_graph",
false,
"If \"true\", the graph input is to be "
121 "subsetted. If a vertex neighbor is not a valid vertex, it will be "
122 "omitted from the pList. Otherwise, an invalid neighbor identifier "
125 RCP<Teuchos::StringValidator> symmetrize_input_Validator = Teuchos::rcp(
126 new Teuchos::StringValidator(
127 Teuchos::tuple<std::string>(
"no",
"transpose",
"bipartite" )));
128 pl.set(
"symmetrize_input",
"no",
"Symmetrize input prior to pList. "
129 "If \"transpose\", symmetrize A by computing A plus ATranspose. "
130 "If \"bipartite\", A becomes [[0 A][ATranspose 0]].",
131 symmetrize_input_Validator);
134 pl.sublist(
"zoltan_parameters");
135 pl.sublist(
"parma_parameters");
136 pl.sublist(
"sarma_parameters");
182 void setupProblemEnvironment(ParameterList *pl);
186 template <
typename Adapter>
189 ParameterList &processedParameters = env_->getParametersNonConst();
190 params_ = rcp<ParameterList>(&processedParameters,
false);
192 #ifndef Z2_OMIT_ALL_PROFILING
193 ParameterList pl = *params_;
196 bool haveType=
false, haveStream=
false, haveFile=
false;
199 const Teuchos::ParameterEntry *pe = pl.getEntryPtr(
"timer_type");
202 choice = pe->getValue<
int>(&choice);
209 pe = pl.getEntryPtr(
"timer_output_file");
212 fname = pe->getValue<std::string>(&
fname);
213 std::ofstream *dbgFile =
new std::ofstream;
214 if (comm_->getRank()==0){
217 dbgFile->open(fname.c_str(), std::ios::out|std::ios::trunc);
219 catch(std::exception &e){
220 throw std::runtime_error(e.what());
223 timer_ = rcp(
new TimerManager(comm_, dbgFile, tt));
227 pe = pl.getEntryPtr(
"timer_output_stream");
229 choice = pe->getValue<
int>(&choice);
235 if (haveStream || haveType){
237 timer_ = rcp(
new TimerManager(comm_, &std::cout, tt));
239 timer_ = rcp(
new TimerManager(comm_, &std::cerr, tt));
241 std::ofstream *of = NULL;
242 timer_ = rcp(
new TimerManager(comm_, of, tt));
247 if (haveType || haveStream || haveFile)
248 env_->setTimer(timer_);
254 template <
typename Adapter>
257 env_->resetParameters(*params);
258 setupProblemEnvironment(params);
263 if (!timer_.is_null())
264 env_->setTimer(timer_);
Zoltan2::BaseAdapter< userTypes_t > base_adapter_t
Time an algorithm (or other entity) as a whole.
RCP< const base_adapter_t > baseInputAdapter_
Adapter::base_adapter_t base_adapter_t
static RCP< Teuchos::BoolParameterEntryValidator > getBoolValidator()
Exists to make setting up validators less cluttered.
virtual ~Problem()
Destructor.
TimerType
The type of timers which should be active.
RCP< Algorithm< Adapter > > algorithm_
/dev/null: do actions but don't output results
Problem(const Adapter *input, ParameterList *params, const RCP< const Comm< int > > &comm)
Constructor where Teuchos communicator is specified.
ProblemRoot allows ptr storage and safe dynamic_cast of all.
RCP< const Comm< int > > comm_
void resetParameters(ParameterList *params)
Reset the list of parameters.
virtual RCP< const Comm< int > > getComm()=0
virtual void solve(bool updateInputData=true)=0
Method that creates a solution.
OSType
Output stream types.
static void getValidParameters(ParameterList &pl)
RCP< const Comm< int > > getComm()
Return the communicator used by the problem.
Problem base class from which other classes (PartitioningProblem, ColoringProblem, OrderingProblem, MatchingProblem, etc.) derive.
RCP< const Adapter > inputAdapter_
void printTimers() const
Return the communicator passed to the problem.
The user parameters, debug, timing and memory profiling output objects, and error checking methods...
RCP< TimerManager > timer_
Define IntegerRangeList validator.
Gathering definitions used in software development.
RCP< ParameterList > params_
const RCP< const Environment > & getEnvironment() const
Get the current Environment. Useful for testing.
RCP< const Environment > envConst_
Declarations for TimerManager.