MueLu
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
MueLu_SingleLevelFactoryBase.hpp
Go to the documentation of this file.
1
// @HEADER
2
//
3
// ***********************************************************************
4
//
5
// MueLu: A package for multigrid based preconditioning
6
// Copyright 2012 Sandia Corporation
7
//
8
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9
// the U.S. Government retains certain rights in this software.
10
//
11
// Redistribution and use in source and binary forms, with or without
12
// modification, are permitted provided that the following conditions are
13
// met:
14
//
15
// 1. Redistributions of source code must retain the above copyright
16
// notice, this list of conditions and the following disclaimer.
17
//
18
// 2. Redistributions in binary form must reproduce the above copyright
19
// notice, this list of conditions and the following disclaimer in the
20
// documentation and/or other materials provided with the distribution.
21
//
22
// 3. Neither the name of the Corporation nor the names of the
23
// contributors may be used to endorse or promote products derived from
24
// this software without specific prior written permission.
25
//
26
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
//
38
// Questions? Contact
39
// Jonathan Hu (jhu@sandia.gov)
40
// Andrey Prokopenko (aprokop@sandia.gov)
41
// Ray Tuminaro (rstumin@sandia.gov)
42
//
43
// ***********************************************************************
44
//
45
// @HEADER
46
#ifndef MUELU_SINGLELEVELFACTORY_HPP
47
#define MUELU_SINGLELEVELFACTORY_HPP
48
49
#include "
MueLu_ConfigDefs.hpp
"
50
51
#include "
MueLu_Factory.hpp
"
52
#include "
MueLu_Level_fwd.hpp
"
53
#include "
MueLu_TimeMonitor.hpp
"
54
#include "MueLu_Utilities.hpp"
55
56
namespace
MueLu
{
57
64
class
SingleLevelFactoryBase
:
public
Factory
{
65
66
public
:
68
69
71
SingleLevelFactoryBase
() { }
72
74
virtual
~SingleLevelFactoryBase
() { }
75
77
79
80
86
virtual
void
DeclareInput
(
Level
¤tLevel)
const
= 0;
87
89
91
92
94
virtual
void
Build
(
Level
& currentLevel)
const
= 0;
95
97
virtual
void
CallBuild
(
Level
& requestedLevel)
const
{
98
#ifdef HAVE_MUELU_DEBUG
99
// We cannot call Build method twice for the same level, but we can call it multiple times for different levels
100
int
levelID = requestedLevel.
GetLevelID
();
101
TEUCHOS_TEST_FOR_EXCEPTION((multipleCallCheck_ == ENABLED) && (multipleCallCheckGlobal_ == ENABLED) && (lastLevelID_ == levelID),
102
Exceptions::RuntimeError
,
103
this->
ShortClassName
() <<
"::Build() called twice for the same level (levelID="
<< levelID
104
<<
"). This is likely due to a configuration error, or calling hierarchy setup multiple times "
105
<<
"without resetting debug info through FactoryManager::ResetDebugData()."
);
106
if
(multipleCallCheck_ == FIRSTCALL)
107
multipleCallCheck_ = ENABLED;
108
109
lastLevelID_ = levelID;
110
#endif
111
112
RCP<const Teuchos::Comm<int> > comm = requestedLevel.
GetComm
();
113
if
(comm.is_null()) {
114
// Some factories are called before we constructed Ac, and therefore,
115
// before we set the level communicator. For such factories we can get
116
// the comm from the previous level, as all processes go there
117
RCP<Level>& prevLevel = requestedLevel.
GetPreviousLevel
();
118
if
(!prevLevel.is_null())
119
comm = prevLevel->GetComm();
120
}
121
122
int
oldRank = -1;
123
if
(!comm.is_null())
124
oldRank =
SetProcRankVerbose
(comm->getRank());
125
126
// Synchronization timer
127
std::string syncTimer = this->
ShortClassName
() +
": Build sync (level="
+
toString
(requestedLevel.
GetLevelID
()) +
")"
;
128
if
(this->
timerSync_
&& !comm.is_null()) {
129
TimeMonitor
timer(*
this
, syncTimer);
130
comm->barrier();
131
}
132
133
Build
(requestedLevel);
134
135
if
(this->
timerSync_
&& !comm.is_null()) {
136
TimeMonitor
timer(*
this
, syncTimer);
137
comm->barrier();
138
}
139
140
if
(
IsPrint
(
Test1
))
141
GetOStream
(
Test1
) << *
RemoveFactoriesFromList
(
GetParameterList
()) << std::endl;
142
else
143
RemoveFactoriesFromList
(
GetParameterList
())->print(
GetOStream
(
Test0
), Teuchos::ParameterList::PrintOptions().indent(0).showFlags(
true
).showDefault(
false
));
144
145
if
(oldRank != -1)
146
SetProcRankVerbose
(oldRank);
147
}
148
150
virtual
void
CallDeclareInput
(
Level
& requestedLevel)
const
{
151
DeclareInput
(requestedLevel);
152
}
153
154
155
};
//class SingleLevelFactoryBase
156
157
}
//namespace MueLu
158
159
#define MUELU_SINGLELEVELFACTORY_SHORT
160
#endif
//ifndef MUELU_SINGLELEVELFACTORY_HPP
161
162
//TODO: code factorization between SingleLevelFactoryBase and TwoLevelFactoryBase
MueLu_ConfigDefs.hpp
MueLu_Factory.hpp
MueLu_Level_fwd.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:74
MueLu::Exceptions::RuntimeError
Exception throws to report errors in the internal logical of the program.
Definition
MueLu_Exceptions.hpp:70
MueLu::Factory::timerSync_
static bool timerSync_
Definition
MueLu_Factory.hpp:183
MueLu::Factory::Factory
Factory()
Constructor.
Definition
MueLu_Factory.hpp:75
MueLu::Factory::RemoveFactoriesFromList
RCP< ParameterList > RemoveFactoriesFromList(const ParameterList &list) const
Definition
MueLu_Factory.hpp:113
MueLu::Level
Class that holds all level-specific information.
Definition
MueLu_Level.hpp:99
MueLu::Level::GetPreviousLevel
RCP< Level > & GetPreviousLevel()
Previous level.
Definition
MueLu_Level.hpp:132
MueLu::Level::GetComm
RCP< const Teuchos::Comm< int > > GetComm() const
Definition
MueLu_Level.hpp:403
MueLu::Level::GetLevelID
int GetLevelID() const
Return level number.
Definition
MueLu_Level.cpp:76
MueLu::ParameterListAcceptorImpl::GetParameterList
virtual const Teuchos::ParameterList & GetParameterList() const
Definition
MueLu_ParameterListAcceptor.cpp:41
MueLu::SingleLevelFactoryBase::~SingleLevelFactoryBase
virtual ~SingleLevelFactoryBase()
Destructor.
Definition
MueLu_SingleLevelFactoryBase.hpp:74
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::CallDeclareInput
virtual void CallDeclareInput(Level &requestedLevel) const
Definition
MueLu_SingleLevelFactoryBase.hpp:150
MueLu::SingleLevelFactoryBase::CallBuild
virtual void CallBuild(Level &requestedLevel) const
Definition
MueLu_SingleLevelFactoryBase.hpp:97
MueLu::SingleLevelFactoryBase::Build
virtual void Build(Level ¤tLevel) const =0
Build an object with this factory.
MueLu::SingleLevelFactoryBase::SingleLevelFactoryBase
SingleLevelFactoryBase()
Constructor.
Definition
MueLu_SingleLevelFactoryBase.hpp:71
MueLu::TimeMonitor
Integrates Teuchos::TimeMonitor with MueLu verbosity system.
Definition
MueLu_TimeMonitor.hpp:68
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:107
MueLu::VerboseObject::SetProcRankVerbose
int SetProcRankVerbose(int procRank) const
Set proc rank used for printing.
Definition
MueLu_VerboseObject.cpp:97
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:103
MueLu
Namespace for MueLu classes and methods.
Definition
MueLu_BrickAggregationFactory_decl.hpp:78
MueLu::Test0
@ Test0
Print factory calls.
Definition
MueLu_VerbosityLevel.hpp:84
MueLu::Test1
@ Test1
Print used parameters.
Definition
MueLu_VerbosityLevel.hpp:85
MueLu::toString
std::string toString(const T &what)
Little helper function to convert non-string types to strings.
Definition
MueLu_Utilities_decl.hpp:1149
src
MueCentral
MueLu_SingleLevelFactoryBase.hpp
Generated by
1.17.0