MueLu
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
MueLu_BrickAggregationFactory_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_BRICKAGGREGATIONFACTORY_DECL_HPP_
47
#define MUELU_BRICKAGGREGATIONFACTORY_DECL_HPP_
48
49
#include "
MueLu_ConfigDefs.hpp
"
50
51
#include <Xpetra_Import_fwd.hpp>
52
#include <Xpetra_ImportFactory_fwd.hpp>
53
#include <Xpetra_Map_fwd.hpp>
54
#include <Xpetra_MapFactory_fwd.hpp>
55
#include <Xpetra_Matrix_fwd.hpp>
56
#include <Xpetra_MultiVector_fwd.hpp>
57
#include <Xpetra_MultiVectorFactory_fwd.hpp>
58
59
#include "
MueLu_SingleLevelFactoryBase.hpp
"
60
#include "
MueLu_BrickAggregationFactory_fwd.hpp
"
61
62
#include "
MueLu_GraphBase_fwd.hpp
"
63
#include "
MueLu_Graph_fwd.hpp
"
64
#include "
MueLu_LWGraph_fwd.hpp
"
65
#include "
MueLu_Level_fwd.hpp
"
66
#include "
MueLu_Aggregates_fwd.hpp
"
67
#include "
MueLu_Exceptions.hpp
"
68
#include "
MueLu_Utilities_fwd.hpp
"
69
77
78
namespace
MueLu
{
79
80
template
<
class
Scalar
=
DefaultScalar
,
81
class
LocalOrdinal
=
DefaultLocalOrdinal
,
82
class
GlobalOrdinal
=
DefaultGlobalOrdinal
,
83
class
Node
=
DefaultNode
>
84
class
BrickAggregationFactory
:
public
SingleLevelFactoryBase
{
85
#undef MUELU_BRICKAGGREGATIONFACTORY_SHORT
86
#include "
MueLu_UseShortNames.hpp
"
87
private
:
88
typedef
Teuchos::ScalarTraits<Scalar>
STS
;
89
90
// Comparator for doubles
91
// Generally, the coordinates for coarser levels would come out of averaging of fine level coordinates
92
// It is possible that the result of the averaging differs slightly between clusters, as we might have
93
// 3x2 and 2x2 cluster which would result in averaging 6 and 4 y-coordinates respectively, leading to
94
// slightly different results.
95
// Therefore, we hardcode a constant so that close points are considered the same.
96
class
compare
{
97
public
:
98
bool
operator()
(
const
Scalar
& x,
const
Scalar
& y)
const
{
99
if
(STS::magnitude(x - y) < 1e-14)
100
return
false
;
101
return
STS::real(x) < STS::real(y);
102
}
103
};
104
typedef
std::map<Scalar,GlobalOrdinal,compare>
container
;
105
106
public
:
108
109
111
BrickAggregationFactory
() :
nDim_
(-1),
nx_
(-1),
ny_
(-1),
nz_
(-1),
bx_
(-1),
by_
(-1),
bz_
(-1) { };
112
114
virtual
~BrickAggregationFactory
() { }
115
116
RCP<const ParameterList>
GetValidParameterList
()
const
;
117
119
120
// Options shared by all aggregation algorithms
121
123
124
125
void
DeclareInput
(
Level
¤tLevel)
const
;
126
128
130
131
133
void
Build
(
Level
¤tLevel)
const
;
134
136
137
private
:
138
void
Setup
(
const
RCP<
const
Teuchos::Comm<int>
>& comm,
const
RCP<Xpetra::MultiVector<
typename
Teuchos::ScalarTraits<Scalar>::magnitudeType,LO,GO,NO> >& coords,
const
RCP<const Map>& map)
const
;
139
RCP<container>
Construct1DMap
(
const
RCP<
const
Teuchos::Comm<int>
>& comm,
const
ArrayRCP<
const
typename
Teuchos::ScalarTraits<Scalar>::magnitudeType>& x)
const
;
140
141
void
BuildGraph
(
Level
& currentLevel,
const
RCP<Matrix>& A)
const
;
142
143
144
bool
isDirichlet
(
LocalOrdinal
LID)
const
;
145
bool
isRoot
(
LocalOrdinal
LID)
const
;
146
GlobalOrdinal
getRoot
(
LocalOrdinal
LID)
const
;
147
GlobalOrdinal
getAggGID
(
LocalOrdinal
LID)
const
;
148
149
void
getIJK
(
LocalOrdinal
LID,
int
&i,
int
&j,
int
&k)
const
;
150
void
getAggIJK
(
LocalOrdinal
LID,
int
&i,
int
&j,
int
&k)
const
;
151
152
mutable
153
int
nDim_
;
154
mutable
155
RCP<container>
xMap_
,
yMap_
,
zMap_
;
156
mutable
157
ArrayRCP<const typename Teuchos::ScalarTraits<Scalar>::magnitudeType>
x_
,
y_
,
z_
;
158
mutable
159
int
nx_
,
ny_
,
nz_
;
160
mutable
161
int
bx_
,
by_
,
bz_
;
162
mutable
163
bool
dirichletX_
,
dirichletY_
,
dirichletZ_
;
164
mutable
165
int
naggx_
,
naggy_
,
naggz_
;
166
167
mutable
168
std::map<GlobalOrdinal,GlobalOrdinal>
revMap_
;
169
};
// class BrickAggregationFactory
170
171
}
172
173
#define MUELU_BRICKAGGREGATIONFACTORY_SHORT
174
#endif
/* MUELU_BRICKAGGREGATIONFACTORY_DECL_HPP_ */
MueLu_Aggregates_fwd.hpp
MueLu_BrickAggregationFactory_fwd.hpp
MueLu_ConfigDefs.hpp
MueLu_Exceptions.hpp
MueLu_GraphBase_fwd.hpp
MueLu_Graph_fwd.hpp
MueLu_LWGraph_fwd.hpp
MueLu_Level_fwd.hpp
MueLu_SingleLevelFactoryBase.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_Utilities_fwd.hpp
MueLu::BrickAggregationFactory::compare
Definition
MueLu_BrickAggregationFactory_decl.hpp:96
MueLu::BrickAggregationFactory::compare::operator()
bool operator()(const Scalar &x, const Scalar &y) const
Definition
MueLu_BrickAggregationFactory_decl.hpp:98
MueLu::BrickAggregationFactory::Setup
void Setup(const RCP< const Teuchos::Comm< int > > &comm, const RCP< Xpetra::MultiVector< typename Teuchos::ScalarTraits< Scalar >::magnitudeType, LO, GO, NO > > &coords, const RCP< const Map > &map) const
Definition
MueLu_BrickAggregationFactory_def.hpp:290
MueLu::BrickAggregationFactory::by_
int by_
Definition
MueLu_BrickAggregationFactory_decl.hpp:161
MueLu::BrickAggregationFactory::x_
ArrayRCP< const typename Teuchos::ScalarTraits< Scalar >::magnitudeType > x_
Definition
MueLu_BrickAggregationFactory_decl.hpp:157
MueLu::BrickAggregationFactory::bz_
int bz_
Definition
MueLu_BrickAggregationFactory_decl.hpp:161
MueLu::BrickAggregationFactory::getRoot
GlobalOrdinal getRoot(LocalOrdinal LID) const
Definition
MueLu_BrickAggregationFactory_def.hpp:416
MueLu::BrickAggregationFactory::naggx_
int naggx_
Definition
MueLu_BrickAggregationFactory_decl.hpp:165
MueLu::BrickAggregationFactory::isDirichlet
bool isDirichlet(LocalOrdinal LID) const
Definition
MueLu_BrickAggregationFactory_def.hpp:400
MueLu::BrickAggregationFactory::yMap_
RCP< container > yMap_
Definition
MueLu_BrickAggregationFactory_decl.hpp:155
MueLu::BrickAggregationFactory::dirichletY_
bool dirichletY_
Definition
MueLu_BrickAggregationFactory_decl.hpp:163
MueLu::BrickAggregationFactory::GetValidParameterList
RCP< const ParameterList > GetValidParameterList() const
Return a const parameter list of valid parameters that setParameterList() will accept.
Definition
MueLu_BrickAggregationFactory_def.hpp:77
MueLu::BrickAggregationFactory::~BrickAggregationFactory
virtual ~BrickAggregationFactory()
Destructor.
Definition
MueLu_BrickAggregationFactory_decl.hpp:114
MueLu::BrickAggregationFactory::revMap_
std::map< GlobalOrdinal, GlobalOrdinal > revMap_
Definition
MueLu_BrickAggregationFactory_decl.hpp:168
MueLu::BrickAggregationFactory::ny_
int ny_
Definition
MueLu_BrickAggregationFactory_decl.hpp:159
MueLu::BrickAggregationFactory::dirichletZ_
bool dirichletZ_
Definition
MueLu_BrickAggregationFactory_decl.hpp:163
MueLu::BrickAggregationFactory::y_
ArrayRCP< const typename Teuchos::ScalarTraits< Scalar >::magnitudeType > y_
Definition
MueLu_BrickAggregationFactory_decl.hpp:157
MueLu::BrickAggregationFactory::z_
ArrayRCP< const typename Teuchos::ScalarTraits< Scalar >::magnitudeType > z_
Definition
MueLu_BrickAggregationFactory_decl.hpp:157
MueLu::BrickAggregationFactory::getAggGID
GlobalOrdinal getAggGID(LocalOrdinal LID) const
Definition
MueLu_BrickAggregationFactory_def.hpp:458
MueLu::BrickAggregationFactory::DeclareInput
void DeclareInput(Level ¤tLevel) const
Input.
Definition
MueLu_BrickAggregationFactory_def.hpp:95
MueLu::BrickAggregationFactory::Build
void Build(Level ¤tLevel) const
Build aggregates.
Definition
MueLu_BrickAggregationFactory_def.hpp:145
MueLu::BrickAggregationFactory::BuildGraph
void BuildGraph(Level ¤tLevel, const RCP< Matrix > &A) const
Definition
MueLu_BrickAggregationFactory_def.hpp:486
MueLu::BrickAggregationFactory::bx_
int bx_
Definition
MueLu_BrickAggregationFactory_decl.hpp:161
MueLu::BrickAggregationFactory::nx_
int nx_
Definition
MueLu_BrickAggregationFactory_decl.hpp:159
MueLu::BrickAggregationFactory::Level
MueLu::Level Level
MueLu::BrickAggregationFactory::STS
Teuchos::ScalarTraits< Scalar > STS
Definition
MueLu_BrickAggregationFactory_decl.hpp:88
MueLu::BrickAggregationFactory::getAggIJK
void getAggIJK(LocalOrdinal LID, int &i, int &j, int &k) const
Definition
MueLu_BrickAggregationFactory_def.hpp:442
MueLu::BrickAggregationFactory::nz_
int nz_
Definition
MueLu_BrickAggregationFactory_decl.hpp:159
MueLu::BrickAggregationFactory::zMap_
RCP< container > zMap_
Definition
MueLu_BrickAggregationFactory_decl.hpp:155
MueLu::BrickAggregationFactory::xMap_
RCP< container > xMap_
Definition
MueLu_BrickAggregationFactory_decl.hpp:155
MueLu::BrickAggregationFactory::naggz_
int naggz_
Definition
MueLu_BrickAggregationFactory_decl.hpp:165
MueLu::BrickAggregationFactory::BrickAggregationFactory
BrickAggregationFactory()
Constructor.
Definition
MueLu_BrickAggregationFactory_decl.hpp:111
MueLu::BrickAggregationFactory::Construct1DMap
RCP< container > Construct1DMap(const RCP< const Teuchos::Comm< int > > &comm, const ArrayRCP< const typename Teuchos::ScalarTraits< Scalar >::magnitudeType > &x) const
Definition
MueLu_BrickAggregationFactory_def.hpp:343
MueLu::BrickAggregationFactory::dirichletX_
bool dirichletX_
Definition
MueLu_BrickAggregationFactory_decl.hpp:163
MueLu::BrickAggregationFactory::isRoot
bool isRoot(LocalOrdinal LID) const
Definition
MueLu_BrickAggregationFactory_def.hpp:392
MueLu::BrickAggregationFactory::getIJK
void getIJK(LocalOrdinal LID, int &i, int &j, int &k) const
Definition
MueLu_BrickAggregationFactory_def.hpp:434
MueLu::BrickAggregationFactory::naggy_
int naggy_
Definition
MueLu_BrickAggregationFactory_decl.hpp:165
MueLu::BrickAggregationFactory::container
std::map< Scalar, GlobalOrdinal, compare > container
Definition
MueLu_BrickAggregationFactory_decl.hpp:104
MueLu::BrickAggregationFactory::nDim_
int nDim_
Definition
MueLu_BrickAggregationFactory_decl.hpp:153
MueLu::Level
Class that holds all level-specific information.
Definition
MueLu_Level.hpp:99
MueLu::SingleLevelFactoryBase::SingleLevelFactoryBase
SingleLevelFactoryBase()
Constructor.
Definition
MueLu_SingleLevelFactoryBase.hpp:71
Teuchos::Comm
Definition
MueLu_Memory.hpp:54
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
Graph
BrickAggregation
MueLu_BrickAggregationFactory_decl.hpp
Generated by
1.17.0