MueLu  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MueLu_Monitor.cpp
Go to the documentation of this file.
1 // @HEADER
2 // *****************************************************************************
3 // MueLu: A package for multigrid based preconditioning
4 //
5 // Copyright 2012 NTESS and the MueLu contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 #include "MueLu_Monitor.hpp"
12 
13 namespace MueLu {
14 PrintMonitor::PrintMonitor(const BaseClass& object, const std::string& msg, MsgType msgLevel)
15  : object_(object) {
16  tabbed = false;
17  if (object_.IsPrint(msgLevel)) {
18  // Print description and new indent
19  object_.GetOStream(msgLevel, 0) << msg << std::endl;
20  object_.getOStream()->pushTab();
21  tabbed = true;
22  }
23 }
24 
26  if (tabbed) object_.getOStream()->popTab();
27 }
28 
29 Monitor::Monitor(const BaseClass& object, const std::string& msg, MsgType msgLevel, MsgType timerLevel)
30  : printMonitor_(object, msg + " (" + object.description() + ")", msgLevel)
31  , timerMonitor_(object, object.ShortClassName() + ": " + msg + " (total)", timerLevel) {}
32 
33 Monitor::Monitor(const BaseClass& object, const std::string& msg, const std::string& label, MsgType msgLevel, MsgType timerLevel)
34  : printMonitor_(object, label + msg + " (" + object.description() + ")", msgLevel)
35  , timerMonitor_(object, label + object.ShortClassName() + ": " + msg + " (total)", timerLevel) {}
36 
37 Monitor::~Monitor() = default;
38 
39 SubMonitor::SubMonitor(const BaseClass& object, const std::string& msg, MsgType msgLevel, MsgType timerLevel)
40  : printMonitor_(object, msg, msgLevel)
41  , timerMonitor_(object, object.ShortClassName() + ": " + msg + " (sub, total)", timerLevel) {}
42 
43 SubMonitor::SubMonitor(const BaseClass& object, const std::string& msg, const std::string& label, MsgType msgLevel, MsgType timerLevel)
44  : printMonitor_(object, label + msg, msgLevel)
45  , timerMonitor_(object, label + object.ShortClassName() + ": " + msg + " (sub, total)", timerLevel) {}
46 
47 SubMonitor::~SubMonitor() = default;
48 
49 FactoryMonitor::FactoryMonitor(const BaseClass& object, const std::string& msg, int levelID, MsgType msgLevel, MsgType timerLevel)
50  : Monitor(object, msg, msgLevel, timerLevel) {
51  if (object.IsPrint(TimingsByLevel)) {
52  if (Teuchos::TimeMonitor::stackedTimerNameIsDefault())
53  levelTimeMonitor_ = rcp(new TimeMonitor(object, object.ShortClassName() + ": " + msg + " (total, level=" + Teuchos::Utils::toString(levelID) + ")", timerLevel));
54  }
55 }
56 
57 FactoryMonitor::FactoryMonitor(const BaseClass& object, const std::string& msg, const Level& level, MsgType msgLevel, MsgType timerLevel)
58  : Monitor(object, msg, FormattingHelper::getColonLabel(level.getObjectLabel()), msgLevel, timerLevel) {
59  if (object.IsPrint(TimingsByLevel)) {
60  std::string label = FormattingHelper::getColonLabel(level.getObjectLabel());
61  if (Teuchos::TimeMonitor::stackedTimerNameIsDefault())
62  levelTimeMonitor_ = rcp(new TimeMonitor(object, label + object.ShortClassName() + ": " + msg + " (total, level=" + Teuchos::Utils::toString(level.GetLevelID()) + ")", timerLevel));
63  }
64 }
65 
67 
68 SubFactoryMonitor::SubFactoryMonitor(const BaseClass& object, const std::string& msg, int levelID, MsgType msgLevel, MsgType timerLevel)
69  : SubMonitor(object, msg, msgLevel, timerLevel) {
70  if (object.IsPrint(TimingsByLevel) && Teuchos::TimeMonitor::stackedTimerNameIsDefault())
71  levelTimeMonitor_ = rcp(new TimeMonitor(object, object.ShortClassName() + ": " + msg + " (sub, total, level=" + Teuchos::Utils::toString(levelID) + ")", timerLevel));
72 }
73 
74 SubFactoryMonitor::SubFactoryMonitor(const BaseClass& object, const std::string& msg, const Level& level, MsgType msgLevel, MsgType timerLevel)
75  : SubMonitor(object, msg, FormattingHelper::getColonLabel(level.getObjectLabel()), msgLevel, timerLevel) {
76  if (object.IsPrint(TimingsByLevel) && Teuchos::TimeMonitor::stackedTimerNameIsDefault()) {
77  std::string label = FormattingHelper::getColonLabel(level.getObjectLabel());
78  levelTimeMonitor_ = rcp(new TimeMonitor(object, label + object.ShortClassName() + ": " + msg + " (sub, total, level=" + Teuchos::Utils::toString(level.GetLevelID()) + ")", timerLevel));
79  }
80 }
81 
83 
84 } // namespace MueLu
RCP< TimeMonitor > levelTimeMonitor_
Total time spent on this level in this object and all children.
Teuchos::FancyOStream & GetOStream(MsgType type, int thisProcRankOnly=0) const
Get an output stream for outputting the input message type.
virtual std::string getObjectLabel() const
Timer to be used in non-factories. Similar to Monitor, but doesn&#39;t print object description.
Integrates Teuchos::TimeMonitor with MueLu verbosity system.
static std::string toString(const double &x)
virtual std::string ShortClassName() const
Return the class name of the object, without template parameters and without namespace.
static std::string getColonLabel(const std::string &label)
Helper function for object label.
Monitor(const BaseClass &object, const std::string &msg, MsgType msgLevel=Runtime0, MsgType timerLevel=Timings0)
Constructor.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Class that holds all level-specific information.
Definition: MueLu_Level.hpp:63
RCP< TimeMonitor > levelTimeMonitor_
Total time spent on this level in this object and all its children.
FactoryMonitor(const BaseClass &object, const std::string &msg, int levelID, MsgType msgLevel=static_cast< MsgType >(Test|Runtime0), MsgType timerLevel=Timings0)
Constructor.
bool IsPrint(MsgType type, int thisProcRankOnly=-1) const
Find out whether we need to print out information for a specific message type.
virtual ~Monitor()
Base class for MueLu classes.
Record timing information level by level. Must be used in combinaison with Timings0/Timings1.
SubFactoryMonitor(const BaseClass &object, const std::string &msg, int levelID, MsgType msgLevel=Runtime1, MsgType timerLevel=Timings1)
Constructor.
Timer to be used in non-factories.
int GetLevelID() const
Return level number.
Definition: MueLu_Level.cpp:51
const BaseClass & object_
virtual RCP< FancyOStream > getOStream() const
SubMonitor(const BaseClass &object, const std::string &msg, MsgType msgLevel=Runtime1, MsgType timerLevel=Timings1)
Constructor.