Xpetra
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
Xpetra_ExportFactory.hpp
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
#ifndef XPETRA_EXPORTFACTORY_HPP
47
#define XPETRA_EXPORTFACTORY_HPP
48
49
#include "
Xpetra_ConfigDefs.hpp
"
50
51
#include "
Xpetra_Export.hpp
"
52
53
#ifdef HAVE_XPETRA_TPETRA
54
#include "Xpetra_TpetraExport.hpp"
55
#endif
56
#ifdef HAVE_XPETRA_EPETRA
57
#include "
Xpetra_EpetraExport.hpp
"
58
#endif
59
60
#include "
Xpetra_Exceptions.hpp
"
61
62
namespace
Xpetra
{
63
64
template
<
class
LocalOrdinal,
65
class
GlobalOrdinal,
66
class
Node = Tpetra::KokkosClassic::DefaultNode::DefaultNodeType>
67
class
ExportFactory
{
68
private
:
70
ExportFactory
() {}
71
72
public
:
73
75
static
RCP<Export<LocalOrdinal, GlobalOrdinal, Node>
>
Build
(
const
RCP
<
const
Map<LocalOrdinal, GlobalOrdinal, Node>
> &source,
const
RCP
<
const
Map<LocalOrdinal, GlobalOrdinal, Node>
> &target) {
76
XPETRA_MONITOR
(
"ExportFactory::Build"
);
77
TEUCHOS_TEST_FOR_EXCEPTION
(source->lib() != target->lib(),
Xpetra::Exceptions::RuntimeError
,
""
);
78
79
#ifdef HAVE_XPETRA_TPETRA
80
if
(source->lib() ==
UseTpetra
)
81
return
rcp
(
new
TpetraExport<LocalOrdinal, GlobalOrdinal, Node>
(source, target));
82
#endif
83
84
XPETRA_FACTORY_ERROR_IF_EPETRA
(source->lib());
85
XPETRA_FACTORY_END
;
86
}
87
88
};
89
90
// we need the Epetra specialization only if Epetra is enabled
91
#if (defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES))
92
template
<>
93
class
ExportFactory
<int, int,
EpetraNode
> {
94
95
typedef
int
LocalOrdinal
;
96
typedef
int
GlobalOrdinal
;
97
typedef
EpetraNode
Node
;
98
99
private
:
101
ExportFactory
() {}
102
103
public
:
104
105
static
RCP<Export<LocalOrdinal, GlobalOrdinal, Node>
>
Build
(
const
RCP
<
const
Map<LocalOrdinal, GlobalOrdinal, Node>
> &source,
const
RCP
<
const
Map<LocalOrdinal, GlobalOrdinal, Node>
> &target) {
106
XPETRA_MONITOR
(
"ExportFactory::Build"
);
107
108
TEUCHOS_TEST_FOR_EXCEPTION
(source->lib() != target->lib(),
Xpetra::Exceptions::RuntimeError
,
""
);
109
110
#ifdef HAVE_XPETRA_TPETRA
111
if
(source->lib() ==
UseTpetra
)
112
return
rcp
(
new
TpetraExport<LocalOrdinal, GlobalOrdinal, Node>
(source, target));
113
#endif
114
115
if
(source->lib() ==
UseEpetra
)
116
return
rcp
(
new
EpetraExportT<int, Node>
(source, target));
117
118
XPETRA_FACTORY_END
;
119
}
120
121
};
122
#endif
123
124
// we need the Epetra specialization only if Epetra is enabled
125
#if (defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES))
126
template
<>
127
class
ExportFactory
<int, long long,
EpetraNode
> {
128
129
typedef
int
LocalOrdinal
;
130
typedef
long
long
GlobalOrdinal
;
131
typedef
EpetraNode
Node
;
132
133
private
:
135
ExportFactory
() {}
136
137
public
:
138
139
static
RCP<Export<LocalOrdinal, GlobalOrdinal, Node>
>
Build
(
const
RCP
<
const
Map<LocalOrdinal, GlobalOrdinal, Node>
> &source,
const
RCP
<
const
Map<LocalOrdinal, GlobalOrdinal, Node>
> &target) {
140
XPETRA_MONITOR
(
"ExportFactory::Build"
);
141
142
TEUCHOS_TEST_FOR_EXCEPTION
(source->lib() != target->lib(),
Xpetra::Exceptions::RuntimeError
,
""
);
143
144
#ifdef HAVE_XPETRA_TPETRA
145
if
(source->lib() ==
UseTpetra
)
146
return
rcp
(
new
TpetraExport<LocalOrdinal, GlobalOrdinal, Node>
(source, target));
147
#endif
148
149
if
(source->lib() ==
UseEpetra
)
150
return
rcp
(
new
EpetraExportT<long long, Node>
(source, target));
151
152
XPETRA_FACTORY_END
;
153
}
154
155
};
156
#endif
157
158
}
159
160
#define XPETRA_EXPORTFACTORY_SHORT
161
#endif
XPETRA_MONITOR
#define XPETRA_MONITOR(funcName)
Xpetra_ConfigDefs.hpp
Xpetra_EpetraExport.hpp
Xpetra_Exceptions.hpp
XPETRA_FACTORY_ERROR_IF_EPETRA
#define XPETRA_FACTORY_ERROR_IF_EPETRA(lib)
Definition
Xpetra_Exceptions.hpp:70
XPETRA_FACTORY_END
#define XPETRA_FACTORY_END
Definition
Xpetra_Exceptions.hpp:77
Xpetra_Export.hpp
Teuchos::RCP
Xpetra::EpetraExportT
Definition
Xpetra_EpetraExport.hpp:70
Xpetra::Exceptions::RuntimeError
Exception throws to report errors in the internal logical of the program.
Definition
Xpetra_Exceptions.hpp:102
Xpetra::ExportFactory< int, int, EpetraNode >::LocalOrdinal
int LocalOrdinal
Definition
Xpetra_ExportFactory.hpp:95
Xpetra::ExportFactory< int, int, EpetraNode >::GlobalOrdinal
int GlobalOrdinal
Definition
Xpetra_ExportFactory.hpp:96
Xpetra::ExportFactory< int, int, EpetraNode >::Node
EpetraNode Node
Definition
Xpetra_ExportFactory.hpp:97
Xpetra::ExportFactory< int, int, EpetraNode >::Build
static RCP< Export< LocalOrdinal, GlobalOrdinal, Node > > Build(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &source, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &target)
Definition
Xpetra_ExportFactory.hpp:105
Xpetra::ExportFactory< int, int, EpetraNode >::ExportFactory
ExportFactory()
Private constructor. This is a static class.
Definition
Xpetra_ExportFactory.hpp:101
Xpetra::ExportFactory< int, long long, EpetraNode >::GlobalOrdinal
long long GlobalOrdinal
Definition
Xpetra_ExportFactory.hpp:130
Xpetra::ExportFactory< int, long long, EpetraNode >::LocalOrdinal
int LocalOrdinal
Definition
Xpetra_ExportFactory.hpp:129
Xpetra::ExportFactory< int, long long, EpetraNode >::ExportFactory
ExportFactory()
Private constructor. This is a static class.
Definition
Xpetra_ExportFactory.hpp:135
Xpetra::ExportFactory< int, long long, EpetraNode >::Build
static RCP< Export< LocalOrdinal, GlobalOrdinal, Node > > Build(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &source, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &target)
Definition
Xpetra_ExportFactory.hpp:139
Xpetra::ExportFactory< int, long long, EpetraNode >::Node
EpetraNode Node
Definition
Xpetra_ExportFactory.hpp:131
Xpetra::ExportFactory::Build
static RCP< Export< LocalOrdinal, GlobalOrdinal, Node > > Build(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &source, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &target)
Constructor specifying the number of non-zeros for all rows.
Definition
Xpetra_ExportFactory.hpp:75
Xpetra::ExportFactory::ExportFactory
ExportFactory()
Private constructor. This is a static class.
Definition
Xpetra_ExportFactory.hpp:70
Xpetra::Map
Definition
Xpetra_Map_decl.hpp:89
Xpetra::TpetraExport
Definition
Xpetra_TpetraExport_decl.hpp:80
TEUCHOS_TEST_FOR_EXCEPTION
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Xpetra
Xpetra namespace
Definition
Xpetra_BlockedCrsMatrix.hpp:89
Xpetra::EpetraNode
Tpetra::KokkosCompat::KokkosSerialWrapperNode EpetraNode
Definition
Xpetra_Map_decl.hpp:71
Xpetra::rcp
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Xpetra::UseEpetra
@ UseEpetra
Definition
Xpetra_Map_decl.hpp:78
Xpetra::UseTpetra
@ UseTpetra
Definition
Xpetra_Map_decl.hpp:79
src
Export
Xpetra_ExportFactory.hpp
Generated by
1.17.0