src
Utils
Xpetra_Utils.cpp
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
#include "
Xpetra_Utils.hpp
"
47
#include "
Xpetra_Exceptions.hpp
"
48
49
namespace
Xpetra
{
50
51
std::string
toString
(
Xpetra::UnderlyingLib
lib) {
52
if
(lib ==
Xpetra::UseTpetra
) {
53
return
"Tpetra"
;
54
}
else
if
(lib ==
Xpetra::UseEpetra
) {
55
return
"Epetra"
;
56
}
else
{
57
TEUCHOS_TEST_FOR_EXCEPTION
(
true
,
Xpetra::Exceptions::RuntimeError
,
"lib != UseTpetra && lib != UseEpetra"
);
58
}
59
}
60
61
#ifdef HAVE_XPETRA_TPETRA
62
63
Xpetra::LookupStatus
toXpetra
(
Tpetra::LookupStatus
ls) {
64
65
if
(ls ==
Tpetra::AllIDsPresent
)
66
return
Xpetra::AllIDsPresent
;
67
if
(ls ==
Tpetra::IDNotPresent
)
68
return
Xpetra::IDNotPresent
;
69
70
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Unknown LookupStatus"
);
71
72
}
73
74
Tpetra::ProfileType
toTpetra
(
Xpetra::ProfileType
pt) {
75
76
if
(pt ==
Xpetra::StaticProfile
)
77
return
Tpetra::StaticProfile
;
78
if
(pt ==
Xpetra::DynamicProfile
)
79
return
Tpetra::DynamicProfile
;
80
81
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Unknown ProfileType"
);
82
83
}
84
85
Tpetra::OptimizeOption
toTpetra
(
Xpetra::OptimizeOption
os) {
86
87
if
(os ==
Xpetra::DoOptimizeStorage
)
88
return
Tpetra::DoOptimizeStorage
;
89
if
(os ==
Xpetra::DoNotOptimizeStorage
)
90
return
Tpetra::DoNotOptimizeStorage
;
91
92
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Unknown OptimizeOption"
);
93
94
}
95
96
Tpetra::CombineMode
toTpetra
(
Xpetra::CombineMode
cm) {
97
98
if
(cm ==
Xpetra::ADD
)
99
return
Tpetra::ADD
;
100
101
if
(cm ==
Xpetra::INSERT
)
102
return
Tpetra::INSERT
;
103
104
if
(cm ==
Xpetra::ABSMAX
)
105
return
Tpetra::ABSMAX
;
106
107
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Cannot convert Xpetra::CombineMode to Tpetra::CombineMode: unsupported CombineMode."
);
108
109
}
110
111
Tpetra::LocalGlobal
toTpetra
(
LocalGlobal
lg) {
112
113
if
(lg ==
Xpetra::LocallyReplicated
)
114
return
Tpetra::LocallyReplicated
;
115
if
(lg ==
Xpetra::GloballyDistributed
)
116
return
Tpetra::GloballyDistributed
;
117
118
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Unknown LocalGlobal"
);
119
120
}
121
122
#endif // HAVE_XPETRA_TPETRA
123
124
#ifdef HAVE_XPETRA_EPETRA
125
126
Xpetra::LookupStatus
toXpetra
(
int
ls) {
127
// This function is used only to convert the return value of Epetra_BlockMap::RemoteIDList() and Epetra_DirectoryBase::GetDirectoryEntries().
128
// In the current implementation of Epetra (01/2012), these functions returns 0 (= success) or 1 (= a GID is not present on any processor).
129
130
if
(ls == 0)
131
return
Xpetra::AllIDsPresent
;
132
else
if
(ls == 1)
133
return
Xpetra::IDNotPresent
;
134
135
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Epetra returned the following error code: "
<< ls <<
". Xpetra do not know how to interpret this error code."
);
136
}
137
138
bool
toEpetra
(
Xpetra::ProfileType
pt) {
139
140
if
(pt ==
Xpetra::StaticProfile
)
141
return
true
;
142
if
(pt ==
Xpetra::DynamicProfile
)
143
return
false
;
144
145
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Unknown ProfileType"
);
146
}
147
148
bool
toEpetra
(
Xpetra::OptimizeOption
os) {
149
150
if
(os ==
Xpetra::DoOptimizeStorage
)
151
return
true
;
152
if
(os ==
Xpetra::DoNotOptimizeStorage
)
153
return
false
;
154
155
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Unknown OptimizeOption"
);
156
157
}
158
159
Epetra_CombineMode
toEpetra
(
Xpetra::CombineMode
cm) {
160
// Note: all the CombineMode are not supported.
161
// According to Chris B., the behavior in Tpetra is the same as Epetra but I prefer to limit my tests for now.
162
// See also the discussion of March 22 on the Tpetra developers mailing list.
163
164
if
(cm ==
Xpetra::ADD
)
165
return
Add
;
166
if
(cm ==
Xpetra::INSERT
)
167
return
Insert
;
168
if
(cm ==
Xpetra::ABSMAX
)
169
return
AbsMax
;
170
171
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Cannot convert Xpetra::CombineMode to Epetra_CombineMode: unsupported CombineMode."
);
172
173
}
174
175
#endif // HAVE_XPETRA_EPETRA
176
177
}
// namespace xpetra
Xpetra::LocalGlobal
LocalGlobal
Definition:
Xpetra_ConfigDefs.hpp:173
Xpetra
Xpetra namespace
Definition:
Xpetra_BlockedCrsMatrix.hpp:86
Add
Add
Xpetra::toTpetra
RCP< const Tpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > toTpetra(const RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > &graph)
Definition:
Xpetra_TpetraCrsGraph.hpp:338
Xpetra::DynamicProfile
Definition:
Xpetra_ConfigDefs.hpp:187
Xpetra::AllIDsPresent
Definition:
Xpetra_ConfigDefs.hpp:180
AbsMax
AbsMax
Xpetra::toXpetra
RCP< const CrsGraph< int, GlobalOrdinal, Node > > toXpetra(const Epetra_CrsGraph &g)
Definition:
Xpetra_EpetraCrsGraph.cpp:168
Xpetra_Utils.hpp
Xpetra::GloballyDistributed
Definition:
Xpetra_ConfigDefs.hpp:175
Xpetra::UseTpetra
Definition:
Xpetra_Map.hpp:83
Xpetra::CombineMode
CombineMode
Xpetra::Combine Mode enumerable type.
Definition:
Xpetra_ConfigDefs.hpp:214
Insert
Insert
Xpetra::toString
std::string toString(Xpetra::UnderlyingLib lib)
Convert a Xpetra::UnderlyingLib to a std::string.
Definition:
Xpetra_Utils.cpp:51
Xpetra::Exceptions::RuntimeError
Exception throws to report errors in the internal logical of the program.
Definition:
Xpetra_Exceptions.hpp:101
Xpetra::LocallyReplicated
Definition:
Xpetra_ConfigDefs.hpp:174
Xpetra::DoNotOptimizeStorage
Definition:
Xpetra_ConfigDefs.hpp:193
Xpetra::INSERT
Definition:
Xpetra_ConfigDefs.hpp:216
Xpetra::OptimizeOption
OptimizeOption
Definition:
Xpetra_ConfigDefs.hpp:191
Epetra_CombineMode
Epetra_CombineMode
Xpetra::ADD
Definition:
Xpetra_ConfigDefs.hpp:215
Xpetra::DoOptimizeStorage
Definition:
Xpetra_ConfigDefs.hpp:192
Xpetra::toEpetra
const Epetra_CrsGraph & toEpetra(const RCP< const CrsGraph< int, GlobalOrdinal, Node > > &graph)
Definition:
Xpetra_EpetraCrsGraph.cpp:57
Xpetra::ABSMAX
Definition:
Xpetra_ConfigDefs.hpp:217
Xpetra_Exceptions.hpp
Xpetra::UnderlyingLib
UnderlyingLib
Definition:
Xpetra_Map.hpp:81
Xpetra::UseEpetra
Definition:
Xpetra_Map.hpp:82
TEUCHOS_TEST_FOR_EXCEPTION
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Xpetra::LookupStatus
LookupStatus
Definition:
Xpetra_ConfigDefs.hpp:179
Xpetra::IDNotPresent
Definition:
Xpetra_ConfigDefs.hpp:181
Xpetra::ProfileType
ProfileType
Definition:
Xpetra_ConfigDefs.hpp:185
Xpetra::StaticProfile
Definition:
Xpetra_ConfigDefs.hpp:186
Generated by
1.8.16