Xpetra
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
Xpetra_ImportFactory.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_IMPORTFACTORY_HPP
47
#define XPETRA_IMPORTFACTORY_HPP
48
49
#include "
Xpetra_ConfigDefs.hpp
"
50
51
#include "
Xpetra_Import.hpp
"
52
53
#ifdef HAVE_XPETRA_TPETRA
54
#include "Xpetra_TpetraImport.hpp"
55
#endif
56
#ifdef HAVE_XPETRA_EPETRA
57
#include "
Xpetra_EpetraImport.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
ImportFactory
{
68
private
:
70
ImportFactory
() {}
71
72
public
:
73
75
static
RCP<Import<LocalOrdinal, GlobalOrdinal, Node>
>
Build
(
const
RCP
<
const
Map<LocalOrdinal, GlobalOrdinal, Node>
> &source,
76
const
RCP
<
const
Map<LocalOrdinal, GlobalOrdinal, Node>
> &target,
77
const
Teuchos::RCP<Teuchos::ParameterList>
& plist = Teuchos::null) {
78
XPETRA_MONITOR
(
"ImportFactory::Build"
);
79
80
TEUCHOS_TEST_FOR_EXCEPTION
(source->lib() != target->lib(),
Xpetra::Exceptions::RuntimeError
,
""
);
81
82
#ifdef HAVE_XPETRA_TPETRA
83
if
(source->lib() ==
UseTpetra
)
84
return
rcp
(
new
TpetraImport<LocalOrdinal, GlobalOrdinal, Node>
(source, target, plist));
85
#endif
86
87
XPETRA_FACTORY_ERROR_IF_EPETRA
(source->lib());
88
XPETRA_FACTORY_END
;
89
}
90
91
};
92
93
// we need the Epetra specialization only if Epetra is enabled
94
#if (defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES))
95
96
// Specialization on LO=GO=int with serial node.
97
// Used for Epetra and Tpetra
98
// For any other node definition the general default implementation is used which allows Tpetra only
99
template
<>
100
class
ImportFactory
<int, int,
EpetraNode
> {
101
typedef
int
LocalOrdinal
;
102
typedef
int
GlobalOrdinal
;
103
typedef
EpetraNode
Node
;
104
105
private
:
107
ImportFactory
() {}
108
109
public
:
110
111
static
RCP<Import<LocalOrdinal, GlobalOrdinal, Node>
>
Build
(
const
RCP
<
const
Map<LocalOrdinal, GlobalOrdinal, Node>
> &source,
112
const
RCP
<
const
Map<LocalOrdinal, GlobalOrdinal, Node>
> &target,
113
const
Teuchos::RCP<Teuchos::ParameterList>
& plist = Teuchos::null) {
114
XPETRA_MONITOR
(
"ImportFactory::Build"
);
115
TEUCHOS_TEST_FOR_EXCEPTION
(source->lib() != target->lib(),
Xpetra::Exceptions::RuntimeError
,
""
);
116
117
#ifdef HAVE_XPETRA_TPETRA
118
if
(source->lib() ==
UseTpetra
)
119
return
rcp
(
new
TpetraImport<LocalOrdinal, GlobalOrdinal, Node>
(source, target,plist));
120
#endif
121
122
if
(source->lib() ==
UseEpetra
)
123
return
rcp
(
new
EpetraImportT<int,Node>
(source, target));
124
125
XPETRA_FACTORY_END
;
126
}
127
128
};
129
#endif
130
131
// we need the Epetra specialization only if Epetra is enabled
132
#if (defined(HAVE_XPETRA_EPETRA) && !defined(XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES))
133
template
<>
134
class
ImportFactory
<int, long long,
EpetraNode
> {
135
136
typedef
int
LocalOrdinal
;
137
typedef
long
long
GlobalOrdinal
;
138
typedef
EpetraNode
Node
;
139
140
private
:
142
ImportFactory
() {}
143
144
public
:
145
146
static
RCP<Import<LocalOrdinal, GlobalOrdinal, Node>
>
Build
(
const
RCP
<
const
Map<LocalOrdinal, GlobalOrdinal, Node>
> &source,
147
const
RCP
<
const
Map<LocalOrdinal, GlobalOrdinal, Node>
> &target,
148
const
Teuchos::RCP<Teuchos::ParameterList>
& plist = Teuchos::null) {
149
XPETRA_MONITOR
(
"ImportFactory::Build"
);
150
TEUCHOS_TEST_FOR_EXCEPTION
(source->lib() != target->lib(),
Xpetra::Exceptions::RuntimeError
,
""
);
151
152
#ifdef HAVE_XPETRA_TPETRA
153
if
(source->lib() ==
UseTpetra
)
154
return
rcp
(
new
TpetraImport<LocalOrdinal, GlobalOrdinal, Node>
(source, target, plist));
155
#endif
156
157
if
(source->lib() ==
UseEpetra
)
158
return
rcp
(
new
EpetraImportT<long long,Node>
(source, target));
159
160
XPETRA_FACTORY_END
;
161
}
162
163
};
164
#endif
165
}
166
167
#define XPETRA_IMPORTFACTORY_SHORT
168
#endif
XPETRA_MONITOR
#define XPETRA_MONITOR(funcName)
Xpetra_ConfigDefs.hpp
Xpetra_EpetraImport.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_Import.hpp
Teuchos::RCP
Xpetra::EpetraImportT
Definition
Xpetra_EpetraImport.hpp:68
Xpetra::Exceptions::RuntimeError
Exception throws to report errors in the internal logical of the program.
Definition
Xpetra_Exceptions.hpp:102
Xpetra::ImportFactory< int, int, EpetraNode >::LocalOrdinal
int LocalOrdinal
Definition
Xpetra_ImportFactory.hpp:101
Xpetra::ImportFactory< int, int, EpetraNode >::GlobalOrdinal
int GlobalOrdinal
Definition
Xpetra_ImportFactory.hpp:102
Xpetra::ImportFactory< int, int, EpetraNode >::Build
static RCP< Import< LocalOrdinal, GlobalOrdinal, Node > > Build(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &source, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &target, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Definition
Xpetra_ImportFactory.hpp:111
Xpetra::ImportFactory< int, int, EpetraNode >::ImportFactory
ImportFactory()
Private constructor. This is a static class.
Definition
Xpetra_ImportFactory.hpp:107
Xpetra::ImportFactory< int, int, EpetraNode >::Node
EpetraNode Node
Definition
Xpetra_ImportFactory.hpp:103
Xpetra::ImportFactory< int, long long, EpetraNode >::LocalOrdinal
int LocalOrdinal
Definition
Xpetra_ImportFactory.hpp:136
Xpetra::ImportFactory< int, long long, EpetraNode >::Build
static RCP< Import< LocalOrdinal, GlobalOrdinal, Node > > Build(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &source, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &target, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Definition
Xpetra_ImportFactory.hpp:146
Xpetra::ImportFactory< int, long long, EpetraNode >::ImportFactory
ImportFactory()
Private constructor. This is a static class.
Definition
Xpetra_ImportFactory.hpp:142
Xpetra::ImportFactory< int, long long, EpetraNode >::Node
EpetraNode Node
Definition
Xpetra_ImportFactory.hpp:138
Xpetra::ImportFactory< int, long long, EpetraNode >::GlobalOrdinal
long long GlobalOrdinal
Definition
Xpetra_ImportFactory.hpp:137
Xpetra::ImportFactory::ImportFactory
ImportFactory()
Private constructor. This is a static class.
Definition
Xpetra_ImportFactory.hpp:70
Xpetra::ImportFactory::Build
static RCP< Import< LocalOrdinal, GlobalOrdinal, Node > > Build(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &source, const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &target, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null)
Constructor specifying the number of non-zeros for all rows.
Definition
Xpetra_ImportFactory.hpp:75
Xpetra::Map
Definition
Xpetra_Map_decl.hpp:89
Xpetra::TpetraImport
Definition
Xpetra_TpetraImport_decl.hpp:66
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
Import
Xpetra_ImportFactory.hpp
Generated by
1.17.0