MueLu
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
MueLu_BlockedCoarseMapFactory_def.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
47
#ifndef MUELU_BLOCKEDCOARSEMAPFACTORY_DEF_HPP_
48
#define MUELU_BLOCKEDCOARSEMAPFACTORY_DEF_HPP_
49
50
#include <Xpetra_MultiVector.hpp>
51
#include <Xpetra_StridedMapFactory.hpp>
52
#include <Xpetra_Matrix.hpp>
53
54
#include "
MueLu_BlockedCoarseMapFactory_decl.hpp
"
55
#include "
MueLu_Level.hpp
"
56
#include "MueLu_Aggregates.hpp"
57
#include "
MueLu_Monitor.hpp
"
58
59
#include "
MueLu_Factory.hpp
"
60
61
namespace
MueLu
{
62
63
template
<
class
Scalar,
class
LocalOrdinal,
class
GlobalOrdinal,
class
Node>
64
RCP<const ParameterList>
BlockedCoarseMapFactory<Scalar, LocalOrdinal, GlobalOrdinal, Node>::GetValidParameterList
()
const
65
{
66
RCP<ParameterList> validParamList = rcp(
new
ParameterList());
67
68
validParamList->set< RCP<const FactoryBase> >(
"Aggregates"
, Teuchos::null,
"Generating factory for aggregates."
);
69
validParamList->set< RCP<const FactoryBase> >(
"Nullspace"
, Teuchos::null,
"Generating factory for null space."
);
70
validParamList->set< RCP<const FactoryBase> >(
"CoarseMap"
, Teuchos::null,
"Generating factory of previous coarse map. (must be set by user!)."
);
71
72
// do we need this?
73
validParamList->set<std::string>(
"Striding info"
,
"{}"
,
"Striding information"
);
74
validParamList->set<
LocalOrdinal
>(
"Strided block id"
, -1,
"Strided block id"
);
75
76
return
validParamList;
77
}
78
79
template
<
class
Scalar,
class
LocalOrdinal,
class
GlobalOrdinal,
class
Node>
80
void
BlockedCoarseMapFactory<Scalar, LocalOrdinal, GlobalOrdinal, Node>::DeclareInput
(
Level
¤tLevel)
const
81
{
82
this->
Input
(currentLevel,
"Aggregates"
);
83
this->
Input
(currentLevel,
"Nullspace"
);
84
85
// Get CoarseMap from previously defined block
86
RCP<const FactoryBase> prevCoarseMapFact = this->
GetFactory
(
"CoarseMap"
);
87
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."
);
88
currentLevel.
DeclareInput
(
"CoarseMap"
, prevCoarseMapFact.get(),
this
);
89
}
90
91
template
<
class
Scalar,
class
LocalOrdinal,
class
GlobalOrdinal,
class
Node>
92
void
BlockedCoarseMapFactory<Scalar, LocalOrdinal, GlobalOrdinal, Node>::Build
(
Level
¤tLevel)
const
93
{
94
FactoryMonitor
m(*
this
,
"Build"
, currentLevel);
95
96
GlobalOrdinal
domainGIDOffset =
GetDomainGIDOffset
(currentLevel);
97
CoarseMapFactory::BuildCoarseMap
(currentLevel, domainGIDOffset);
98
}
99
100
template
<
class
Scalar,
class
LocalOrdinal,
class
GlobalOrdinal,
class
Node>
101
GlobalOrdinal
BlockedCoarseMapFactory<Scalar, LocalOrdinal, GlobalOrdinal, Node>::GetDomainGIDOffset
(
102
Level
& currentLevel)
const
103
{
104
RCP<const FactoryBase> prevCoarseMapFact = this->
GetFactory
(
"CoarseMap"
);
105
RCP<const Map> subPDomainMap = currentLevel.
Get
<RCP<const Map>>(
"CoarseMap"
, prevCoarseMapFact.get());
106
GlobalOrdinal
maxGlobalIndex = subPDomainMap->getMaxAllGlobalIndex();
107
108
return
maxGlobalIndex + Teuchos::ScalarTraits<GlobalOrdinal>::one();
109
}
110
111
}
//namespace MueLu
112
113
#endif
/* MUELU_BLOCKEDCOARSEMAPFACTORY_DEF_HPP_ */
MueLu_BlockedCoarseMapFactory_decl.hpp
MueLu_Factory.hpp
MueLu_Level.hpp
MueLu_Monitor.hpp
LocalOrdinal
MueLu::DefaultLocalOrdinal LocalOrdinal
Definition
MueLu_UseDefaultTypes.hpp:50
GlobalOrdinal
MueLu::DefaultGlobalOrdinal GlobalOrdinal
Definition
MueLu_UseDefaultTypes.hpp:51
MueLu::BlockedCoarseMapFactory::Build
void Build(Level ¤tLevel) const final
Build an object with this factory.
Definition
MueLu_BlockedCoarseMapFactory_def.hpp:92
MueLu::BlockedCoarseMapFactory::DeclareInput
void DeclareInput(Level ¤tLevel) const final
Specifies the data that this class needs, and the factories that generate that data.
Definition
MueLu_BlockedCoarseMapFactory_def.hpp:80
MueLu::BlockedCoarseMapFactory::GetDomainGIDOffset
virtual GlobalOrdinal GetDomainGIDOffset(Level ¤tLevel) const final
Compute domain GID offset from another CoarseMap.
Definition
MueLu_BlockedCoarseMapFactory_def.hpp:101
MueLu::BlockedCoarseMapFactory::GetValidParameterList
RCP< const ParameterList > GetValidParameterList() const final
Return a const parameter list of valid parameters that setParameterList() will accept.
Definition
MueLu_BlockedCoarseMapFactory_def.hpp:64
MueLu::CoarseMapFactory::BuildCoarseMap
virtual void BuildCoarseMap(Level ¤tLevel, const GlobalOrdinal domainGIDOffset) const
Build the coarse map using the domain GID offset.
Definition
MueLu_CoarseMapFactory_def.hpp:121
MueLu::Exceptions::RuntimeError
Exception throws to report errors in the internal logical of the program.
Definition
MueLu_Exceptions.hpp:70
MueLu::FactoryMonitor
Timer to be used in factories. Similar to Monitor but with additional timers.
Definition
MueLu_Monitor.hpp:202
MueLu::Factory::Input
void Input(Level &level, const std::string &varName) const
Definition
MueLu_Factory.hpp:146
MueLu::Factory::GetFactory
const RCP< const FactoryBase > GetFactory(const std::string &varName) const
Default implementation of FactoryAcceptor::GetFactory().
Definition
MueLu_Factory.hpp:95
MueLu::Level
Class that holds all level-specific information.
Definition
MueLu_Level.hpp:99
MueLu::Level::DeclareInput
void DeclareInput(const std::string &ename, const FactoryBase *factory, const FactoryBase *requestedBy=NoFactory::get())
Callback from FactoryBase::CallDeclareInput() and FactoryBase::DeclareInput().
Definition
MueLu_Level.cpp:150
MueLu::Level::Get
T & Get(const std::string &ename, const FactoryBase *factory=NoFactory::get())
Get data without decrementing associated storage counter (i.e., read-only access)....
Definition
MueLu_Level.hpp:191
MueLu
Namespace for MueLu classes and methods.
Definition
MueLu_BrickAggregationFactory_decl.hpp:78
src
Transfers
BlockedTransfers
MueLu_BlockedCoarseMapFactory_def.hpp
Generated by
1.17.0