Xpetra
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
Xpetra_MultiVectorFactory_def.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_MULTIVECTORFACTORY_DEF_HPP
47
#define XPETRA_MULTIVECTORFACTORY_DEF_HPP
48
49
#include "
Xpetra_MultiVectorFactory_decl.hpp
"
50
51
#include "Xpetra_BlockedMultiVector.hpp"
52
53
#include "Xpetra_BlockedMap.hpp"
54
55
namespace
Xpetra
{
56
57
58
59
template
<
class
Scalar,
class
LocalOrdinal,
class
GlobalOrdinal,
class
Node>
60
Teuchos::RCP<MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>>
61
MultiVectorFactory<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
62
Build
(
const
Teuchos::RCP
<
const
Map<LocalOrdinal, GlobalOrdinal, Node>
>& map,
63
size_t
NumVectors,
64
bool
zeroOut)
65
{
66
XPETRA_MONITOR
(
"MultiVectorFactory::Build"
);
67
68
RCP<const BlockedMap<LocalOrdinal, GlobalOrdinal, Node>
> bmap =
69
Teuchos::rcp_dynamic_cast<const BlockedMap<LocalOrdinal, GlobalOrdinal, Node>>(map);
70
71
if
(!bmap.
is_null
())
72
{
73
return
rcp
(
new
Xpetra::BlockedMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>(bmap, NumVectors, zeroOut));
74
}
75
76
#ifdef HAVE_XPETRA_TPETRA
77
if
(map->lib() ==
UseTpetra
)
78
{
79
return
rcp
(
new
TpetraMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>
(map, NumVectors, zeroOut));
80
}
81
#endif
82
83
XPETRA_FACTORY_ERROR_IF_EPETRA
(map->lib());
84
XPETRA_FACTORY_END
;
85
}
86
87
88
template
<
class
Scalar,
class
LocalOrdinal,
class
GlobalOrdinal,
class
Node>
89
Teuchos::RCP<MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>
>
90
MultiVectorFactory<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
91
Build
(
const
Teuchos::RCP
<
const
Map<LocalOrdinal, GlobalOrdinal, Node>
>& map,
92
const
Teuchos::ArrayView
<
const
Teuchos::ArrayView<const Scalar>
>& ArrayOfPtrs,
93
size_t
NumVectors)
94
{
95
XPETRA_MONITOR
(
"MultiVectorFactory::Build"
);
96
97
#ifdef HAVE_XPETRA_TPETRA
98
if
(map->lib() ==
UseTpetra
)
99
{
100
return
rcp
(
new
TpetraMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>
(map, ArrayOfPtrs, NumVectors));
101
}
102
#endif
103
104
XPETRA_FACTORY_ERROR_IF_EPETRA
(map->lib());
105
XPETRA_FACTORY_END
;
106
}
107
108
109
template
<
class
Scalar,
class
LocalOrdinal,
class
GlobalOrdinal,
class
Node>
110
Teuchos::RCP<MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>
>
111
MultiVectorFactory<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
112
Build
(
const
Teuchos::RCP
<
const
MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node >
> &source,
113
Teuchos::DataAccess
copyOrView)
114
{
115
XPETRA_MONITOR
(
"MultiVectorFactory::Build"
);
116
117
#ifdef HAVE_XPETRA_TPETRA
118
if
(source->getMap()->lib() ==
UseTpetra
)
119
{
120
return
rcp
(
new
TpetraMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>
(*source, copyOrView));
121
}
122
#endif
123
124
XPETRA_FACTORY_ERROR_IF_EPETRA
(source->getMap()->lib());
125
XPETRA_FACTORY_END
;
126
}
127
128
129
}
// namespace Xpetra
130
131
#endif
XPETRA_MONITOR
#define XPETRA_MONITOR(funcName)
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_MultiVectorFactory_decl.hpp
Teuchos::ArrayView
Teuchos::RCP
Teuchos::RCP::is_null
bool is_null() const
Xpetra::Map
Definition
Xpetra_Map_decl.hpp:89
Xpetra::MultiVectorFactory::Build
static Teuchos::RCP< MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &map, size_t NumVectors, bool zeroOut=true)
Constructor specifying the number of non-zeros for all rows.
Definition
Xpetra_MultiVectorFactory_def.hpp:62
Xpetra::MultiVector
Definition
Xpetra_MultiVector_decl.hpp:80
Xpetra::TpetraMultiVector
Definition
Xpetra_TpetraMultiVector_decl.hpp:89
Teuchos::DataAccess
DataAccess
Xpetra
Xpetra namespace
Definition
Xpetra_BlockedCrsMatrix.hpp:89
Xpetra::rcp
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Xpetra::UseTpetra
@ UseTpetra
Definition
Xpetra_Map_decl.hpp:79
src
MultiVector
Xpetra_MultiVectorFactory_def.hpp
Generated by
1.17.0