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
#ifdef TPETRA_ENABLE_DEPRECATED_CODE
80
return
Tpetra::DynamicProfile
;
81
#else
82
return
Tpetra::StaticProfile
;
// Tpetra supports only StaticProfile
83
#endif // TPETRA_ENABLE_DEPRECATED_CODE
84
85
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Unknown ProfileType"
);
86
87
}
88
89
Tpetra::OptimizeOption
toTpetra
(
Xpetra::OptimizeOption
os) {
90
91
if
(os ==
Xpetra::DoOptimizeStorage
)
92
return
Tpetra::DoOptimizeStorage
;
93
if
(os ==
Xpetra::DoNotOptimizeStorage
)
94
return
Tpetra::DoNotOptimizeStorage
;
95
96
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Unknown OptimizeOption"
);
97
98
}
99
100
Tpetra::CombineMode
toTpetra
(
Xpetra::CombineMode
cm) {
101
102
if
(cm ==
Xpetra::ADD
)
103
return
Tpetra::ADD
;
104
105
if
(cm ==
Xpetra::INSERT
)
106
return
Tpetra::INSERT
;
107
108
if
(cm ==
Xpetra::ABSMAX
)
109
return
Tpetra::ABSMAX
;
110
111
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Cannot convert Xpetra::CombineMode to Tpetra::CombineMode: unsupported CombineMode."
);
112
113
}
114
115
Tpetra::LocalGlobal
toTpetra
(
LocalGlobal
lg) {
116
117
if
(lg ==
Xpetra::LocallyReplicated
)
118
return
Tpetra::LocallyReplicated
;
119
if
(lg ==
Xpetra::GloballyDistributed
)
120
return
Tpetra::GloballyDistributed
;
121
122
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Unknown LocalGlobal"
);
123
124
}
125
126
#endif // HAVE_XPETRA_TPETRA
127
128
#ifdef HAVE_XPETRA_EPETRA
129
130
Xpetra::LookupStatus
toXpetra
(
int
ls) {
131
// This function is used only to convert the return value of Epetra_BlockMap::RemoteIDList() and Epetra_DirectoryBase::GetDirectoryEntries().
132
// In the current implementation of Epetra (01/2012), these functions returns 0 (= success) or 1 (= a GID is not present on any processor).
133
134
if
(ls == 0)
135
return
Xpetra::AllIDsPresent
;
136
else
if
(ls == 1)
137
return
Xpetra::IDNotPresent
;
138
139
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."
);
140
}
141
142
bool
toEpetra
(
Xpetra::ProfileType
pt) {
143
144
if
(pt ==
Xpetra::StaticProfile
)
145
return
true
;
146
if
(pt ==
Xpetra::DynamicProfile
)
147
return
false
;
148
149
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Unknown ProfileType"
);
150
}
151
152
bool
toEpetra
(
Xpetra::OptimizeOption
os) {
153
154
if
(os ==
Xpetra::DoOptimizeStorage
)
155
return
true
;
156
if
(os ==
Xpetra::DoNotOptimizeStorage
)
157
return
false
;
158
159
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Unknown OptimizeOption"
);
160
161
}
162
163
Epetra_CombineMode
toEpetra
(
Xpetra::CombineMode
cm) {
164
// Note: all the CombineMode are not supported.
165
// According to Chris B., the behavior in Tpetra is the same as Epetra but I prefer to limit my tests for now.
166
// See also the discussion of March 22 on the Tpetra developers mailing list.
167
168
if
(cm ==
Xpetra::ADD
)
169
return
Add
;
170
if
(cm ==
Xpetra::INSERT
)
171
return
Insert
;
172
if
(cm ==
Xpetra::ABSMAX
)
173
return
AbsMax
;
174
175
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Cannot convert Xpetra::CombineMode to Epetra_CombineMode: unsupported CombineMode."
);
176
177
}
178
179
#endif // HAVE_XPETRA_EPETRA
180
181
}
// namespace xpetra
Xpetra::LocalGlobal
LocalGlobal
Definition:
Xpetra_ConfigDefs.hpp:177
Xpetra
Xpetra namespace
Definition:
Xpetra_BlockedCrsMatrix.hpp:88
Add
Add
Xpetra::toTpetra
RCP< const Tpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > toTpetra(const RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > &graph)
Definition:
Xpetra_TpetraCrsGraph_decl.hpp:378
Xpetra::DynamicProfile
@ DynamicProfile
Definition:
Xpetra_ConfigDefs.hpp:191
Xpetra::AllIDsPresent
@ AllIDsPresent
Definition:
Xpetra_ConfigDefs.hpp:184
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
@ GloballyDistributed
Definition:
Xpetra_ConfigDefs.hpp:179
Xpetra::UseTpetra
@ UseTpetra
Definition:
Xpetra_Map_decl.hpp:81
Xpetra::CombineMode
CombineMode
Xpetra::Combine Mode enumerable type.
Definition:
Xpetra_ConfigDefs.hpp:218
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:102
Xpetra::LocallyReplicated
@ LocallyReplicated
Definition:
Xpetra_ConfigDefs.hpp:178
Xpetra::DoNotOptimizeStorage
@ DoNotOptimizeStorage
Definition:
Xpetra_ConfigDefs.hpp:197
Xpetra::INSERT
@ INSERT
Definition:
Xpetra_ConfigDefs.hpp:220
Xpetra::OptimizeOption
OptimizeOption
Definition:
Xpetra_ConfigDefs.hpp:195
Epetra_CombineMode
Epetra_CombineMode
Xpetra::ADD
@ ADD
Definition:
Xpetra_ConfigDefs.hpp:219
Xpetra::DoOptimizeStorage
@ DoOptimizeStorage
Definition:
Xpetra_ConfigDefs.hpp:196
Xpetra::toEpetra
const Epetra_CrsGraph & toEpetra(const RCP< const CrsGraph< int, GlobalOrdinal, Node > > &graph)
Definition:
Xpetra_EpetraCrsGraph.cpp:57
Xpetra::ABSMAX
@ ABSMAX
Definition:
Xpetra_ConfigDefs.hpp:221
Xpetra_Exceptions.hpp
Xpetra::UnderlyingLib
UnderlyingLib
Definition:
Xpetra_Map_decl.hpp:79
Xpetra::UseEpetra
@ UseEpetra
Definition:
Xpetra_Map_decl.hpp:80
TEUCHOS_TEST_FOR_EXCEPTION
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Xpetra::LookupStatus
LookupStatus
Definition:
Xpetra_ConfigDefs.hpp:183
Xpetra::IDNotPresent
@ IDNotPresent
Definition:
Xpetra_ConfigDefs.hpp:185
Xpetra::ProfileType
ProfileType
Definition:
Xpetra_ConfigDefs.hpp:189
Xpetra::StaticProfile
@ StaticProfile
Definition:
Xpetra_ConfigDefs.hpp:190
Generated by
1.8.20