Xpetra Version of the Day
Loading...
Searching...
No Matches
Xpetra_MultiVectorFactory_def.hpp
Go to the documentation of this file.
1// @HEADER
2// *****************************************************************************
3// Xpetra: A linear algebra interface package
4//
5// Copyright 2012 NTESS and the Xpetra contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10#ifndef XPETRA_MULTIVECTORFACTORY_DEF_HPP
11#define XPETRA_MULTIVECTORFACTORY_DEF_HPP
12
14
15#include "Xpetra_BlockedMultiVector.hpp"
16
17#include "Xpetra_BlockedMap.hpp"
18
19namespace Xpetra {
20
21template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
25 size_t NumVectors,
26 bool zeroOut) {
27 XPETRA_MONITOR("MultiVectorFactory::Build");
28
30 Teuchos::rcp_dynamic_cast<const BlockedMap<LocalOrdinal, GlobalOrdinal, Node>>(map);
31
32 if (!bmap.is_null()) {
33 return rcp(new Xpetra::BlockedMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>(bmap, NumVectors, zeroOut));
34 }
35
36#ifdef HAVE_XPETRA_TPETRA
37 if (map->lib() == UseTpetra) {
38 return rcp(new TpetraMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>(map, NumVectors, zeroOut));
39 }
40#endif
41
44 TEUCHOS_UNREACHABLE_RETURN(Teuchos::null);
45}
46
47template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
52 size_t NumVectors) {
53 XPETRA_MONITOR("MultiVectorFactory::Build");
54
55#ifdef HAVE_XPETRA_TPETRA
56 if (map->lib() == UseTpetra) {
57 return rcp(new TpetraMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>(map, ArrayOfPtrs, NumVectors));
58 }
59#endif
60
63}
64
65template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
69 Teuchos::DataAccess copyOrView) {
70 XPETRA_MONITOR("MultiVectorFactory::Build");
71
72#ifdef HAVE_XPETRA_TPETRA
73 if (source->getMap()->lib() == UseTpetra) {
74 return rcp(new TpetraMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>(*source, copyOrView));
75 }
76#endif
77
78 XPETRA_FACTORY_ERROR_IF_EPETRA(source->getMap()->lib());
80}
81
82} // namespace Xpetra
83
84#endif
#define XPETRA_MONITOR(funcName)
#define XPETRA_FACTORY_ERROR_IF_EPETRA(lib)
#define XPETRA_FACTORY_END
bool is_null() const
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.
#define TEUCHOS_UNREACHABLE_RETURN(dummyReturnVal)