Tpetra parallel linear algebra Version of the Day
Loading...
Searching...
No Matches
Tpetra_ImportExportData_decl.hpp
1// @HEADER
2// ***********************************************************************
3//
4// Tpetra: Templated Linear Algebra Services Package
5// Copyright (2008) Sandia Corporation
6//
7// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
8// the U.S. Government retains certain rights in this software.
9//
10// Redistribution and use in source and binary forms, with or without
11// modification, are permitted provided that the following conditions are
12// met:
13//
14// 1. Redistributions of source code must retain the above copyright
15// notice, this list of conditions and the following disclaimer.
16//
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// 3. Neither the name of the Corporation nor the names of the
22// contributors may be used to endorse or promote products derived from
23// this software without specific prior written permission.
24//
25// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36//
37// Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38//
39// ************************************************************************
40// @HEADER
41
42#ifndef TPETRA_IMPORTEXPORTDATA_DECL_HPP
43#define TPETRA_IMPORTEXPORTDATA_DECL_HPP
44
46#include "Tpetra_Export_fwd.hpp"
47#include "Tpetra_Import_fwd.hpp"
48#include "Tpetra_Map_fwd.hpp"
49#include "Tpetra_Distributor.hpp"
50#include "Teuchos_Array.hpp"
51#include "Teuchos_RCP.hpp"
52
53#ifndef DOXYGEN_SHOULD_SKIP_THIS
54namespace Teuchos {
55class ParameterList; // forward declaration
56} // namespace Teuchos
57#endif // DOXYGEN_SHOULD_SKIP_THIS
58
59namespace Tpetra {
60
80 template<class LocalOrdinal,
81 class GlobalOrdinal,
82 class Node>
84 public:
85 typedef LocalOrdinal local_ordinal_type;
86 typedef GlobalOrdinal global_ordinal_type;
87 typedef Node node_type;
89
90 ImportExportData () = delete;
91
96 ImportExportData (const Teuchos::RCP<const map_type>& source,
97 const Teuchos::RCP<const map_type>& target);
98
104 ImportExportData (const Teuchos::RCP<const map_type>& source,
105 const Teuchos::RCP<const map_type>& target,
106 const Teuchos::RCP<Teuchos::FancyOStream>& out);
107
113 ImportExportData (const Teuchos::RCP<const map_type>& source,
114 const Teuchos::RCP<const map_type>& target,
115 const Teuchos::RCP<Teuchos::ParameterList>& plist);
116
123 ImportExportData (const Teuchos::RCP<const map_type>& source,
124 const Teuchos::RCP<const map_type>& target,
125 const Teuchos::RCP<Teuchos::FancyOStream>& out,
126 const Teuchos::RCP<Teuchos::ParameterList>& plist);
128 ~ImportExportData () = default;
129
135 Teuchos::RCP<ImportExportData<LocalOrdinal, GlobalOrdinal, Node> > reverseClone();
136
138 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > source_;
139
141 const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > target_;
142
144 Teuchos::RCP<Teuchos::FancyOStream> out_;
145
147 bool verbose_ = false;
148
149 using execution_space = typename Node::device_type::execution_space;
150 using memory_space =
151 ::Tpetra::Details::DefaultTypes::comm_buffer_memory_space<typename Node::device_type>;
152 using device_type = Kokkos::Device<execution_space, memory_space>;
153
165 Kokkos::DualView<LocalOrdinal*, device_type> permuteToLIDs_;
166
178 Kokkos::DualView<LocalOrdinal*, device_type> permuteFromLIDs_;
179
186 Kokkos::DualView<LocalOrdinal*, device_type> remoteLIDs_;
187
190
193
200 Kokkos::DualView<LocalOrdinal*, device_type> exportLIDs_;
201
203 Teuchos::Array<int> exportPIDs_;
204
218
226
244
245 private:
251 }; // class ImportExportData
252
253} // namespace Tpetra
254
255#endif // TPETRA_IMPORTEXPORTDATA_DECL_HPP
Forward declaration of Tpetra::Export.
Forward declaration of Tpetra::ImportExportData.
Forward declaration of Tpetra::Import.
Forward declaration of Tpetra::Map.
Sets up and executes a communication plan for a Tpetra DistObject.
Implementation detail of Import and Export.
Kokkos::DualView< LocalOrdinal *, device_type > permuteToLIDs_
Index of target Map LIDs to which to permute.
Teuchos::RCP< ImportExportData< LocalOrdinal, GlobalOrdinal, Node > > reverseClone()
Copy the data, but reverse the direction of the transfer as well as reversing the Distributor.
bool exportLIDsContiguous_
Whether the export LIDs are contiguous.
Distributor distributor_
Object that actually distributes (sends and receives) data.
const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > target_
Target Map of the Import or Export.
bool remoteLIDsContiguous_
Whether the remote LIDs are contiguous.
Kokkos::DualView< LocalOrdinal *, device_type > remoteLIDs_
"Incoming" indices.
bool verbose_
Whether to print verbose debugging output.
Kokkos::DualView< LocalOrdinal *, device_type > exportLIDs_
"Outgoing" local indices.
Teuchos::RCP< Teuchos::FancyOStream > out_
Output stream for verbose debugging output.
bool isLocallyComplete_
Is this Export or Import locally complete?
const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > source_
Source Map of the Import or Export.
size_t numSameIDs_
Number of initial identical indices.
Teuchos::Array< int > exportPIDs_
Ranks of the processes to which the source object sends data.
~ImportExportData()=default
Destructor.
Kokkos::DualView< LocalOrdinal *, device_type > permuteFromLIDs_
Index of source Map LIDs from which to permute.
A parallel distribution of indices over processes.
Namespace Tpetra contains the class and methods constituting the Tpetra library.