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