Xpetra
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
Xpetra_EpetraIntMultiVector.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_EpetraIntMultiVector.hpp
"
47
#include "
Xpetra_EpetraImport.hpp
"
48
#include "
Xpetra_EpetraExport.hpp
"
49
50
namespace
Xpetra
{
51
52
53
// TODO: move that elsewhere
54
template
<
class
GlobalOrdinal,
class
Node>
55
Epetra_IntMultiVector
&
toEpetra
(
MultiVector<int, int, GlobalOrdinal,Node>
&x) {
56
XPETRA_DYNAMIC_CAST
(
EpetraIntMultiVectorT<GlobalOrdinal XPETRA_COMMA Node>
, x, tX,
"toEpetra"
);
57
return
*tX.getEpetra_IntMultiVector();
58
}
59
60
template
<
class
GlobalOrdinal,
class
Node>
61
const
Epetra_IntMultiVector
&
toEpetra
(
const
MultiVector<int, int, GlobalOrdinal, Node>
&x) {
62
XPETRA_DYNAMIC_CAST
(
const
EpetraIntMultiVectorT<GlobalOrdinal XPETRA_COMMA Node>
, x, tX,
"toEpetra"
);
63
return
*tX.getEpetra_IntMultiVector();
64
}
65
//
66
67
#ifndef XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES
68
#ifdef HAVE_XPETRA_TPETRA
69
#include "TpetraCore_config.h"
70
#if ((defined(EPETRA_HAVE_OMP) && !defined(HAVE_TPETRA_INST_OPENMP)) || \
71
(!defined(EPETRA_HAVE_OMP) && !defined(HAVE_TPETRA_INST_SERIAL)))
72
template
class
EpetraIntMultiVectorT<int, Xpetra::EpetraNode >;
73
template
Epetra_IntMultiVector
&
toEpetra<int,Xpetra::EpetraNode >
(
MultiVector<int, int, int, Xpetra::EpetraNode>
&);
74
template
const
Epetra_IntMultiVector
&
toEpetra<int, Xpetra::EpetraNode >
(
const
MultiVector<int, int, int, Xpetra::EpetraNode>
&);
75
#endif
76
#ifdef HAVE_TPETRA_INST_SERIAL
77
template
class
EpetraIntMultiVectorT<int, Tpetra::KokkosCompat::KokkosSerialWrapperNode >
;
78
template
Epetra_IntMultiVector
&
toEpetra<int,Tpetra::KokkosCompat::KokkosSerialWrapperNode >
(
MultiVector<int, int, int, Tpetra::KokkosCompat::KokkosSerialWrapperNode>
&);
79
template
const
Epetra_IntMultiVector
&
toEpetra<int, Tpetra::KokkosCompat::KokkosSerialWrapperNode >
(
const
MultiVector<int, int, int, Tpetra::KokkosCompat::KokkosSerialWrapperNode>
&);
80
#endif
81
#ifdef HAVE_TPETRA_INST_PTHREAD
82
template
class
EpetraIntMultiVectorT<int, Tpetra::KokkosCompat::KokkosThreadsWrapperNode>
;
83
template
Epetra_IntMultiVector
&
toEpetra<int,Tpetra::KokkosCompat::KokkosThreadsWrapperNode >
(
MultiVector<int, int, int, Tpetra::KokkosCompat::KokkosThreadsWrapperNode>
&);
84
template
const
Epetra_IntMultiVector
&
toEpetra<int, Tpetra::KokkosCompat::KokkosThreadsWrapperNode >
(
const
MultiVector<int, int, int, Tpetra::KokkosCompat::KokkosThreadsWrapperNode>
&);
85
#endif
86
#ifdef HAVE_TPETRA_INST_OPENMP
87
template
class
EpetraIntMultiVectorT<int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode >
;
88
template
Epetra_IntMultiVector
&
toEpetra<int,Tpetra::KokkosCompat::KokkosOpenMPWrapperNode >
(
MultiVector<int, int, int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>
&);
89
template
const
Epetra_IntMultiVector
&
toEpetra<int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode >
(
const
MultiVector<int, int, int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>
&);
90
#endif
91
#ifdef HAVE_TPETRA_INST_CUDA
92
typedef
Tpetra::KokkosCompat::KokkosCudaWrapperNode default_node_type;
93
template
class
EpetraIntMultiVectorT<int, default_node_type >
;
94
template
Epetra_IntMultiVector
&
toEpetra<int,default_node_type >
(
MultiVector<int, int, int, default_node_type>
&);
95
template
const
Epetra_IntMultiVector
&
toEpetra<int,default_node_type >
(
const
MultiVector<int, int, int, default_node_type>
&);
96
#endif
97
#ifdef HAVE_TPETRA_INST_HIP
98
typedef
Tpetra::KokkosCompat::KokkosHIPWrapperNode default_node_type;
99
template
class
EpetraIntMultiVectorT<int, default_node_type >
;
100
template
Epetra_IntMultiVector
&
toEpetra<int,default_node_type >
(
MultiVector<int, int, int, default_node_type>
&);
101
template
const
Epetra_IntMultiVector
&
toEpetra<int,default_node_type >
(
const
MultiVector<int, int, int, default_node_type>
&);
102
#endif
103
#else
104
// Tpetra is disabled and Kokkos not available: use dummy node type
105
typedef
Xpetra::EpetraNode
default_node_type;
106
template
class
EpetraIntMultiVectorT<int, default_node_type >
;
107
template
Epetra_IntMultiVector
&
toEpetra<int,default_node_type >
(
MultiVector<int, int, int, default_node_type>
&);
108
template
const
Epetra_IntMultiVector
&
toEpetra<int,default_node_type >
(
const
MultiVector<int, int, int, default_node_type>
&);
109
#endif
// HAVE_XPETRA_TPETRA
110
#endif
111
112
#ifndef XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES
113
#ifdef HAVE_XPETRA_TPETRA
114
#include "TpetraCore_config.h"
115
#if ((defined(EPETRA_HAVE_OMP) && !defined(HAVE_TPETRA_INST_OPENMP)) || \
116
(!defined(EPETRA_HAVE_OMP) && !defined(HAVE_TPETRA_INST_SERIAL)))
117
template
class
EpetraIntMultiVectorT<long long, Xpetra::EpetraNode >
;
118
template
Epetra_IntMultiVector
&
toEpetra<long long,Xpetra::EpetraNode >
(
MultiVector<int, int, long long, Xpetra::EpetraNode>
&);
119
template
const
Epetra_IntMultiVector
&
toEpetra<long long, Xpetra::EpetraNode >
(
const
MultiVector<int, int, long long, Xpetra::EpetraNode>
&);
120
#endif
121
#ifdef HAVE_TPETRA_INST_SERIAL
122
template
class
EpetraIntMultiVectorT<long long, Tpetra::KokkosCompat::KokkosSerialWrapperNode >
;
123
template
Epetra_IntMultiVector
&
toEpetra<long long,Tpetra::KokkosCompat::KokkosSerialWrapperNode >
(
MultiVector<int, int, long long, Tpetra::KokkosCompat::KokkosSerialWrapperNode>
&);
124
template
const
Epetra_IntMultiVector
&
toEpetra<long long, Tpetra::KokkosCompat::KokkosSerialWrapperNode >
(
const
MultiVector<int, int, long long, Tpetra::KokkosCompat::KokkosSerialWrapperNode>
&);
125
#endif
126
#ifdef HAVE_TPETRA_INST_PTHREAD
127
template
class
EpetraIntMultiVectorT<long long, Tpetra::KokkosCompat::KokkosThreadsWrapperNode>
;
128
template
Epetra_IntMultiVector
&
toEpetra<long long,Tpetra::KokkosCompat::KokkosThreadsWrapperNode >
(
MultiVector<int, int, long long, Tpetra::KokkosCompat::KokkosThreadsWrapperNode>
&);
129
template
const
Epetra_IntMultiVector
&
toEpetra<long long, Tpetra::KokkosCompat::KokkosThreadsWrapperNode >
(
const
MultiVector<int, int, long long, Tpetra::KokkosCompat::KokkosThreadsWrapperNode>
&);
130
#endif
131
#ifdef HAVE_TPETRA_INST_OPENMP
132
template
class
EpetraIntMultiVectorT<long long, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode >
;
133
template
Epetra_IntMultiVector
&
toEpetra<long long,Tpetra::KokkosCompat::KokkosOpenMPWrapperNode >
(
MultiVector<int, int, long long, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>
&);
134
template
const
Epetra_IntMultiVector
&
toEpetra<long long, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode >
(
const
MultiVector<int, int, long long, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode>
&);
135
#endif
136
#ifdef HAVE_TPETRA_INST_CUDA
137
typedef
Tpetra::KokkosCompat::KokkosCudaWrapperNode default_node_type;
138
template
class
EpetraIntMultiVectorT<long long, default_node_type >
;
139
template
Epetra_IntMultiVector
&
toEpetra<long long,default_node_type >
(
MultiVector<int, int, long long, default_node_type>
&);
140
template
const
Epetra_IntMultiVector
&
toEpetra<long long,default_node_type >
(
const
MultiVector<int, int, long long, default_node_type>
&);
141
#endif
142
#ifdef HAVE_TPETRA_INST_HIP
143
typedef
Tpetra::KokkosCompat::KokkosHIPWrapperNode default_node_type;
144
template
class
EpetraIntMultiVectorT<long long, default_node_type >
;
145
template
Epetra_IntMultiVector
&
toEpetra<long long,default_node_type >
(
MultiVector<int, int, long long, default_node_type>
&);
146
template
const
Epetra_IntMultiVector
&
toEpetra<long long,default_node_type >
(
const
MultiVector<int, int, long long, default_node_type>
&);
147
#endif
148
#else
149
// Tpetra is disabled and Kokkos not available: use dummy node type
150
typedef
Xpetra::EpetraNode
default_node_type;
151
template
class
EpetraIntMultiVectorT<long long, default_node_type >
;
152
template
Epetra_IntMultiVector
&
toEpetra<long long,default_node_type >
(
MultiVector<int, int, long long, default_node_type>
&);
153
template
const
Epetra_IntMultiVector
&
toEpetra<long long,default_node_type >
(
const
MultiVector<int, int, long long, default_node_type>
&);
154
#endif
// HAVE_XPETRA_TPETRA
155
#endif
156
157
}
// namespace Xpetra
Xpetra_EpetraExport.hpp
Xpetra_EpetraImport.hpp
Xpetra_EpetraIntMultiVector.hpp
XPETRA_DYNAMIC_CAST
#define XPETRA_DYNAMIC_CAST(type, obj, newObj, exceptionMsg)
Definition
Xpetra_Exceptions.hpp:58
Epetra_IntMultiVector
Xpetra::EpetraIntMultiVectorT
Definition
Xpetra_EpetraIntMultiVector.hpp:73
Xpetra::MultiVector
Definition
Xpetra_MultiVector_decl.hpp:80
Xpetra
Xpetra namespace
Definition
Xpetra_BlockedCrsMatrix.hpp:89
Xpetra::EpetraNode
Tpetra::KokkosCompat::KokkosSerialWrapperNode EpetraNode
Definition
Xpetra_Map_decl.hpp:71
Xpetra::toEpetra
const Epetra_CrsGraph & toEpetra(const RCP< const CrsGraph< int, GlobalOrdinal, Node > > &graph)
Definition
Xpetra_EpetraCrsGraph.cpp:57
Xpetra::toEpetra< long long, Xpetra::EpetraNode >
template const Epetra_CrsGraph & toEpetra< long long, Xpetra::EpetraNode >(const RCP< const CrsGraph< int, long long, Xpetra::EpetraNode > > &graph)
Xpetra::toEpetra< int, Xpetra::EpetraNode >
template const Epetra_CrsGraph & toEpetra< int, Xpetra::EpetraNode >(const RCP< const CrsGraph< int, int, Xpetra::EpetraNode > > &graph)
src
MultiVector
Xpetra_EpetraIntMultiVector.cpp
Generated by
1.17.0