MueLu Version of the Day
Loading...
Searching...
No Matches
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
24namespace MueLu {
25
26template <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
41template <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
52template <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
60template <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_ */
MueLu::DefaultLocalOrdinal LocalOrdinal
MueLu::DefaultGlobalOrdinal GlobalOrdinal
void Build(Level &currentLevel) const final
Build an object with this factory.
void DeclareInput(Level &currentLevel) const final
Specifies the data that this class needs, and the factories that generate that data.
virtual GlobalOrdinal GetDomainGIDOffset(Level &currentLevel) const final
Compute domain GID offset from another CoarseMap.
RCP< const ParameterList > GetValidParameterList() const final
Return a const parameter list of valid parameters that setParameterList() will accept.
virtual void BuildCoarseMap(Level &currentLevel, const GlobalOrdinal domainGIDOffset) const
Build the coarse map using the domain GID offset.
Exception throws to report errors in the internal logical of the program.
void Input(Level &level, const std::string &varName) const
const RCP< const FactoryBase > GetFactory(const std::string &varName) const
Default implementation of FactoryAcceptor::GetFactory().
Timer to be used in factories. Similar to Monitor but with additional timers.
Class that holds all level-specific information.
void DeclareInput(const std::string &ename, const FactoryBase *factory, const FactoryBase *requestedBy=NoFactory::get())
Callback from FactoryBase::CallDeclareInput() and FactoryBase::DeclareInput().
T & Get(const std::string &ename, const FactoryBase *factory=NoFactory::get())
Get data without decrementing associated storage counter (i.e., read-only access)....
Namespace for MueLu classes and methods.