Xpetra
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
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::OptimizeOption
toTpetra
(
Xpetra::OptimizeOption
os) {
75
76
if
(os ==
Xpetra::DoOptimizeStorage
)
77
return
Tpetra::DoOptimizeStorage;
78
if
(os ==
Xpetra::DoNotOptimizeStorage
)
79
return
Tpetra::DoNotOptimizeStorage;
80
81
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Unknown OptimizeOption"
);
82
83
}
84
85
Tpetra::CombineMode
toTpetra
(
Xpetra::CombineMode
cm) {
86
87
if
(cm ==
Xpetra::ADD
)
88
return
Tpetra::ADD;
89
90
if
(cm ==
Xpetra::INSERT
)
91
return
Tpetra::INSERT;
92
93
if
(cm ==
Xpetra::ABSMAX
)
94
return
Tpetra::ABSMAX;
95
96
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Cannot convert Xpetra::CombineMode to Tpetra::CombineMode: unsupported CombineMode."
);
97
98
}
99
100
Tpetra::LocalGlobal
toTpetra
(
LocalGlobal
lg) {
101
102
if
(lg ==
Xpetra::LocallyReplicated
)
103
return
Tpetra::LocallyReplicated;
104
if
(lg ==
Xpetra::GloballyDistributed
)
105
return
Tpetra::GloballyDistributed;
106
107
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Unknown LocalGlobal"
);
108
109
}
110
111
#endif
// HAVE_XPETRA_TPETRA
112
113
#ifdef HAVE_XPETRA_EPETRA
114
115
Xpetra::LookupStatus
toXpetra
(
int
ls) {
116
// This function is used only to convert the return value of Epetra_BlockMap::RemoteIDList() and Epetra_DirectoryBase::GetDirectoryEntries().
117
// In the current implementation of Epetra (01/2012), these functions returns 0 (= success) or 1 (= a GID is not present on any processor).
118
119
if
(ls == 0)
120
return
Xpetra::AllIDsPresent
;
121
else
if
(ls == 1)
122
return
Xpetra::IDNotPresent
;
123
124
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."
);
125
}
126
127
bool
toEpetra
(
Xpetra::OptimizeOption
os) {
128
129
if
(os ==
Xpetra::DoOptimizeStorage
)
130
return
true
;
131
if
(os ==
Xpetra::DoNotOptimizeStorage
)
132
return
false
;
133
134
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Unknown OptimizeOption"
);
135
136
}
137
138
Epetra_CombineMode
toEpetra
(
Xpetra::CombineMode
cm) {
139
// Note: all the CombineMode are not supported.
140
// According to Chris B., the behavior in Tpetra is the same as Epetra but I prefer to limit my tests for now.
141
// See also the discussion of March 22 on the Tpetra developers mailing list.
142
143
if
(cm ==
Xpetra::ADD
)
144
return
Add
;
145
if
(cm ==
Xpetra::INSERT
)
146
return
Insert
;
147
if
(cm ==
Xpetra::ABSMAX
)
148
return
AbsMax
;
149
150
TEUCHOS_TEST_FOR_EXCEPTION
(1,
Xpetra::Exceptions::RuntimeError
,
"Cannot convert Xpetra::CombineMode to Epetra_CombineMode: unsupported CombineMode."
);
151
152
}
153
154
#endif
// HAVE_XPETRA_EPETRA
155
156
}
// namespace xpetra
Epetra_CombineMode
Epetra_CombineMode
Insert
Insert
Add
Add
AbsMax
AbsMax
Xpetra_Exceptions.hpp
Xpetra_Utils.hpp
Xpetra::Exceptions::RuntimeError
Exception throws to report errors in the internal logical of the program.
Definition
Xpetra_Exceptions.hpp:102
TEUCHOS_TEST_FOR_EXCEPTION
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Xpetra
Xpetra namespace
Definition
Xpetra_BlockedCrsMatrix.hpp:89
Xpetra::toEpetra
const Epetra_CrsGraph & toEpetra(const RCP< const CrsGraph< int, GlobalOrdinal, Node > > &graph)
Definition
Xpetra_EpetraCrsGraph.cpp:57
Xpetra::toXpetra
RCP< const CrsGraph< int, GlobalOrdinal, Node > > toXpetra(const Epetra_CrsGraph &g)
Definition
Xpetra_EpetraCrsGraph.cpp:65
Xpetra::LocalGlobal
LocalGlobal
Definition
Xpetra_ConfigDefs.hpp:177
Xpetra::LocallyReplicated
@ LocallyReplicated
Definition
Xpetra_ConfigDefs.hpp:178
Xpetra::GloballyDistributed
@ GloballyDistributed
Definition
Xpetra_ConfigDefs.hpp:179
Xpetra::toTpetra
RCP< const Tpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > toTpetra(const RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > &graph)
Definition
Xpetra_TpetraCrsGraph_decl.hpp:417
Xpetra::UnderlyingLib
UnderlyingLib
Definition
Xpetra_Map_decl.hpp:77
Xpetra::UseEpetra
@ UseEpetra
Definition
Xpetra_Map_decl.hpp:78
Xpetra::UseTpetra
@ UseTpetra
Definition
Xpetra_Map_decl.hpp:79
Xpetra::LookupStatus
LookupStatus
Definition
Xpetra_ConfigDefs.hpp:183
Xpetra::AllIDsPresent
@ AllIDsPresent
Definition
Xpetra_ConfigDefs.hpp:184
Xpetra::IDNotPresent
@ IDNotPresent
Definition
Xpetra_ConfigDefs.hpp:185
Xpetra::OptimizeOption
OptimizeOption
Definition
Xpetra_ConfigDefs.hpp:189
Xpetra::DoOptimizeStorage
@ DoOptimizeStorage
Definition
Xpetra_ConfigDefs.hpp:190
Xpetra::DoNotOptimizeStorage
@ DoNotOptimizeStorage
Definition
Xpetra_ConfigDefs.hpp:191
Xpetra::toString
std::string toString(Xpetra::UnderlyingLib lib)
Convert a Xpetra::UnderlyingLib to a std::string.
Definition
Xpetra_Utils.cpp:51
Xpetra::CombineMode
CombineMode
Xpetra::Combine Mode enumerable type.
Definition
Xpetra_ConfigDefs.hpp:212
Xpetra::ADD
@ ADD
Definition
Xpetra_ConfigDefs.hpp:213
Xpetra::ABSMAX
@ ABSMAX
Definition
Xpetra_ConfigDefs.hpp:215
Xpetra::INSERT
@ INSERT
Definition
Xpetra_ConfigDefs.hpp:214
src
Utils
Xpetra_Utils.cpp
Generated by
1.17.0