MueLu
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
MueLu_FactoryManager_decl.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_FACTORYMANAGER_DECL_HPP
47
#define MUELU_FACTORYMANAGER_DECL_HPP
48
49
#include "
MueLu_ConfigDefs.hpp
"
50
#include "
MueLu_FactoryManager_fwd.hpp
"
51
#include "
MueLu_FactoryManagerBase.hpp
"
52
53
#include "
MueLu_AmalgamationFactory_fwd.hpp
"
54
#include "
MueLu_AggregateQualityEstimateFactory_fwd.hpp
"
55
#include "
MueLu_CoalesceDropFactory_fwd.hpp
"
56
#include "
MueLu_CoarseMapFactory_fwd.hpp
"
57
#include "
MueLu_ConstraintFactory_fwd.hpp
"
58
#include "
MueLu_DirectSolver_fwd.hpp
"
59
#include "
MueLu_InitialBlockNumberFactory_fwd.hpp
"
60
#include "
MueLu_LineDetectionFactory_fwd.hpp
"
61
#include "
MueLu_NullspaceFactory_fwd.hpp
"
62
#include "
MueLu_PatternFactory_fwd.hpp
"
63
#include "
MueLu_RAPFactory_fwd.hpp
"
64
#include "
MueLu_RepartitionHeuristicFactory_fwd.hpp
"
65
#include "
MueLu_RepartitionFactory_fwd.hpp
"
66
#include "
MueLu_SaPFactory_fwd.hpp
"
67
#include "
MueLu_ScaledNullspaceFactory_fwd.hpp
"
68
#include "
MueLu_SmootherFactory_fwd.hpp
"
69
#include "
MueLu_StructuredAggregationFactory_fwd.hpp
"
70
#include "
MueLu_TentativePFactory_fwd.hpp
"
71
#include "
MueLu_TransPFactory_fwd.hpp
"
72
#include "
MueLu_TrilinosSmoother_fwd.hpp
"
73
#include "
MueLu_UncoupledAggregationFactory_fwd.hpp
"
74
#include "
MueLu_ZoltanInterface_fwd.hpp
"
75
#include "
MueLu_InterfaceMappingTransferFactory_fwd.hpp
"
76
#include "
MueLu_InterfaceAggregationFactory_fwd.hpp
"
77
78
79
#include "
MueLu_CoalesceDropFactory_kokkos_fwd.hpp
"
80
#include "
MueLu_NullspaceFactory_kokkos_fwd.hpp
"
81
#include "
MueLu_SaPFactory_kokkos_fwd.hpp
"
82
#include "
MueLu_TentativePFactory_kokkos_fwd.hpp
"
83
#include "
MueLu_UncoupledAggregationFactory_kokkos_fwd.hpp
"
84
85
namespace
MueLu
{
86
105
106
template
<
class
Scalar
=
DefaultScalar
,
107
class
LocalOrdinal
=
DefaultLocalOrdinal
,
108
class
GlobalOrdinal
=
DefaultGlobalOrdinal
,
109
class
Node
=
DefaultNode
>
110
class
FactoryManager
:
public
FactoryManagerBase
{
111
#undef MUELU_FACTORYMANAGER_SHORT
112
#include "
MueLu_UseShortNames.hpp
"
113
114
public
:
115
117
118
120
FactoryManager
() {
121
SetIgnoreUserData
(
false
);
// set IgnorUserData flag to false (default behaviour)
122
# ifdef HAVE_MUELU_SERIAL
123
if
(
typeid
(
Node
).name() ==
typeid
(Tpetra::KokkosCompat::KokkosSerialWrapperNode).name())
124
useKokkos_
=
false
;
125
# endif
126
# ifdef HAVE_MUELU_OPENMP
127
if
(
typeid
(
Node
).name() ==
typeid
(Tpetra::KokkosCompat::KokkosOpenMPWrapperNode).name())
128
useKokkos_
=
true
;
129
# endif
130
# ifdef HAVE_MUELU_CUDA
131
if
(
typeid
(
Node
).name() ==
typeid
(Tpetra::KokkosCompat::KokkosCudaWrapperNode).name())
132
useKokkos_
=
true
;
133
# endif
134
# ifdef HAVE_MUELU_HIP
135
if
(
typeid
(
Node
).name() ==
typeid
(Tpetra::KokkosCompat::KokkosHIPWrapperNode).name())
136
useKokkos_
=
true
;
137
# endif
138
# ifdef HAVE_MUELU_SYCL
139
if
(
typeid
(
Node
).name() ==
typeid
(Tpetra::KokkosCompat::KokkosSYCLWrapperNode).name())
140
useKokkos_
=
true
;
141
# endif
142
}
143
145
FactoryManager
(
const
std::map<std::string, RCP<const FactoryBase> >& factoryTable) {
146
factoryTable_
= factoryTable;
147
SetIgnoreUserData
(
false
);
// set IgnorUserData flag to false (default behaviour) //TODO: use parent class constructor instead
148
# ifdef HAVE_MUELU_SERIAL
149
if
(
typeid
(
Node
).name() ==
typeid
(Tpetra::KokkosCompat::KokkosSerialWrapperNode).name())
150
useKokkos_
=
false
;
151
# endif
152
# ifdef HAVE_MUELU_OPENMP
153
if
(
typeid
(
Node
).name() ==
typeid
(Tpetra::KokkosCompat::KokkosOpenMPWrapperNode).name())
154
useKokkos_
=
true
;
155
# endif
156
# ifdef HAVE_MUELU_CUDA
157
if
(
typeid
(
Node
).name() ==
typeid
(Tpetra::KokkosCompat::KokkosCudaWrapperNode).name())
158
useKokkos_
=
true
;
159
# endif
160
# ifdef HAVE_MUELU_HIP
161
if
(
typeid
(
Node
).name() ==
typeid
(Tpetra::KokkosCompat::KokkosHIPWrapperNode).name())
162
useKokkos_
=
true
;
163
# endif
164
# ifdef HAVE_MUELU_SYCL
165
if
(
typeid
(
Node
).name() ==
typeid
(Tpetra::KokkosCompat::KokkosSYCLWrapperNode).name())
166
useKokkos_
=
true
;
167
# endif
168
}
169
171
virtual
~FactoryManager
() { }
172
174
176
177
185
void
SetFactory
(
const
std::string & varName,
const
RCP<const FactoryBase>& factory);
186
192
const
RCP<const FactoryBase>
GetFactory
(
const
std::string& varName)
const
;
193
199
const
RCP<FactoryBase>
GetFactoryNonConst
(
const
std::string& varName);
200
202
// Return true if Factory associated with varName is registered
203
bool
hasFactory
(
const
std::string& varName)
const
;
204
205
207
const
RCP<const FactoryBase>
GetDefaultFactory
(
const
std::string& varName)
const
;
208
209
void
SetKokkosRefactor
(
const
bool
useKokkos) {
210
useKokkos_
= useKokkos;
211
}
212
213
bool
GetKokkosRefactor
()
const
{
return
useKokkos_
; }
214
216
217
void
Clean
()
const
{
defaultFactoryTable_
.clear(); }
218
219
#ifdef HAVE_MUELU_DEBUG
220
void
ResetDebugData()
const
;
221
#endif
222
223
void
Print
()
const
;
224
225
private
:
226
228
229
234
235
const
RCP<const FactoryBase>
SetAndReturnDefaultFactory
(
const
std::string& varName,
const
RCP<const FactoryBase>& factory)
const
;
237
245
std::map<std::string, RCP<const FactoryBase> >
factoryTable_
;
246
253
mutable
254
std::map<std::string, RCP<const FactoryBase> >
defaultFactoryTable_
;
255
257
bool
useKokkos_
;
258
259
};
// class
260
261
}
// namespace MueLu
262
263
#define MUELU_FACTORYMANAGER_SHORT
264
#endif
// MUELU_FACTORYMANAGER_DECL_HPP
MueLu_AggregateQualityEstimateFactory_fwd.hpp
MueLu_AmalgamationFactory_fwd.hpp
MueLu_CoalesceDropFactory_fwd.hpp
MueLu_CoalesceDropFactory_kokkos_fwd.hpp
MueLu_CoarseMapFactory_fwd.hpp
MueLu_ConfigDefs.hpp
MueLu_ConstraintFactory_fwd.hpp
MueLu_DirectSolver_fwd.hpp
MueLu_FactoryManagerBase.hpp
MueLu_FactoryManager_fwd.hpp
MueLu_InitialBlockNumberFactory_fwd.hpp
MueLu_InterfaceAggregationFactory_fwd.hpp
MueLu_InterfaceMappingTransferFactory_fwd.hpp
MueLu_LineDetectionFactory_fwd.hpp
MueLu_NullspaceFactory_fwd.hpp
MueLu_NullspaceFactory_kokkos_fwd.hpp
MueLu_PatternFactory_fwd.hpp
MueLu_RAPFactory_fwd.hpp
MueLu_RepartitionFactory_fwd.hpp
MueLu_RepartitionHeuristicFactory_fwd.hpp
MueLu_SaPFactory_fwd.hpp
MueLu_SaPFactory_kokkos_fwd.hpp
MueLu_ScaledNullspaceFactory_fwd.hpp
MueLu_SmootherFactory_fwd.hpp
MueLu_StructuredAggregationFactory_fwd.hpp
MueLu_TentativePFactory_fwd.hpp
MueLu_TentativePFactory_kokkos_fwd.hpp
MueLu_TransPFactory_fwd.hpp
MueLu_TrilinosSmoother_fwd.hpp
MueLu_UncoupledAggregationFactory_fwd.hpp
MueLu_UncoupledAggregationFactory_kokkos_fwd.hpp
LocalOrdinal
MueLu::DefaultLocalOrdinal LocalOrdinal
Definition
MueLu_UseDefaultTypes.hpp:50
Scalar
MueLu::DefaultScalar Scalar
Definition
MueLu_UseDefaultTypes.hpp:49
GlobalOrdinal
MueLu::DefaultGlobalOrdinal GlobalOrdinal
Definition
MueLu_UseDefaultTypes.hpp:51
Node
MueLu::DefaultNode Node
Definition
MueLu_UseDefaultTypes.hpp:52
MueLu_UseShortNames.hpp
MueLu_ZoltanInterface_fwd.hpp
MueLu::FactoryManagerBase::SetIgnoreUserData
void SetIgnoreUserData(bool bIgnoreUserData=false)
set IgnoreUserData flag
Definition
MueLu_FactoryManagerBase.hpp:97
MueLu::FactoryManager::Clean
void Clean() const
Definition
MueLu_FactoryManager_decl.hpp:217
MueLu::FactoryManager::GetDefaultFactory
const RCP< const FactoryBase > GetDefaultFactory(const std::string &varName) const
Definition
MueLu_FactoryManager_def.hpp:123
MueLu::FactoryManager::SetKokkosRefactor
void SetKokkosRefactor(const bool useKokkos)
Definition
MueLu_FactoryManager_decl.hpp:209
MueLu::FactoryManager::SetAndReturnDefaultFactory
const RCP< const FactoryBase > SetAndReturnDefaultFactory(const std::string &varName, const RCP< const FactoryBase > &factory) const
Definition
MueLu_FactoryManager_def.hpp:241
MueLu::FactoryManager< Scalar, LocalOrdinal, GlobalOrdinal, Node >::useKokkos_
bool useKokkos_
Definition
MueLu_FactoryManager_decl.hpp:257
MueLu::FactoryManager< Scalar, LocalOrdinal, GlobalOrdinal, Node >::defaultFactoryTable_
std::map< std::string, RCP< const FactoryBase > > defaultFactoryTable_
Definition
MueLu_FactoryManager_decl.hpp:254
MueLu::FactoryManager::SetFactory
void SetFactory(const std::string &varName, const RCP< const FactoryBase > &factory)
Set Factory.
Definition
MueLu_FactoryManager_def.hpp:96
MueLu::FactoryManager::hasFactory
bool hasFactory(const std::string &varName) const
Check.
Definition
MueLu_FactoryManager_def.hpp:117
MueLu::FactoryManager::FactoryManagerBase
MueLu::FactoryManagerBase FactoryManagerBase
MueLu::FactoryManager::GetKokkosRefactor
bool GetKokkosRefactor() const
Definition
MueLu_FactoryManager_decl.hpp:213
MueLu::FactoryManager< Scalar, LocalOrdinal, GlobalOrdinal, Node >::factoryTable_
std::map< std::string, RCP< const FactoryBase > > factoryTable_
Definition
MueLu_FactoryManager_decl.hpp:245
MueLu::FactoryManager::GetFactory
const RCP< const FactoryBase > GetFactory(const std::string &varName) const
Get factory associated with a particular data name.
Definition
MueLu_FactoryManager_def.hpp:101
MueLu::FactoryManager::FactoryManager
FactoryManager()
Constructor.
Definition
MueLu_FactoryManager_decl.hpp:120
MueLu::FactoryManager::FactoryManager
FactoryManager(const std::map< std::string, RCP< const FactoryBase > > &factoryTable)
Constructor used by HierarchyFactory (temporary, will be removed).
Definition
MueLu_FactoryManager_decl.hpp:145
MueLu::FactoryManager::~FactoryManager
virtual ~FactoryManager()
Destructor.
Definition
MueLu_FactoryManager_decl.hpp:171
MueLu::FactoryManager::Print
void Print() const
Definition
MueLu_FactoryManager_def.hpp:252
MueLu::FactoryManager::GetFactoryNonConst
const RCP< FactoryBase > GetFactoryNonConst(const std::string &varName)
Get factory associated with a particular data name (NONCONST version).
Definition
MueLu_FactoryManager_def.hpp:112
MueLu
Namespace for MueLu classes and methods.
Definition
MueLu_BrickAggregationFactory_decl.hpp:78
MueLu::DefaultNode
Tpetra::KokkosClassic::DefaultNode::DefaultNodeType DefaultNode
Definition
MueLu_Details_DefaultTypes.hpp:70
MueLu::DefaultGlobalOrdinal
int DefaultGlobalOrdinal
Definition
MueLu_Details_DefaultTypes.hpp:67
MueLu::DefaultLocalOrdinal
int DefaultLocalOrdinal
Definition
MueLu_Details_DefaultTypes.hpp:60
MueLu::DefaultScalar
Tpetra::Details::DefaultTypes::scalar_type DefaultScalar
Definition
MueLu_Details_DefaultTypes.hpp:58
src
MueCentral
MueLu_FactoryManager_decl.hpp
Generated by
1.17.0