MueLu Version of the Day
Loading...
Searching...
No Matches
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
13namespace MueLu {
14PrintMonitor::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
29Monitor::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
33Monitor::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
37Monitor::~Monitor() = default;
38
39SubMonitor::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
43SubMonitor::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
47SubMonitor::~SubMonitor() = default;
48
49FactoryMonitor::FactoryMonitor(const BaseClass& object, const std::string& msg, int levelID, MsgType msgLevel, MsgType timerLevel)
50 : Monitor(object, msg, msgLevel, timerLevel)
51 , timerMonitorExclusive_(object, object.ShortClassName() + ": " + msg, timerLevel) {
52 if (object.IsPrint(TimingsByLevel)) {
53 if (Teuchos::TimeMonitor::getStackedTimer().is_null())
54 levelTimeMonitor_ = rcp(new TimeMonitor(object, object.ShortClassName() + ": " + msg + " (total, level=" + Teuchos::Utils::toString(levelID) + ")", timerLevel));
55 levelTimeMonitorExclusive_ = rcp(new MutuallyExclusiveTimeMonitor<Level>(object, object.ShortClassName() + ": " + msg + " (level=" + Teuchos::Utils::toString(levelID) + ")", timerLevel));
56 }
57}
58
59FactoryMonitor::FactoryMonitor(const BaseClass& object, const std::string& msg, const Level& level, MsgType msgLevel, MsgType timerLevel)
60 : Monitor(object, msg, FormattingHelper::getColonLabel(level.getObjectLabel()), msgLevel, timerLevel)
61 , timerMonitorExclusive_(object, FormattingHelper::getColonLabel(level.getObjectLabel()) + object.ShortClassName() + ": " + msg, timerLevel) {
62 if (object.IsPrint(TimingsByLevel)) {
63 std::string label = FormattingHelper::getColonLabel(level.getObjectLabel());
64 if (Teuchos::TimeMonitor::getStackedTimer().is_null())
65 levelTimeMonitor_ = rcp(new TimeMonitor(object, label + object.ShortClassName() + ": " + msg + " (total, level=" + Teuchos::Utils::toString(level.GetLevelID()) + ")", timerLevel));
66 levelTimeMonitorExclusive_ = rcp(new MutuallyExclusiveTimeMonitor<Level>(object, label + object.ShortClassName() + ": " + msg + " (level=" + Teuchos::Utils::toString(level.GetLevelID()) + ")", timerLevel));
67 }
68}
69
71
72SubFactoryMonitor::SubFactoryMonitor(const BaseClass& object, const std::string& msg, int levelID, MsgType msgLevel, MsgType timerLevel)
73 : SubMonitor(object, msg, msgLevel, timerLevel) {
74 if (object.IsPrint(TimingsByLevel) && Teuchos::TimeMonitor::getStackedTimer().is_null())
75 levelTimeMonitor_ = rcp(new TimeMonitor(object, object.ShortClassName() + ": " + msg + " (sub, total, level=" + Teuchos::Utils::toString(levelID) + ")", timerLevel));
76}
77
78SubFactoryMonitor::SubFactoryMonitor(const BaseClass& object, const std::string& msg, const Level& level, MsgType msgLevel, MsgType timerLevel)
79 : SubMonitor(object, msg, FormattingHelper::getColonLabel(level.getObjectLabel()), msgLevel, timerLevel) {
80 if (object.IsPrint(TimingsByLevel) && Teuchos::TimeMonitor::getStackedTimer().is_null()) {
81 std::string label = FormattingHelper::getColonLabel(level.getObjectLabel());
82 levelTimeMonitor_ = rcp(new TimeMonitor(object, label + object.ShortClassName() + ": " + msg + " (sub, total, level=" + Teuchos::Utils::toString(level.GetLevelID()) + ")", timerLevel));
83 }
84}
85
87
88} // namespace MueLu
Base class for MueLu classes.
virtual std::string ShortClassName() const
Return the class name of the object, without template parameters and without namespace.
virtual std::string description() const
Return a simple one-line description of this object.
FactoryMonitor(const BaseClass &object, const std::string &msg, int levelID, MsgType msgLevel=static_cast< MsgType >(Test|Runtime0), MsgType timerLevel=Timings0)
Constructor.
RCP< TimeMonitor > levelTimeMonitor_
Total time spent on this level in this object and all its children.
RCP< MutuallyExclusiveTimeMonitor< Level > > levelTimeMonitorExclusive_
Total time spent on this level in this object only, excluding all children.
MutuallyExclusiveTimeMonitor< FactoryBase > timerMonitorExclusive_
Total time spent on all levels in this object only, excluding all children.
Class that holds all level-specific information.
int GetLevelID() const
Return level number.
TimeMonitor timerMonitor_
Records total time spent in this object and all its children, over all levels.
virtual ~Monitor()
Monitor(const BaseClass &object, const std::string &msg, MsgType msgLevel=Runtime0, MsgType timerLevel=Timings0)
Constructor.
PrintMonitor printMonitor_
Manages printing.
Similar to TimeMonitor, but uses MutuallyExclusiveTime objects.
const BaseClass & object_
RCP< TimeMonitor > levelTimeMonitor_
Total time spent on this level in this object and all children.
SubFactoryMonitor(const BaseClass &object, const std::string &msg, int levelID, MsgType msgLevel=Runtime1, MsgType timerLevel=Timings1)
Constructor.
TimeMonitor timerMonitor_
PrintMonitor printMonitor_
SubMonitor(const BaseClass &object, const std::string &msg, MsgType msgLevel=Runtime1, MsgType timerLevel=Timings1)
Constructor.
Integrates Teuchos::TimeMonitor with MueLu verbosity system.
bool IsPrint(MsgType type, int thisProcRankOnly=-1) const
Find out whether we need to print out information for a specific message type.
Namespace for MueLu classes and methods.
@ TimingsByLevel
Record timing information level by level. Must be used in combinaison with Timings0/Timings1.
static std::string getColonLabel(const std::string &label)
Helper function for object label.