MueLu
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
MueLu_SingleLevelFactoryBase.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_SingleLevelFactoryBase.hpp
"
11
#include "
MueLu_TimeMonitor.hpp
"
12
#include "
MueLu_Level.hpp
"
13
14
namespace
MueLu
{
15
16
SingleLevelFactoryBase::SingleLevelFactoryBase
() =
default
;
17
18
SingleLevelFactoryBase::~SingleLevelFactoryBase
() =
default
;
19
20
void
SingleLevelFactoryBase::CallBuild
(
Level
& requestedLevel)
const
{
21
#ifdef HAVE_MUELU_DEBUG
22
// We cannot call Build method twice for the same level, but we can call it multiple times for different levels
23
int
levelID = requestedLevel.
GetLevelID
();
24
TEUCHOS_TEST_FOR_EXCEPTION((multipleCallCheck_ == ENABLED) && (multipleCallCheckGlobal_ == ENABLED) && (lastLevelID_ == levelID),
25
Exceptions::RuntimeError
,
26
this->
ShortClassName
() <<
"::Build() called twice for the same level (levelID="
<< levelID
27
<<
"). This is likely due to a configuration error, or calling hierarchy setup multiple times "
28
<<
"without resetting debug info through FactoryManager::ResetDebugData()."
);
29
if
(multipleCallCheck_ == FIRSTCALL)
30
multipleCallCheck_ = ENABLED;
31
32
lastLevelID_ = levelID;
33
#endif
34
35
RCP<const Teuchos::Comm<int> > comm = requestedLevel.
GetComm
();
36
if
(comm.is_null()) {
37
// Some factories are called before we constructed Ac, and therefore,
38
// before we set the level communicator. For such factories we can get
39
// the comm from the previous level, as all processes go there
40
RCP<Level>& prevLevel = requestedLevel.
GetPreviousLevel
();
41
if
(!prevLevel.is_null())
42
comm = prevLevel->GetComm();
43
}
44
45
int
oldRank = -1;
46
if
(!comm.is_null())
47
oldRank =
SetProcRankVerbose
(comm->getRank());
48
49
// Synchronization timer
50
std::string syncTimer = this->
ShortClassName
() +
": Build sync (level="
+
toString
(requestedLevel.
GetLevelID
()) +
")"
;
51
if
(this->
timerSync_
&& !comm.is_null()) {
52
TimeMonitor
timer(*
this
, syncTimer);
53
comm->barrier();
54
}
55
56
Build
(requestedLevel);
57
58
if
(this->
timerSync_
&& !comm.is_null()) {
59
TimeMonitor
timer(*
this
, syncTimer);
60
comm->barrier();
61
}
62
63
if
(
IsPrint
(
Test1
))
64
GetOStream
(
Test1
) << *
RemoveFactoriesFromList
(
GetParameterList
()) << std::endl;
65
else
66
RemoveFactoriesFromList
(
GetParameterList
())->print(
GetOStream
(
Test0
), Teuchos::ParameterList::PrintOptions().indent(0).showFlags(
true
).showDefault(
false
));
67
68
if
(oldRank != -1)
69
SetProcRankVerbose
(oldRank);
70
}
71
72
void
SingleLevelFactoryBase::CallDeclareInput
(
Level
& requestedLevel)
const
{
73
DeclareInput
(requestedLevel);
74
}
75
76
}
// namespace MueLu
77
78
// TODO: code factorization between SingleLevelFactoryBase and TwoLevelFactoryBase
MueLu_Level.hpp
MueLu_SingleLevelFactoryBase.hpp
MueLu_TimeMonitor.hpp
MueLu::Describable::ShortClassName
virtual std::string ShortClassName() const
Return the class name of the object, without template parameters and without namespace.
Definition
MueLu_Describable.cpp:38
MueLu::Exceptions::RuntimeError
Exception throws to report errors in the internal logical of the program.
Definition
MueLu_Exceptions.hpp:36
MueLu::Factory::timerSync_
static bool timerSync_
Definition
MueLu_Factory.hpp:96
MueLu::Factory::RemoveFactoriesFromList
RCP< ParameterList > RemoveFactoriesFromList(const ParameterList &list) const
Definition
MueLu_Factory.cpp:47
MueLu::Level
Class that holds all level-specific information.
Definition
MueLu_Level.hpp:63
MueLu::Level::GetPreviousLevel
RCP< Level > & GetPreviousLevel()
Previous level.
Definition
MueLu_Level.cpp:60
MueLu::Level::GetComm
RCP< const Teuchos::Comm< int > > GetComm() const
Definition
MueLu_Level.hpp:330
MueLu::Level::GetLevelID
int GetLevelID() const
Return level number.
Definition
MueLu_Level.cpp:51
MueLu::ParameterListAcceptorImpl::GetParameterList
virtual const Teuchos::ParameterList & GetParameterList() const
Definition
MueLu_ParameterListAcceptor.cpp:50
MueLu::SingleLevelFactoryBase::DeclareInput
virtual void DeclareInput(Level ¤tLevel) const =0
Specifies the data that this class needs, and the factories that generate that data.
MueLu::SingleLevelFactoryBase::~SingleLevelFactoryBase
virtual ~SingleLevelFactoryBase()
Destructor.
MueLu::SingleLevelFactoryBase::Build
virtual void Build(Level ¤tLevel) const =0
Build an object with this factory.
MueLu::SingleLevelFactoryBase::SingleLevelFactoryBase
SingleLevelFactoryBase()
Constructor.
MueLu::SingleLevelFactoryBase::CallDeclareInput
virtual void CallDeclareInput(Level &requestedLevel) const
Definition
MueLu_SingleLevelFactoryBase.cpp:72
MueLu::SingleLevelFactoryBase::CallBuild
virtual void CallBuild(Level &requestedLevel) const
Definition
MueLu_SingleLevelFactoryBase.cpp:20
MueLu::TimeMonitor
Integrates Teuchos::TimeMonitor with MueLu verbosity system.
Definition
MueLu_TimeMonitor.hpp:31
MueLu::VerboseObject::GetOStream
Teuchos::FancyOStream & GetOStream(MsgType type, int thisProcRankOnly=0) const
Get an output stream for outputting the input message type.
Definition
MueLu_VerboseObject.cpp:72
MueLu::VerboseObject::SetProcRankVerbose
int SetProcRankVerbose(int procRank) const
Set proc rank used for printing.
Definition
MueLu_VerboseObject.cpp:62
MueLu::VerboseObject::IsPrint
bool IsPrint(MsgType type, int thisProcRankOnly=-1) const
Find out whether we need to print out information for a specific message type.
Definition
MueLu_VerboseObject.cpp:68
MueLu
Namespace for MueLu classes and methods.
Definition
MueLu_BrickAggregationFactory_decl.hpp:42
MueLu::Test0
@ Test0
Print factory calls.
Definition
MueLu_VerbosityLevel.hpp:47
MueLu::Test1
@ Test1
Print used parameters.
Definition
MueLu_VerbosityLevel.hpp:48
MueLu::toString
std::string toString(const T &what)
Little helper function to convert non-string types to strings.
Definition
MueLu_Utilities_decl.hpp:242
src
MueCentral
MueLu_SingleLevelFactoryBase.cpp
Generated by
1.17.0