14 #ifndef _ZOLTAN2_ENVIRONMENT_HPP_ 
   15 #define _ZOLTAN2_ENVIRONMENT_HPP_ 
   17 #include <Zoltan2_config.h> 
   25 #include <Teuchos_RCP.hpp> 
   26 #include <Teuchos_ParameterList.hpp> 
   27 #include <Teuchos_Comm.hpp> 
   28 #include <Teuchos_DefaultComm.hpp> 
   29 #include <Teuchos_CommHelpers.hpp> 
   30 #include <Teuchos_StandardParameterEntryValidators.hpp> 
   53   typedef Teuchos::RCP<const Teuchos::Comm<int> > 
Comm_t;
 
   56   typedef Teuchos::RCP<TimerManager> 
Timer_t;
 
   73     const Teuchos::RCP<
const Teuchos::Comm<int> > &comm );
 
   82   Environment(
const Teuchos::RCP<
const Teuchos::Comm<int> > &comm);
 
  102   static RCP<Teuchos::AnyNumberParameterEntryValidator>
 
  107   static RCP<Teuchos::AnyNumberParameterEntryValidator>
 
  116   void setTimer(RCP<TimerManager> &timer) { timerOut_=timer; timingOn_=
true;}
 
  118 #ifdef Z2_OMIT_ALL_ERROR_CHECKING 
  135     size_t nobj, 
bool ok)
 const {}
 
  138     size_t nobj, 
bool ok, 
const Comm_t &comm=
comm_)
 const {}
 
  159       std::ostringstream emsg;
 
  160       emsg << 
myRank_<< 
": " << file << 
"," << lineNum<< std::endl;
 
  162         emsg << 
myRank_ << 
": error: " << msg << std::endl;
 
  163       throw std::runtime_error(emsg.str()); 
 
  184     const Comm_t &comm)
 const {
 
  187       int anyFail=0, 
fail = (!ok ? 1 : 0); 
 
  188       Teuchos::reduceAll<int,int>(*comm, Teuchos::REDUCE_MAX, 1, &
fail, 
 
  191         std::ostringstream emsg;
 
  192         emsg << 
myRank_<< 
": " << file << 
"," << lineNum<< std::endl;
 
  194           emsg << 
myRank_ << 
": error: " << msg << std::endl;
 
  196           emsg << 
myRank_ << 
": exiting" << std::endl;
 
  198         throw std::runtime_error(emsg.str()); 
 
  226       std::ostringstream emsg;
 
  227       emsg << 
myRank_<< 
": " << file << 
"," << lineNum<< std::endl;
 
  229         emsg << 
myRank_ << 
": bug: " << msg << std::endl;
 
  230       throw std::logic_error(emsg.str()); 
 
  257    const Comm_t &comm)
 const {
 
  260       int anyFail=0, 
fail = (!ok ? 1 : 0); 
 
  261       Teuchos::reduceAll<int,int>(*comm, Teuchos::REDUCE_MAX, 1, &
fail, 
 
  265         std::ostringstream emsg;
 
  266         emsg << 
myRank_<< 
": " << file << 
"," << lineNum<< std::endl;
 
  268           emsg << 
myRank_ << 
": bug: " << msg << std::endl;
 
  270           emsg << 
myRank_ << 
": exiting" << std::endl;
 
  272         throw std::logic_error(emsg.str()); 
 
  294      std::cerr << 
myRank_ << 
": " << file << 
", " << lineNum<< std::endl;
 
  295      std::cerr << 
myRank_ << 
": " << nobj << 
" objects" << std::endl;
 
  296      throw std::bad_alloc();
 
  316     size_t nobj, 
bool ok, 
const Comm_t &comm)
 const {
 
  318     int anyFail=0, 
fail = (!ok ? 1 : 0); 
 
  319     Teuchos::reduceAll<int,int>(*comm, Teuchos::REDUCE_MAX, 1, &
fail, &anyFail); 
 
  321       std::cerr << 
myRank_ << 
": " << file << 
", " << lineNum<< std::endl;
 
  323         std::cerr << 
myRank_ << 
": " << nobj << 
" objects" << std::endl;
 
  325         std::cerr << 
myRank_ << 
": exiting" << std::endl;
 
  327       throw std::bad_alloc();
 
  347 #ifdef Z2_OMIT_ALL_STATUS_MESSAGES 
  352   inline void debug(
int level, 
const char *msg)
 const{ 
return;}
 
  353   inline void debug(
int level, 
const std::string& msg)
 const{ 
return;}
 
  356       debugOut_->print(level, msg);
 
  360       debugOut_->print(level, msg);
 
  363   inline void debug(
int level, 
const char *msg)
 const{
 
  365       debugOut_->print(msg_enum, msg);
 
  368   inline void debug(
int level, 
const std::string& msg)
 const{
 
  370       debugOut_->print(msg_enum, msg);
 
  374 #ifdef Z2_OMIT_ALL_PROFILING 
  379     int fieldWidth=0)
 const  {
return;}
 
  381     int fieldWidth=0)
 const  {
return;}
 
  386     int fieldWidth=0)
 const {
return;}
 
  388     int fieldWidth=0)
 const {
return;}
 
  395     if (timingOn_) timerOut_->start(tt, timerName); }
 
  398     if (timingOn_) timerOut_->start(tt, timerName); }
 
  403     int fieldWidth=0)
 const  {
 
  405       std::ostringstream oss;
 
  406       oss << timerName << 
" ";
 
  408         oss.width(fieldWidth);
 
  412       timerOut_->start(tt, oss.str()); 
 
  417     int fieldWidth=0)
 const  {
 
  419       std::ostringstream oss;
 
  420       oss << timerName << 
" ";
 
  422         oss.width(fieldWidth);
 
  426       timerOut_->start(tt, oss.str()); 
 
  434     if (timingOn_) timerOut_->stop(tt, timerName); }
 
  437     if (timingOn_) timerOut_->stop(tt, timerName); }
 
  443     int fieldWidth=0)
 const {
 
  445       std::ostringstream oss;
 
  446       oss << timerName << 
" ";
 
  448         oss.width(fieldWidth);
 
  452       timerOut_->stop(tt, oss.str()); 
 
  457     int fieldWidth=0)
 const {
 
  459       std::ostringstream oss;
 
  460       oss << timerName << 
" ";
 
  462         oss.width(fieldWidth);
 
  466       timerOut_->stop(tt, oss.str()); 
 
  487 #ifdef Z2_OMIT_ALL_PROFILING 
  488   inline void memory(
const char *msg)
 const {
return;}
 
  490   inline void memory(
const std::string &msg)
 const {
return; }
 
  492   inline void memory(
const char *msg)
 const 
  496   inline void memory(
const std::string &msg)
 const 
  521 #ifdef Z2_OMIT_ALL_STATUS_MESSAGES 
  522   inline bool doStatus()
 const { 
return false;}
 
  527      return (debugOut_->getDebugLevel() > 
NO_STATUS);
 
  530     return debugOut_->getDebugLevel();
 
  533     return debugOut_->getOStream();
 
  554     return unvalidatedParams_; }
 
  571   void commitParameters();
 
  577   Teuchos::ParameterList unvalidatedParams_;
 
  587   Teuchos::ParameterList params_;
 
  596   RCP<std::ofstream> memoryOutputFile_;
 
  602 #define Z2_UNSET_STRING std::string("notSet") 
  619 template<
typename metric_t>
 
  621     std::string 
fname, 
int ost,
 
  623     std::string units, 
int fieldWidth,
 
  624     RCP<std::ofstream> &fptr)
 
  633   if (!haveFname && !haveStreamName){
 
  634     mgr = Teuchos::rcp(
new manager_t(rank, iPrint, std::cout, 
true,
 
  640     std::ofstream *oFile = NULL;
 
  642       oFile = 
new std::ofstream;
 
  643       std::string newFname;
 
  646         oFile->open(newFname.c_str(), std::ios::out|std::ios::trunc);
 
  648       catch(std::exception &e){
 
  649         throw std::runtime_error(e.what());
 
  653     mgr = Teuchos::rcp(
new manager_t(rank, iPrint, *oFile, 
true,
 
  659     mgr = Teuchos::rcp(
new manager_t(rank, iPrint, std::cout, 
true,
 
  662     mgr = Teuchos::rcp(
new manager_t(rank, iPrint, std::cerr, 
true,
 
  665     mgr = Teuchos::rcp(
new manager_t(rank, 
false, std::cout, 
true,
 
  668     throw std::logic_error(
"invalid metric output stream was not caught");
 
const Teuchos::ParameterList & getParameters() const 
Returns a reference to the user's parameter list. 
 
void globalMemoryAssertion(const char *file, int lineNum, size_t nobj, bool ok, const Comm_t &comm) const 
Test for successful memory allocation on every process. 
 
bool doStatus() const 
Return true if debug output was requested, even if this process is not printing out debug messages...
 
void timerStop(TimerType tt, const char *timerName, int num, int fieldWidth=0) const 
Stop a named timer, with a number as part of the name. 
 
std::ostream * getDebugOStream() const 
 
Defines the MetricOutputManager class. 
 
void setTimer(RCP< TimerManager > &timer)
Provide the Timer object to the Environment. 
 
MetricOutputManager handles output of profiling messages. 
 
void timerStart(TimerType tt, const char *timerName, int num, int fieldWidth=0) const 
Start a named timer, with a number as part of the name. 
 
void localInputAssertion(const char *file, int lineNum, const char *msg, bool ok, AssertionLevel level) const 
Test for valid user input on local process only. 
 
MessageOutputLevel
The amount of debugging or status output to print. 
 
Defines Parameter related enumerators, declares functions. 
 
static RCP< Teuchos::BoolParameterEntryValidator > getBoolValidator()
Exists to make setting up validators less cluttered. 
 
Environment(Teuchos::ParameterList &problemParams, const Teuchos::RCP< const Teuchos::Comm< int > > &comm)
Constructor. 
 
void makeMetricOutputManager(int rank, bool iPrint, std::string fname, int ost, Teuchos::RCP< MetricOutputManager< metric_t > > &mgr, std::string units, int fieldWidth, RCP< std::ofstream > &fptr)
Create an output manager for a metric value. 
 
Debug output manager for Zoltan2. 
 
TimerType
The type of timers which should be active. 
 
void localMemoryAssertion(const char *file, int lineNum, size_t nobj, bool ok) const 
Test for successful memory allocation on local process only. 
 
/dev/null: do actions but don't output results 
 
static RCP< Teuchos::AnyNumberParameterEntryValidator > getAnyDoubleValidator()
Exists to make setting up validators less cluttered. 
 
void globalBugAssertion(const char *file, int lineNum, const char *msg, bool ok, AssertionLevel level, const Comm_t &comm) const 
Test for valid library behavior on every process. 
 
Teuchos::RCP< const Teuchos::Comm< int > > Comm_t
 
bool doMemoryProfiling() const 
Return true if memory usage output was requested, even if this process is not printing out memory use...
 
long getProcessKilobytes()
 
void globalInputAssertion(const char *file, int lineNum, const char *msg, bool ok, AssertionLevel level, const Comm_t &comm) const 
Test globally for valid user input. 
 
AssertionLevel
Level of error checking or assertions desired. 
 
int numProcs_
number of processes (relative to comm_) 
 
void debug(MessageOutputLevel level, const char *msg) const 
Send a message to the debug output manager. 
 
void timerStop(TimerType tt, const char *timerName) const 
Stop a named timer. 
 
Teuchos::ParameterList & getParametersNonConst()
Returns a reference to a non-const copy of the parameters. 
 
Declaration of methods to assist in file input/output. 
 
int myRank_
mpi rank (relative to comm_) 
 
OSType
Output stream types. 
 
void debug(int level, const char *msg) const 
 
Comm_t comm_
communicator for environment 
 
void debug(MessageOutputLevel level, const std::string &msg) const 
 
Teuchos::RCP< MetricOutputManager< memory_t > > MemoryProfilerManager_t
 
const Teuchos::ParameterList & getUnvalidatedParameters() const 
Returns a const reference to the user's original list. 
 
don't display status/debug messages 
 
void localBugAssertion(const char *file, int lineNum, const char *msg, bool ok, AssertionLevel level) const 
Test for valid library behavior on local process only. 
 
static void getValidParameters(ParameterList &pl)
Collect the paramaters specific to Environment. 
 
void debug(int level, const std::string &msg) const 
 
long memory_t
data type for Kilobytes 
 
void addNumberToFileName(int number, std::string fname, std::string &newf)
Helper method to add number to a file name. 
 
#define Z2_UNSET_STRING
A value to indicate a string parameter that was not set by the user. 
 
void memory(const char *msg) const 
Print a message and the kilobytes in use by this process. 
 
The user parameters, debug, timing and memory profiling output objects, and error checking methods...
 
Teuchos::RCP< TimerManager > Timer_t
 
void resetParameters(Teuchos::ParameterList &problemParams)
resetParameters and validate them - preserve the comm 
 
static RCP< Teuchos::AnyNumberParameterEntryValidator > getAnyIntValidator()
Exists to make setting up validators less cluttered. 
 
static const std::string fail
 
~Environment()
Destructor. 
 
void timerStop(TimerType tt, const std::string &timerName) const 
 
MessageOutputLevel getDebugLevel() const 
 
void timerStart(TimerType tt, const std::string &timerName, int num, int fieldWidth=0) const 
 
void memory(const std::string &msg) const 
 
void timerStop(TimerType tt, const std::string &timerName, int num, int fieldWidth=0) const 
 
bool doTiming() const 
Return true if timing was requested, even if this process is not printing out timing messages...
 
A gathering of useful namespace methods. 
 
void timerStart(TimerType tt, const char *timerName) const 
Start a named timer. 
 
AssertionLevel errorCheckLevel_
level of error checking to do 
 
Declarations for TimerManager. 
 
void timerStart(TimerType tt, const std::string &timerName) const 
 
Teuchos::RCP< DebugManager > DebugManager_t