MueLu Version of the Day
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"
52
77
78
84
85namespace MueLu {
86
105
106 template<class Scalar = DefaultScalar,
109 class Node = DefaultNode>
111#undef MUELU_FACTORYMANAGER_SHORT
113
114 public:
115
117
118
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
258
259 }; // class
260
261} // namespace MueLu
262
263#define MUELU_FACTORYMANAGER_SHORT
264#endif // MUELU_FACTORYMANAGER_DECL_HPP
MueLu::DefaultLocalOrdinal LocalOrdinal
MueLu::DefaultScalar Scalar
MueLu::DefaultGlobalOrdinal GlobalOrdinal
MueLu::DefaultNode Node
void SetIgnoreUserData(bool bIgnoreUserData=false)
set IgnoreUserData flag
const RCP< const FactoryBase > GetDefaultFactory(const std::string &varName) const
void SetKokkosRefactor(const bool useKokkos)
const RCP< const FactoryBase > SetAndReturnDefaultFactory(const std::string &varName, const RCP< const FactoryBase > &factory) const
std::map< std::string, RCP< const FactoryBase > > defaultFactoryTable_
void SetFactory(const std::string &varName, const RCP< const FactoryBase > &factory)
Set Factory.
bool hasFactory(const std::string &varName) const
Check.
MueLu::FactoryManagerBase FactoryManagerBase
const RCP< const FactoryBase > GetFactory(const std::string &varName) const
Get factory associated with a particular data name.
FactoryManager(const std::map< std::string, RCP< const FactoryBase > > &factoryTable)
Constructor used by HierarchyFactory (temporary, will be removed).
const RCP< FactoryBase > GetFactoryNonConst(const std::string &varName)
Get factory associated with a particular data name (NONCONST version).
Namespace for MueLu classes and methods.
Tpetra::KokkosClassic::DefaultNode::DefaultNodeType DefaultNode
Tpetra::Details::DefaultTypes::scalar_type DefaultScalar