42 #ifndef TPETRA_FEMULTIVECTOR_DEF_HPP
43 #define TPETRA_FEMULTIVECTOR_DEF_HPP
48 #include "Tpetra_Map.hpp"
49 #include "Tpetra_MultiVector.hpp"
50 #include "Tpetra_Import.hpp"
56 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
57 FEMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
58 FEMultiVector (
const Teuchos::RCP<const map_type>& map,
59 const Teuchos::RCP<
const Import<local_ordinal_type, global_ordinal_type, node_type>>& importer,
62 base_type (importer.is_null () ? map : importer->getTargetMap (),
64 activeMultiVector_ (Teuchos::rcp (new FEWhichActive (FE_ACTIVE_OWNED_PLUS_SHARED))),
67 const char tfecfFuncName[] =
"FEMultiVector constructor: ";
69 if (! importer_.is_null ()) {
74 TEUCHOS_TEST_FOR_EXCEPTION_CLASS_FUNC
75 (! importer_->getSourceMap ()->isSameAs (*map),
77 "If you provide a nonnull Import, then the input Map "
78 "must be the same as the input Import's source Map.");
82 const bool locallyFitted =
83 importer->getTargetMap ()->isLocallyFitted (* (importer->getSourceMap ()));
84 TEUCHOS_TEST_FOR_EXCEPTION_CLASS_FUNC
85 (! locallyFitted, std::runtime_error,
86 "If you provide a nonnull Import, then its target Map must be "
87 "locally fitted (see Map::isLocallyFitted documentation) to its "
91 using range_type = Kokkos::pair<size_t, size_t>;
92 auto dv = Kokkos::subview (this->view_,
93 range_type (0, map->getNodeNumElements ()),
96 inactiveMultiVector_ =
97 Teuchos::rcp (
new base_type (importer_->getSourceMap (), dv));
101 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
103 FEMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
108 if (*activeMultiVector_ == FE_ACTIVE_OWNED) {
109 switchActiveMultiVector ();
113 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
115 FEMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
118 const char tfecfFuncName[] =
"endFill: ";
120 if (*activeMultiVector_ == FE_ACTIVE_OWNED_PLUS_SHARED) {
122 switchActiveMultiVector ();
125 TEUCHOS_TEST_FOR_EXCEPTION_CLASS_FUNC
126 (
true, std::runtime_error,
"Owned+Shared MultiVector already active; "
127 "cannot call endFill.");
131 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
133 FEMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
139 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
141 FEMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
142 replaceMap (
const Teuchos::RCP<const map_type>& )
144 const char tfecfFuncName[] =
"replaceMap: ";
146 TEUCHOS_TEST_FOR_EXCEPTION_CLASS_FUNC
147 (
true, std::runtime_error,
"This method is not implemented.");
150 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
152 FEMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
155 if (! importer_.is_null () &&
156 *activeMultiVector_ == FE_ACTIVE_OWNED_PLUS_SHARED) {
157 inactiveMultiVector_->doExport (*
this, *importer_, CM);
161 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
163 FEMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
166 if (! importer_.is_null () &&
167 *activeMultiVector_ == FE_ACTIVE_OWNED) {
168 inactiveMultiVector_->doImport (*
this, *importer_, CM);
172 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
174 FEMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>::
175 switchActiveMultiVector ()
177 if (*activeMultiVector_ == FE_ACTIVE_OWNED_PLUS_SHARED) {
178 *activeMultiVector_ = FE_ACTIVE_OWNED;
181 *activeMultiVector_ = FE_ACTIVE_OWNED_PLUS_SHARED;
184 if (importer_.is_null ()) {
189 this->swap (*inactiveMultiVector_);
200 #define TPETRA_FEMULTIVECTOR_INSTANT(SCALAR,LO,GO,NODE) \
201 template class FEMultiVector< SCALAR , LO , GO , NODE >;
Declaration of Tpetra::Details::Behavior, a class that describes Tpetra's behavior.
static bool debug()
Whether Tpetra is in debug mode.
Namespace Tpetra contains the class and methods constituting the Tpetra library.
CombineMode
Rule for combining data in an Import or Export.
@ ADD
Sum new values into existing values.