Tpetra parallel linear algebra  Version of the Day
Tpetra_Export_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_EXPORT_DECL_HPP
43 #define TPETRA_EXPORT_DECL_HPP
44 
45 #include <Tpetra_Details_Transfer.hpp>
46 
47 namespace Tpetra {
48  //
49  // Forward declarations. The "doxygen" bit simply tells Doxygen
50  // (our automatic documentation generation system) to skip forward
51  // declarations.
52  //
53 #ifndef DOXYGEN_SHOULD_SKIP_THIS
54  template<class LocalOrdinal, class GlobalOrdinal, class Node>
55  class ImportExportData;
56 
57  template<class LocalOrdinal, class GlobalOrdinal, class Node>
58  class Import;
59 #endif // DOXYGEN_SHOULD_SKIP_THIS
60 
121  template<class LocalOrdinal = Details::DefaultTypes::local_ordinal_type,
122  class GlobalOrdinal = Details::DefaultTypes::global_ordinal_type,
124  class Export:
125  public ::Tpetra::Details::Transfer<LocalOrdinal, GlobalOrdinal, Node>
126  {
127  private:
128  friend class Import<LocalOrdinal,GlobalOrdinal,Node>;
129  public:
131  typedef ::Tpetra::Map<LocalOrdinal, GlobalOrdinal, Node> map_type;
132 
134 
135 
143  Export (const Teuchos::RCP<const map_type>& source,
144  const Teuchos::RCP<const map_type>& target);
145 
156  Export (const Teuchos::RCP<const map_type>& source,
157  const Teuchos::RCP<const map_type>& target,
158  const RCP<Teuchos::FancyOStream>& out);
159 
172  Export (const Teuchos::RCP<const map_type>& source,
173  const Teuchos::RCP<const map_type>& target,
174  const Teuchos::RCP<Teuchos::ParameterList>& plist);
175 
191  Export (const Teuchos::RCP<const map_type>& source,
192  const Teuchos::RCP<const map_type>& target,
193  const RCP<Teuchos::FancyOStream>& out,
194  const Teuchos::RCP<Teuchos::ParameterList>& plist);
195 
201 
209 
211  virtual ~Export ();
212 
217  void setParameterList (const Teuchos::RCP<Teuchos::ParameterList>& plist);
218 
220 
222 
227  size_t getNumSameIDs() const;
228 
235  size_t getNumPermuteIDs() const;
236 
238  ArrayView<const LocalOrdinal> getPermuteFromLIDs() const;
239 
241  ArrayView<const LocalOrdinal> getPermuteToLIDs() const;
242 
244  size_t getNumRemoteIDs() const;
245 
247  ArrayView<const LocalOrdinal> getRemoteLIDs() const;
248 
250  size_t getNumExportIDs() const;
251 
253  ArrayView<const LocalOrdinal> getExportLIDs() const;
254 
259  ArrayView<const int> getExportPIDs() const;
260 
262  Teuchos::RCP<const map_type> getSourceMap () const;
263 
265  Teuchos::RCP<const map_type> getTargetMap () const;
266 
268  Distributor & getDistributor() const;
269 
273 
275 
277 
293  virtual void print (std::ostream& os) const;
294 
296 
297  private:
299  RCP<ImportExportData<LocalOrdinal,GlobalOrdinal,Node> > ExportData_;
301  Teuchos::RCP<Teuchos::FancyOStream> out_;
303  bool debug_;
304 
306 
307 
308  //==============================================================================
309  // sets up numSameIDs_, numPermuteIDs_, and the export IDs
310  // these variables are already initialized to 0 by the ImportExportData ctr.
311  // also sets up permuteToLIDs_, permuteFromLIDs_, and exportLIDs_
312  void setupSamePermuteExport(Teuchos::Array<GlobalOrdinal> & exportGIDs);
313  void setupRemote(Teuchos::Array<GlobalOrdinal> & exportGIDs);
315  }; // class Export
316 
327  template <class LocalOrdinal, class GlobalOrdinal, class Node>
328  Teuchos::RCP<const Export<LocalOrdinal, GlobalOrdinal, Node> >
329  createExport (const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& src,
330  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& tgt)
331  {
332  if (src == tgt) {
333  return Teuchos::null;
334  }
335 #ifdef HAVE_TPETRA_DEBUG
336  TEUCHOS_TEST_FOR_EXCEPTION(
337  src == null || tgt == null, std::runtime_error,
338  "Tpetra::createExport(): neither source nor target map may be null:"
339  << std::endl << "source: " << src << std::endl << "target: " << tgt
340  << std::endl);
341 #endif // HAVE_TPETRA_DEBUG
342  return Teuchos::rcp (new Export<LocalOrdinal, GlobalOrdinal, Node> (src, tgt));
343  }
344 
345 } // namespace Tpetra
346 
347 #endif // TPETRA_EXPORT_DECL_HPP
Communication plan for data redistribution from a uniquely-owned to a (possibly) multiply-owned distr...
Teuchos::RCP< const map_type > getSourceMap() const
The source Map used to construct this Export.
ArrayView< const LocalOrdinal > getExportLIDs() const
List of entries in the source Map that will be sent to other processes.
Namespace Tpetra contains the class and methods constituting the Tpetra library.
Common base class of Import and Export.
ArrayView< const int > getExportPIDs() const
List of processes to which entries will be sent.
KokkosClassic::DefaultNode::DefaultNodeType node_type
Default value of Node template parameter.
virtual void print(std::ostream &os) const
Print the Export&#39;s data to the given output stream.
size_t getNumSameIDs() const
Number of initial identical IDs.
size_t getNumPermuteIDs() const
Number of IDs to permute but not to communicate.
ArrayView< const LocalOrdinal > getPermuteFromLIDs() const
List of local IDs in the source Map that are permuted.
int local_ordinal_type
Default value of LocalOrdinal template parameter.
ArrayView< const LocalOrdinal > getPermuteToLIDs() const
List of local IDs in the target Map that are permuted.
Export(const Teuchos::RCP< const map_type > &source, const Teuchos::RCP< const map_type > &target)
Construct a Export object from the source and target Map.
Export< LocalOrdinal, GlobalOrdinal, Node > & operator=(const Export< LocalOrdinal, GlobalOrdinal, Node > &rhs)
Assignment operator.
Teuchos::RCP< const Export< LocalOrdinal, GlobalOrdinal, Node > > createExport(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &src, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &tgt)
Non-member constructor for Export objects.
Communication plan for data redistribution from a (possibly) multiply-owned to a uniquely-owned distr...
size_t getNumExportIDs() const
Number of entries that must be sent by the calling process to other processes.
Sets up and executes a communication plan for a Tpetra DistObject.
size_t getNumRemoteIDs() const
Number of entries not on the calling process.
Teuchos::RCP< const map_type > getTargetMap() const
The target Map used to construct this Export.
Describes a parallel distribution of objects over processes.
::Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > map_type
The specialization of Map used by this class.
ArrayView< const LocalOrdinal > getRemoteLIDs() const
List of entries in the target Map to receive from other processes.
Distributor & getDistributor() const
The Distributor that this Export object uses to move data.
virtual ~Export()
Destructor.
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > &plist)
Set parameters.