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
// ***********************************************************************
4
//
5
// Xpetra: A linear algebra interface package
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
// WARNING: This code is experimental. Backwards compatibility should not be expected.
48
49
#ifndef XPETRA_STRIDEDMAPFACTORY_DEF_HPP
50
#define XPETRA_STRIDEDMAPFACTORY_DEF_HPP
51
52
#include "
Xpetra_StridedMapFactory_decl.hpp
"
53
54
#include "
Xpetra_Exceptions.hpp
"
55
56
namespace
Xpetra
{
57
58
template
<
class
LocalOrdinal,
class
GlobalOrdinal,
class
Node>
59
RCP<Xpetra::StridedMap<LocalOrdinal, GlobalOrdinal, Node>
>
60
StridedMapFactory<LocalOrdinal, GlobalOrdinal, Node>::
61
Build
(
UnderlyingLib
lib,
62
global_size_t
numGlobalElements,
63
GlobalOrdinal indexBase,
64
std::vector<size_t>& stridingInfo,
65
const
Teuchos::RCP
<
const
Teuchos::Comm<int>
>& comm,
66
LocalOrdinal stridedBlockId,
67
GlobalOrdinal offset,
68
LocalGlobal
lg)
69
{
70
return
rcp
(
new
Xpetra::StridedMap<LocalOrdinal, GlobalOrdinal, Node>
(lib, numGlobalElements, indexBase, stridingInfo, comm, stridedBlockId, offset, lg));
71
}
72
73
74
template
<
class
LocalOrdinal,
class
GlobalOrdinal,
class
Node>
75
RCP<Xpetra::StridedMap<LocalOrdinal,GlobalOrdinal,Node>
>
76
StridedMapFactory<LocalOrdinal, GlobalOrdinal, Node>::
77
Build
(
UnderlyingLib
lib,
78
global_size_t
numGlobalElements,
79
size_t
numLocalElements,
80
GlobalOrdinal indexBase,
81
std::vector<size_t>& stridingInfo,
82
const
Teuchos::RCP
<
const
Teuchos::Comm<int>
>& comm,
83
LocalOrdinal stridedBlockId,
84
GlobalOrdinal offset)
85
{
86
return
rcp
(
new
StridedMap
(lib, numGlobalElements, numLocalElements, indexBase, stridingInfo, comm, stridedBlockId, offset));
87
}
88
89
90
template
<
class
LocalOrdinal,
class
GlobalOrdinal,
class
Node>
91
RCP<Xpetra::StridedMap<LocalOrdinal,GlobalOrdinal,Node>
>
92
StridedMapFactory<LocalOrdinal, GlobalOrdinal, Node>::
93
Build
(
const
RCP<const Map>
& map,
94
std::vector<size_t>& stridingInfo,
95
LocalOrdinal stridedBlockId,
96
GlobalOrdinal offset)
97
{
98
return
rcp
(
new
StridedMap
(map, stridingInfo, map->getIndexBase(), stridedBlockId, offset));
99
}
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
RCP<const StridedMap>
& map, LocalOrdinal stridedBlockId)
106
{
107
TEUCHOS_TEST_FOR_EXCEPTION
(stridedBlockId < 0,
Exceptions::RuntimeError
,
108
"Xpetra::StridedMapFactory::Build: constructor expects stridedBlockId > -1."
);
109
110
TEUCHOS_TEST_FOR_EXCEPTION
(map->getStridedBlockId() != -1,
Exceptions::RuntimeError
,
111
"Xpetra::StridedMapFactory::Build: constructor expects a full map (stridedBlockId == -1)."
);
112
113
std::vector<size_t> stridingInfo = map->getStridingData();
114
115
Teuchos::ArrayView<const GlobalOrdinal>
dofGids = map->getLocalElementList();
116
117
// determine nStridedOffset
118
size_t
nStridedOffset = 0;
119
for
(
int
j = 0; j < map->getStridedBlockId(); j++)
120
{
121
nStridedOffset += stridingInfo[ j ];
122
}
123
124
const
size_t
numMyBlockDofs = (stridingInfo[stridedBlockId] * map->getLocalNumElements()) / map->getFixedBlockSize();
125
126
std::vector<GlobalOrdinal> subBlockDofGids(numMyBlockDofs);
127
128
// TODO fill vector with dofs
129
LocalOrdinal ind = 0;
130
for
(
typename
Teuchos::ArrayView<const GlobalOrdinal>::iterator
it = dofGids.
begin
(); it != dofGids.
end
(); ++it)
131
{
132
if
(map->GID2StridingBlockId(*it) ==
Teuchos::as<size_t>
(stridedBlockId))
133
{
134
subBlockDofGids[ ind++ ] = *it;
135
}
136
}
137
138
const
Teuchos::ArrayView<const GlobalOrdinal>
subBlockDofGids_view(&subBlockDofGids[ 0 ], subBlockDofGids.size());
139
140
return
rcp
(
new
StridedMap
(map->lib(),
141
Teuchos::OrdinalTraits<global_size_t>::invalid
(),
142
subBlockDofGids_view,
143
map->getIndexBase(),
144
stridingInfo,
145
map->getComm(),
146
stridedBlockId));
147
}
148
149
150
template
<
class
LocalOrdinal,
class
GlobalOrdinal,
class
Node>
151
RCP<Xpetra::StridedMap<LocalOrdinal,GlobalOrdinal,Node>
>
152
StridedMapFactory<LocalOrdinal, GlobalOrdinal, Node>::
153
Build
(
const
StridedMap
& map)
154
{
155
XPETRA_MONITOR
(
"MapFactory::Build"
);
156
157
LocalOrdinal N = map.
getLocalNumElements
();
158
Teuchos::ArrayView<const GlobalOrdinal>
oldElements = map.
getLocalElementList
();
159
Teuchos::Array<GlobalOrdinal>
newElements(map.
getLocalNumElements
());
160
161
for
(LocalOrdinal i = 0; i < N; i++)
162
newElements[ i ] = oldElements[ i ];
163
164
std::vector<size_t> strData = map.
getStridingData
();
165
return
rcp
(
new
StridedMap
(map.
lib
(), map.
getGlobalNumElements
(), newElements, map.
getIndexBase
(), strData, map.
getComm
(), map.
getStridedBlockId
()));
166
}
167
168
169
template
<
class
LocalOrdinal,
class
GlobalOrdinal,
class
Node>
170
RCP<Xpetra::StridedMap<LocalOrdinal,GlobalOrdinal,Node>
>
171
StridedMapFactory<LocalOrdinal, GlobalOrdinal, Node>::
172
Build
(
UnderlyingLib
lib,
173
global_size_t
numGlobalElements,
174
const
Teuchos::ArrayView<const GlobalOrdinal>
& elementList,
175
GlobalOrdinal indexBase,
176
std::vector<size_t>& stridingInfo,
177
const
Teuchos::RCP
<
const
Teuchos::Comm<int>
>& comm,
178
LocalOrdinal stridedBlockId,
// FIXME (mfh 03 Sep 2014) This breaks if LocalOrdinal is unsigned
179
GlobalOrdinal
/* offset */
)
180
{
181
return
rcp
(
new
StridedMap
(lib, numGlobalElements, elementList, indexBase, stridingInfo, comm, stridedBlockId));
182
}
183
184
}
// namespace Xpetra
185
186
#endif
// XPETRA_STRIDEDMAPFACTORY_DEF_HPP
187
188
// TODO: removed unused methods
XPETRA_MONITOR
#define XPETRA_MONITOR(funcName)
Xpetra_Exceptions.hpp
Xpetra_StridedMapFactory_decl.hpp
Teuchos::ArrayView
Teuchos::ArrayView::end
iterator end() const
Teuchos::ArrayView::begin
iterator begin() const
Teuchos::ArrayView::iterator
pointer iterator
Teuchos::Array
Teuchos::Comm
Teuchos::RCP
Xpetra::Exceptions::RuntimeError
Exception throws to report errors in the internal logical of the program.
Definition
Xpetra_Exceptions.hpp:102
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:61
Xpetra::StridedMap
Class that stores a strided map.
Definition
Xpetra_StridedMap_decl.hpp:102
Xpetra::StridedMap::lib
UnderlyingLib lib() const
Get the library used by this object (Tpetra or Epetra?).
Definition
Xpetra_StridedMap_def.hpp:860
Xpetra::StridedMap::getGlobalNumElements
global_size_t getGlobalNumElements() const
Returns the number of elements in this Map.
Definition
Xpetra_StridedMap_def.hpp:630
Xpetra::StridedMap::getStridedBlockId
LocalOrdinal getStridedBlockId() const
Definition
Xpetra_StridedMap_def.hpp:469
Xpetra::StridedMap::getLocalNumElements
size_t getLocalNumElements() const
Returns the number of elements belonging to the calling node.
Definition
Xpetra_StridedMap_def.hpp:639
Xpetra::StridedMap::getStridingData
std::vector< size_t > getStridingData() const
Definition
Xpetra_StridedMap_def.hpp:437
Xpetra::StridedMap::getComm
Teuchos::RCP< const Teuchos::Comm< int > > getComm() const
Get the Comm object for this Map.
Definition
Xpetra_StridedMap_def.hpp:813
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:750
Xpetra::StridedMap::getIndexBase
GlobalOrdinal getIndexBase() const
Returns the index base for this Map.
Definition
Xpetra_StridedMap_def.hpp:648
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.hpp:89
Xpetra::global_size_t
size_t global_size_t
Global size_t object.
Definition
Xpetra_ConfigDefs.hpp:174
Xpetra::LocalGlobal
LocalGlobal
Definition
Xpetra_ConfigDefs.hpp:177
Xpetra::rcp
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Xpetra::UnderlyingLib
UnderlyingLib
Definition
Xpetra_Map_decl.hpp:77
Teuchos::OrdinalTraits::invalid
static T invalid()
sup
StridedMap
Xpetra_StridedMapFactory_def.hpp
Generated by
1.17.0