MueLu
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
MueLu_IndexManager_kokkos_decl.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_INDEXMANAGER_KOKKOS_DECL_HPP
11
#define MUELU_INDEXMANAGER_KOKKOS_DECL_HPP
12
13
#include "
MueLu_ConfigDefs.hpp
"
14
#include "
MueLu_Types.hpp
"
15
16
#include <Tpetra_KokkosCompat_ClassicNodeAPI_Wrapper.hpp>
17
18
#include "Teuchos_OrdinalTraits.hpp"
19
20
#include "
MueLu_BaseClass.hpp
"
21
#include "
MueLu_IndexManager_kokkos_fwd.hpp
"
22
23
/*****************************************************************************
24
25
****************************************************************************/
26
27
namespace
MueLu
{
28
39
40
template
<
class
LocalOrdinal,
class
GlobalOrdinal,
class
Node>
41
class
IndexManager_kokkos
:
public
BaseClass
{
42
#undef MUELU_INDEXMANAGER_KOKKOS_SHORT
43
#include "
MueLu_UseShortNamesOrdinal.hpp
"
44
45
public
:
46
using
execution_space
=
typename
Node::execution_space;
47
using
memory_space
=
typename
Node::memory_space;
48
using
device_type
= Kokkos::Device<execution_space, memory_space>;
49
using
intTupleView
=
typename
Kokkos::View<int[3], device_type>;
50
using
LOTupleView
=
typename
Kokkos::View<LO[3], device_type>;
51
52
private
:
53
const
int
meshLayout
=
UNCOUPLED
;
54
int
myRank
= -1;
55
int
numDimensions
;
56
int
interpolationOrder_
;
57
intTupleView
coarseRate
;
58
intTupleView
endRate
;
59
60
LO
lNumFineNodes
;
61
LO
lNumFineNodes10
;
62
LOTupleView
lFineNodesPerDir
;
63
64
LO
numCoarseNodes
;
65
LO
numCoarseNodes10
;
66
LOTupleView
coarseNodesPerDir
;
67
68
public
:
70
IndexManager_kokkos
() =
default
;
71
73
IndexManager_kokkos
(
const
int
NumDimensions,
74
const
int
interpolationOrder,
75
const
int
MyRank,
76
const
ArrayView<const LO> LFineNodesPerDir,
77
const
ArrayView<const int> CoarseRate);
78
79
virtual
~IndexManager_kokkos
() {}
80
82
void
setupIM
(
const
int
NumDimensions,
83
const
int
interpolationOrder,
84
const
ArrayView<const int>
coarseRate
,
85
const
ArrayView<const LO> LFineNodesPerDir);
86
89
void
computeMeshParameters
();
90
91
int
getNumDimensions
()
const
{
return
numDimensions
; }
92
93
int
getInterpolationOrder
()
const
{
return
interpolationOrder_
; }
94
95
LO
getNumLocalFineNodes
()
const
{
return
lNumFineNodes
; }
96
97
LO
getNumCoarseNodes
()
const
{
return
numCoarseNodes
; }
98
99
KOKKOS_INLINE_FUNCTION
100
intTupleView
getCoarseningRates
()
const
{
return
coarseRate
; }
101
102
KOKKOS_INLINE_FUNCTION
103
intTupleView
getCoarseningEndRates
()
const
{
return
endRate
; }
104
105
KOKKOS_INLINE_FUNCTION
106
LOTupleView
getLocalFineNodesPerDir
()
const
{
return
lFineNodesPerDir
; }
107
108
KOKKOS_INLINE_FUNCTION
109
LOTupleView
getCoarseNodesPerDir
()
const
{
return
coarseNodesPerDir
; }
110
111
Array<LO>
getCoarseNodesPerDirArray
()
const
;
112
113
KOKKOS_INLINE_FUNCTION
114
void
getFineLID2FineTuple
(
const
LO myLID, LO (&tuple)[3])
const
{
115
LO tmp;
116
tuple[2] = myLID / (
lFineNodesPerDir
(1) *
lFineNodesPerDir
(0));
117
tmp = myLID % (
lFineNodesPerDir
(1) *
lFineNodesPerDir
(0));
118
tuple[1] = tmp /
lFineNodesPerDir
(0);
119
tuple[0] = tmp %
lFineNodesPerDir
(0);
120
}
// getFineNodeLocalTuple
121
122
KOKKOS_INLINE_FUNCTION
123
void
getFineTuple2FineLID
(
const
LO tuple[3], LO& myLID)
const
{
124
myLID = tuple[2] *
lNumFineNodes10
+ tuple[1] *
lFineNodesPerDir
[0] + tuple[0];
125
}
// getFineNodeLID
126
127
KOKKOS_INLINE_FUNCTION
128
void
getCoarseLID2CoarseTuple
(
const
LO myLID, LO (&tuple)[3])
const
{
129
LO tmp;
130
tuple[2] = myLID /
numCoarseNodes10
;
131
tmp = myLID %
numCoarseNodes10
;
132
tuple[1] = tmp /
coarseNodesPerDir
[0];
133
tuple[0] = tmp %
coarseNodesPerDir
[0];
134
}
// getCoarseNodeLocalTuple
135
136
KOKKOS_INLINE_FUNCTION
137
void
getCoarseTuple2CoarseLID
(
const
LO i,
const
LO j,
const
LO k, LO& myLID)
const
{
138
myLID = k *
numCoarseNodes10
+ j *
coarseNodesPerDir
[0] + i;
139
}
// getCoarseNodeLID
140
};
141
142
}
// namespace MueLu
143
144
#define MUELU_INDEXMANAGER_KOKKOS_SHORT
145
#endif
// MUELU_INDEXMANAGER_KOKKOS_DECL_HPP
MueLu_BaseClass.hpp
MueLu_ConfigDefs.hpp
MueLu_IndexManager_kokkos_fwd.hpp
MueLu_Types.hpp
MueLu_UseShortNamesOrdinal.hpp
MueLu::BaseClass
Base class for MueLu classes.
Definition
MueLu_BaseClass.hpp:27
MueLu::IndexManager_kokkos::numCoarseNodes10
LO numCoarseNodes10
local number of nodes per 0-1 slice remaining after coarsening.
Definition
MueLu_IndexManager_kokkos_decl.hpp:65
MueLu::IndexManager_kokkos::computeMeshParameters
void computeMeshParameters()
Definition
MueLu_IndexManager_kokkos_def.hpp:98
MueLu::IndexManager_kokkos::~IndexManager_kokkos
virtual ~IndexManager_kokkos()
Definition
MueLu_IndexManager_kokkos_decl.hpp:79
MueLu::IndexManager_kokkos::getNumCoarseNodes
LO getNumCoarseNodes() const
Definition
MueLu_IndexManager_kokkos_decl.hpp:97
MueLu::IndexManager_kokkos::coarseNodesPerDir
LOTupleView coarseNodesPerDir
local number of nodes per direction remaing after coarsening.
Definition
MueLu_IndexManager_kokkos_decl.hpp:66
MueLu::IndexManager_kokkos::getNumLocalFineNodes
LO getNumLocalFineNodes() const
Definition
MueLu_IndexManager_kokkos_decl.hpp:95
MueLu::IndexManager_kokkos::getCoarseNodesPerDir
KOKKOS_INLINE_FUNCTION LOTupleView getCoarseNodesPerDir() const
Definition
MueLu_IndexManager_kokkos_decl.hpp:109
MueLu::IndexManager_kokkos::endRate
intTupleView endRate
adapted coarsening rate at the edge of the mesh in each direction.
Definition
MueLu_IndexManager_kokkos_decl.hpp:58
MueLu::IndexManager_kokkos::lNumFineNodes
LO lNumFineNodes
local number of nodes.
Definition
MueLu_IndexManager_kokkos_decl.hpp:60
MueLu::IndexManager_kokkos::lNumFineNodes10
LO lNumFineNodes10
local number of nodes per 0-1 slice.
Definition
MueLu_IndexManager_kokkos_decl.hpp:61
MueLu::IndexManager_kokkos::LOTupleView
typename Kokkos::View< LO[3], device_type > LOTupleView
Definition
MueLu_IndexManager_kokkos_decl.hpp:50
MueLu::IndexManager_kokkos::device_type
Kokkos::Device< execution_space, memory_space > device_type
Definition
MueLu_IndexManager_kokkos_decl.hpp:48
MueLu::IndexManager_kokkos::getCoarseLID2CoarseTuple
KOKKOS_INLINE_FUNCTION void getCoarseLID2CoarseTuple(const LO myLID, LO(&tuple)[3]) const
Definition
MueLu_IndexManager_kokkos_decl.hpp:128
MueLu::IndexManager_kokkos::getCoarseTuple2CoarseLID
KOKKOS_INLINE_FUNCTION void getCoarseTuple2CoarseLID(const LO i, const LO j, const LO k, LO &myLID) const
Definition
MueLu_IndexManager_kokkos_decl.hpp:137
MueLu::IndexManager_kokkos::getLocalFineNodesPerDir
KOKKOS_INLINE_FUNCTION LOTupleView getLocalFineNodesPerDir() const
Definition
MueLu_IndexManager_kokkos_decl.hpp:106
MueLu::IndexManager_kokkos::execution_space
typename Node::execution_space execution_space
Definition
MueLu_IndexManager_kokkos_decl.hpp:46
MueLu::IndexManager_kokkos::getFineLID2FineTuple
KOKKOS_INLINE_FUNCTION void getFineLID2FineTuple(const LO myLID, LO(&tuple)[3]) const
Definition
MueLu_IndexManager_kokkos_decl.hpp:114
MueLu::IndexManager_kokkos::lFineNodesPerDir
LOTupleView lFineNodesPerDir
local number of nodes per direction.
Definition
MueLu_IndexManager_kokkos_decl.hpp:62
MueLu::IndexManager_kokkos::meshLayout
const int meshLayout
Definition
MueLu_IndexManager_kokkos_decl.hpp:53
MueLu::IndexManager_kokkos::memory_space
typename Node::memory_space memory_space
Definition
MueLu_IndexManager_kokkos_decl.hpp:47
MueLu::IndexManager_kokkos::getNumDimensions
int getNumDimensions() const
Definition
MueLu_IndexManager_kokkos_decl.hpp:91
MueLu::IndexManager_kokkos::numCoarseNodes
LO numCoarseNodes
local number of nodes remaining after coarsening.
Definition
MueLu_IndexManager_kokkos_decl.hpp:64
MueLu::IndexManager_kokkos::getCoarseningRates
KOKKOS_INLINE_FUNCTION intTupleView getCoarseningRates() const
Definition
MueLu_IndexManager_kokkos_decl.hpp:100
MueLu::IndexManager_kokkos::getCoarseNodesPerDirArray
Array< LO > getCoarseNodesPerDirArray() const
Definition
MueLu_IndexManager_kokkos_def.hpp:183
MueLu::IndexManager_kokkos::getInterpolationOrder
int getInterpolationOrder() const
Definition
MueLu_IndexManager_kokkos_decl.hpp:93
MueLu::IndexManager_kokkos::IndexManager_kokkos
IndexManager_kokkos()=default
Default constructor, return empty object.
MueLu::IndexManager_kokkos::coarseRate
intTupleView coarseRate
coarsening rate in each direction
Definition
MueLu_IndexManager_kokkos_decl.hpp:57
MueLu::IndexManager_kokkos::myRank
int myRank
Definition
MueLu_IndexManager_kokkos_decl.hpp:54
MueLu::IndexManager_kokkos::getCoarseningEndRates
KOKKOS_INLINE_FUNCTION intTupleView getCoarseningEndRates() const
Definition
MueLu_IndexManager_kokkos_decl.hpp:103
MueLu::IndexManager_kokkos::numDimensions
int numDimensions
Number of spacial dimensions in the problem.
Definition
MueLu_IndexManager_kokkos_decl.hpp:55
MueLu::IndexManager_kokkos::getFineTuple2FineLID
KOKKOS_INLINE_FUNCTION void getFineTuple2FineLID(const LO tuple[3], LO &myLID) const
Definition
MueLu_IndexManager_kokkos_decl.hpp:123
MueLu::IndexManager_kokkos::interpolationOrder_
int interpolationOrder_
Interpolation order used by grid transfer operators using these aggregates.
Definition
MueLu_IndexManager_kokkos_decl.hpp:56
MueLu::IndexManager_kokkos::setupIM
void setupIM(const int NumDimensions, const int interpolationOrder, const ArrayView< const int > coarseRate, const ArrayView< const LO > LFineNodesPerDir)
Common setup pattern used for all the different types of undelying mesh.
Definition
MueLu_IndexManager_kokkos_def.hpp:62
MueLu::IndexManager_kokkos::intTupleView
typename Kokkos::View< int[3], device_type > intTupleView
Definition
MueLu_IndexManager_kokkos_decl.hpp:49
MueLu
Namespace for MueLu classes and methods.
Definition
MueLu_BrickAggregationFactory_decl.hpp:42
MueLu::UNCOUPLED
@ UNCOUPLED
Definition
MueLu_Types.hpp:56
src
Graph
StructuredAggregation
MueLu_IndexManager_kokkos_decl.hpp
Generated by
1.17.0