Xpetra
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
Xpetra_StridedMapFactory_def.hpp
Go to the documentation of this file.
1
// @HEADER
2
// *****************************************************************************
3
// Xpetra: A linear algebra interface package
4
//
5
// Copyright 2012 NTESS and the Xpetra contributors.
6
// SPDX-License-Identifier: BSD-3-Clause
7
// *****************************************************************************
8
// @HEADER
9
10
// WARNING: This code is experimental. Backwards compatibility should not be expected.
11
12
#ifndef XPETRA_STRIDEDMAPFACTORY_DEF_HPP
13
#define XPETRA_STRIDEDMAPFACTORY_DEF_HPP
14
15
#include "
Xpetra_StridedMapFactory_decl.hpp
"
16
17
#include "
Xpetra_Exceptions.hpp
"
18
19
namespace
Xpetra
{
20
21
template
<
class
LocalOrdinal,
class
GlobalOrdinal,
class
Node>
22
RCP<Xpetra::StridedMap<LocalOrdinal, GlobalOrdinal, Node>
>
23
StridedMapFactory<LocalOrdinal, GlobalOrdinal, Node>::
24
Build
(
UnderlyingLib
lib,
25
global_size_t
numGlobalElements,
26
GlobalOrdinal indexBase,
27
std::vector<size_t>& stridingInfo,
28
const
Teuchos::RCP
<
const
Teuchos::Comm<int>
>& comm,
29
LocalOrdinal stridedBlockId,
30
GlobalOrdinal offset,
31
LocalGlobal
lg) {
32
return
rcp
(
new
Xpetra::StridedMap<LocalOrdinal, GlobalOrdinal, Node>
(lib, numGlobalElements, indexBase, stridingInfo, comm, stridedBlockId, offset, lg));
33
}
34
35
template
<
class
LocalOrdinal,
class
GlobalOrdinal,
class
Node>
36
RCP<Xpetra::StridedMap<LocalOrdinal, GlobalOrdinal, Node>
>
37
StridedMapFactory<LocalOrdinal, GlobalOrdinal, Node>::
38
Build
(
UnderlyingLib
lib,
39
global_size_t
numGlobalElements,
40
size_t
numLocalElements,
41
GlobalOrdinal indexBase,
42
std::vector<size_t>& stridingInfo,
43
const
Teuchos::RCP
<
const
Teuchos::Comm<int>
>& comm,
44
LocalOrdinal stridedBlockId,
45
GlobalOrdinal offset) {
46
return
rcp
(
new
StridedMap
(lib, numGlobalElements, numLocalElements, indexBase, stridingInfo, comm, stridedBlockId, offset));
47
}
48
49
template
<
class
LocalOrdinal,
class
GlobalOrdinal,
class
Node>
50
RCP<Xpetra::StridedMap<LocalOrdinal, GlobalOrdinal, Node>
>
51
StridedMapFactory<LocalOrdinal, GlobalOrdinal, Node>::
52
Build
(
const
RCP<const Map>
& map,
53
std::vector<size_t>& stridingInfo,
54
LocalOrdinal stridedBlockId,
55
GlobalOrdinal offset) {
56
return
rcp
(
new
StridedMap
(map, stridingInfo, map->getIndexBase(), stridedBlockId, offset));
57
}
58
59
template
<
class
LocalOrdinal,
class
GlobalOrdinal,
class
Node>
60
RCP<Xpetra::StridedMap<LocalOrdinal, GlobalOrdinal, Node>
>
61
StridedMapFactory<LocalOrdinal, GlobalOrdinal, Node>::
62
Build
(
const
RCP<const StridedMap>
& map, LocalOrdinal stridedBlockId) {
63
TEUCHOS_TEST_FOR_EXCEPTION
(stridedBlockId < 0,
Exceptions::RuntimeError
,
64
"Xpetra::StridedMapFactory::Build: constructor expects stridedBlockId > -1."
);
65
66
TEUCHOS_TEST_FOR_EXCEPTION
(map->getStridedBlockId() != -1,
Exceptions::RuntimeError
,
67
"Xpetra::StridedMapFactory::Build: constructor expects a full map (stridedBlockId == -1)."
);
68
69
std::vector<size_t> stridingInfo = map->getStridingData();
70
71
Teuchos::ArrayView<const GlobalOrdinal>
dofGids = map->getLocalElementList();
72
73
// determine nStridedOffset
74
size_t
nStridedOffset = 0;
75
for
(
int
j = 0; j < map->getStridedBlockId(); j++) {
76
nStridedOffset += stridingInfo[j];
77
}
78
79
const
size_t
numMyBlockDofs = (stridingInfo[stridedBlockId] * map->getLocalNumElements()) / map->getFixedBlockSize();
80
81
std::vector<GlobalOrdinal> subBlockDofGids(numMyBlockDofs);
82
83
// TODO fill vector with dofs
84
LocalOrdinal ind = 0;
85
for
(
typename
Teuchos::ArrayView<const GlobalOrdinal>::iterator
it = dofGids.
begin
(); it != dofGids.
end
(); ++it) {
86
if
(map->GID2StridingBlockId(*it) ==
Teuchos::as<size_t>
(stridedBlockId)) {
87
subBlockDofGids[ind++] = *it;
88
}
89
}
90
91
const
Teuchos::ArrayView<const GlobalOrdinal>
subBlockDofGids_view(&subBlockDofGids[0], subBlockDofGids.size());
92
93
return
rcp
(
new
StridedMap
(map->lib(),
94
Teuchos::OrdinalTraits<global_size_t>::invalid
(),
95
subBlockDofGids_view,
96
map->getIndexBase(),
97
stridingInfo,
98
map->getComm(),
99
stridedBlockId));
100
}
101
102
template
<
class
LocalOrdinal,
class
GlobalOrdinal,
class
Node>
103
RCP<Xpetra::StridedMap<LocalOrdinal, GlobalOrdinal, Node>
>
104
StridedMapFactory<LocalOrdinal, GlobalOrdinal, Node>::
105
Build
(
const
StridedMap
& map) {
106
XPETRA_MONITOR
(
"MapFactory::Build"
);
107
108
LocalOrdinal N = map.
getLocalNumElements
();
109
Teuchos::ArrayView<const GlobalOrdinal>
oldElements = map.
getLocalElementList
();
110
Teuchos::Array<GlobalOrdinal>
newElements(map.
getLocalNumElements
());
111
112
for
(LocalOrdinal i = 0; i < N; i++)
113
newElements[i] = oldElements[i];
114
115
std::vector<size_t> strData = map.
getStridingData
();
116
return
rcp
(
new
StridedMap
(map.
lib
(), map.
getGlobalNumElements
(), newElements, map.
getIndexBase
(), strData, map.
getComm
(), map.
getStridedBlockId
()));
117
}
118
119
template
<
class
LocalOrdinal,
class
GlobalOrdinal,
class
Node>
120
RCP<Xpetra::StridedMap<LocalOrdinal, GlobalOrdinal, Node>
>
121
StridedMapFactory<LocalOrdinal, GlobalOrdinal, Node>::
122
Build
(
UnderlyingLib
lib,
123
global_size_t
numGlobalElements,
124
const
Teuchos::ArrayView<const GlobalOrdinal>
& elementList,
125
GlobalOrdinal indexBase,
126
std::vector<size_t>& stridingInfo,
127
const
Teuchos::RCP
<
const
Teuchos::Comm<int>
>& comm,
128
LocalOrdinal stridedBlockId,
// FIXME (mfh 03 Sep 2014) This breaks if LocalOrdinal is unsigned
129
GlobalOrdinal
/* offset */
) {
130
return
rcp
(
new
StridedMap
(lib, numGlobalElements, elementList, indexBase, stridingInfo, comm, stridedBlockId));
131
}
132
133
}
// namespace Xpetra
134
135
#endif
// XPETRA_STRIDEDMAPFACTORY_DEF_HPP
136
137
// TODO: removed unused methods
XPETRA_MONITOR
#define XPETRA_MONITOR(funcName)
Xpetra_Exceptions.hpp
Xpetra_StridedMapFactory_decl.hpp
Teuchos::Array
Teuchos::ArrayView
Teuchos::ArrayView::end
iterator end() const
Teuchos::ArrayView::begin
iterator begin() const
Teuchos::ArrayView::iterator
pointer iterator
Teuchos::Comm
Teuchos::RCP
Xpetra::Exceptions::RuntimeError
Exception throws to report errors in the internal logical of the program.
Definition
Xpetra_Exceptions.hpp:57
Xpetra::StridedMapFactory::StridedMap
Xpetra::StridedMap< LocalOrdinal, GlobalOrdinal, Node > StridedMap
Xpetra::StridedMapFactory::Build
static RCP< Xpetra::StridedMap< LocalOrdinal, GlobalOrdinal, Node > > Build(UnderlyingLib lib, global_size_t numGlobalElements, GlobalOrdinal indexBase, std::vector< size_t > &stridingInfo, const Teuchos::RCP< const Teuchos::Comm< int > > &comm, LocalOrdinal stridedBlockId=-1, GlobalOrdinal offset=0, LocalGlobal lg=Xpetra::GloballyDistributed)
Map constructor with Xpetra-defined contiguous uniform distribution.
Definition
Xpetra_StridedMapFactory_def.hpp:24
Xpetra::StridedMap
Class that stores a strided map.
Definition
Xpetra_StridedMap_decl.hpp:64
Xpetra::StridedMap::lib
UnderlyingLib lib() const
Get the library used by this object (Tpetra or Epetra?).
Definition
Xpetra_StridedMap_def.hpp:677
Xpetra::StridedMap::getGlobalNumElements
global_size_t getGlobalNumElements() const
Returns the number of elements in this Map.
Definition
Xpetra_StridedMap_def.hpp:499
Xpetra::StridedMap::getStridedBlockId
LocalOrdinal getStridedBlockId() const
Definition
Xpetra_StridedMap_def.hpp:371
Xpetra::StridedMap::getLocalNumElements
size_t getLocalNumElements() const
Returns the number of elements belonging to the calling node.
Definition
Xpetra_StridedMap_def.hpp:506
Xpetra::StridedMap::getStridingData
std::vector< size_t > getStridingData() const
Definition
Xpetra_StridedMap_def.hpp:347
Xpetra::StridedMap::getComm
Teuchos::RCP< const Teuchos::Comm< int > > getComm() const
Get the Comm object for this Map.
Definition
Xpetra_StridedMap_def.hpp:643
Xpetra::StridedMap::getLocalElementList
Teuchos::ArrayView< const GlobalOrdinal > getLocalElementList() const
Return a list of the global indices owned by this node.
Definition
Xpetra_StridedMap_def.hpp:593
Xpetra::StridedMap::getIndexBase
GlobalOrdinal getIndexBase() const
Returns the index base for this Map.
Definition
Xpetra_StridedMap_def.hpp:513
TEUCHOS_TEST_FOR_EXCEPTION
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Teuchos::as
TypeTo as(const TypeFrom &t)
Xpetra
Xpetra namespace
Definition
Xpetra_BlockedCrsMatrix_decl.hpp:52
Xpetra::global_size_t
size_t global_size_t
Global size_t object.
Definition
Xpetra_ConfigDefs.hpp:136
Xpetra::LocalGlobal
LocalGlobal
Definition
Xpetra_ConfigDefs.hpp:139
Xpetra::rcp
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Xpetra::UnderlyingLib
UnderlyingLib
Definition
Xpetra_Map_decl.hpp:26
Teuchos::OrdinalTraits::invalid
static T invalid()
src
StridedMap
Xpetra_StridedMapFactory_def.hpp
Generated by
1.17.0