MueLu  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MueLu_BlockedCoarseMapFactory_def.hpp
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 #ifndef MUELU_BLOCKEDCOARSEMAPFACTORY_DEF_HPP_
11 #define MUELU_BLOCKEDCOARSEMAPFACTORY_DEF_HPP_
12 
13 #include <Xpetra_MultiVector.hpp>
14 #include <Xpetra_StridedMapFactory.hpp>
15 #include <Xpetra_Matrix.hpp>
16 
18 #include "MueLu_Level.hpp"
19 #include "MueLu_Aggregates.hpp"
20 #include "MueLu_Monitor.hpp"
21 
22 #include "MueLu_Factory.hpp"
23 
24 namespace MueLu {
25 
26 template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
28  RCP<ParameterList> validParamList = rcp(new ParameterList());
29 
30  validParamList->set<RCP<const FactoryBase>>("Aggregates", Teuchos::null, "Generating factory for aggregates.");
31  validParamList->set<RCP<const FactoryBase>>("Nullspace", Teuchos::null, "Generating factory for null space.");
32  validParamList->set<RCP<const FactoryBase>>("CoarseMap", Teuchos::null, "Generating factory of previous coarse map. (must be set by user!).");
33 
34  // do we need this?
35  validParamList->set<std::string>("Striding info", "{}", "Striding information");
36  validParamList->set<LocalOrdinal>("Strided block id", -1, "Strided block id");
37 
38  return validParamList;
39 }
40 
41 template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
43  this->Input(currentLevel, "Aggregates");
44  this->Input(currentLevel, "Nullspace");
45 
46  // Get CoarseMap from previously defined block
47  RCP<const FactoryBase> prevCoarseMapFact = this->GetFactory("CoarseMap");
48  TEUCHOS_TEST_FOR_EXCEPTION(prevCoarseMapFact == Teuchos::null, Exceptions::RuntimeError, "MueLu::BlockedCoarseMapFactory::getDomainMapOffset: user did not specify CoarseMap of previous block. Do not forget to set the CoarseMap factory.");
49  currentLevel.DeclareInput("CoarseMap", prevCoarseMapFact.get(), this);
50 }
51 
52 template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
54  FactoryMonitor m(*this, "Build", currentLevel);
55 
56  GlobalOrdinal domainGIDOffset = GetDomainGIDOffset(currentLevel);
57  CoarseMapFactory::BuildCoarseMap(currentLevel, domainGIDOffset);
58 }
59 
60 template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
62  Level &currentLevel) const {
63  RCP<const FactoryBase> prevCoarseMapFact = this->GetFactory("CoarseMap");
64  RCP<const Map> subPDomainMap = currentLevel.Get<RCP<const Map>>("CoarseMap", prevCoarseMapFact.get());
65  GlobalOrdinal maxGlobalIndex = subPDomainMap->getMaxAllGlobalIndex();
66 
67  return maxGlobalIndex + Teuchos::ScalarTraits<GlobalOrdinal>::one();
68 }
69 
70 } // namespace MueLu
71 
72 #endif /* MUELU_BLOCKEDCOARSEMAPFACTORY_DEF_HPP_ */
RCP< const ParameterList > GetValidParameterList() const final
Return a const parameter list of valid parameters that setParameterList() will accept.
MueLu::DefaultLocalOrdinal LocalOrdinal
T & Get(const std::string &ename, const FactoryBase *factory=NoFactory::get())
Get data without decrementing associated storage counter (i.e., read-only access). Usage: Level-&gt;Get&lt; RCP&lt;Matrix&gt; &gt;(&quot;A&quot;, factory) if factory == NULL =&gt; use default factory.
void Build(Level &currentLevel) const final
Build an object with this factory.
Timer to be used in factories. Similar to Monitor but with additional timers.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
T * get() const
virtual void BuildCoarseMap(Level &currentLevel, const GlobalOrdinal domainGIDOffset) const
Build the coarse map using the domain GID offset.
ParameterList & set(std::string const &name, T &&value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
MueLu::DefaultGlobalOrdinal GlobalOrdinal
Class that holds all level-specific information.
Definition: MueLu_Level.hpp:63
virtual GlobalOrdinal GetDomainGIDOffset(Level &currentLevel) const final
Compute domain GID offset from another CoarseMap.
Exception throws to report errors in the internal logical of the program.
void DeclareInput(const std::string &ename, const FactoryBase *factory, const FactoryBase *requestedBy=NoFactory::get())
Callback from FactoryBase::CallDeclareInput() and FactoryBase::DeclareInput()
void DeclareInput(Level &currentLevel) const final
Specifies the data that this class needs, and the factories that generate that data.