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 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
57FactoryMonitor::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
68SubFactoryMonitor::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
74SubFactoryMonitor::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
Base class for MueLu classes.
virtual std::string ShortClassName() const
Return the class name of the object, without template parameters and without namespace.
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.
Class that holds all level-specific information.
int GetLevelID() const
Return level number.
Timer to be used in non-factories.
virtual ~Monitor()
Monitor(const BaseClass &object, const std::string &msg, MsgType msgLevel=Runtime0, MsgType timerLevel=Timings0)
Constructor.
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.
Timer to be used in non-factories. Similar to Monitor, but doesn't print object description.
SubMonitor(const BaseClass &object, const std::string &msg, MsgType msgLevel=Runtime1, MsgType timerLevel=Timings1)
Constructor.
Integrates Teuchos::TimeMonitor with MueLu verbosity system.
Teuchos::FancyOStream & GetOStream(MsgType type, int thisProcRankOnly=0) const
Get an output stream for outputting the input message type.
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.