All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Xpetra_EpetraExport.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_EPETRAEXPORT_HPP
47 #define XPETRA_EPETRAEXPORT_HPP
48 
50 
51 #include "Xpetra_Export.hpp"
52 
53 #include "Xpetra_EpetraMap.hpp"//TMP
54 
55 #include "Epetra_Export.h"
56 
57 // Note: 'export' is a reserved keyword in C++. Do not use 'export' as a variable name.
58 
59 namespace Xpetra {
60 
61  // TODO: move that elsewhere
62  template<class GlobalOrdinal, class Node>
63  const Epetra_Export & toEpetra(const Export<int, GlobalOrdinal, Node> &);
64  template<class GlobalOrdinal, class Node>
65  RCP<const Export<int, GlobalOrdinal, Node> > toXpetra(const Epetra_Export *exp);
66 
67  template<class EpetraGlobalOrdinal, class Node>
69  : public Export<int, EpetraGlobalOrdinal, Node>
70  {
71 
72  typedef int LocalOrdinal;
73  typedef EpetraGlobalOrdinal GlobalOrdinal;
76 
77  public:
78 
80 
81 
84  : export_(rcp(new Epetra_Export(toEpetra<GlobalOrdinal,Node>(source), toEpetra<GlobalOrdinal,Node>(target)))) { } // Warning: Epetra(Target, Source) vs. Tpetra(Source, Target)
85 
87  // Definition not in cpp, so comment out
88  // EpetraExportT(const Teuchos::RCP< const map_type > &source, const Teuchos::RCP< const map_type > &target, const Teuchos::RCP< Teuchos::ParameterList > &plist);
89 
91  // Definition not in cpp, so comment out
92  // EpetraExportT(const Export< LocalOrdinal, GlobalOrdinal, Node > &rhs);
93 
96 
98 
100 
101 
103  size_t getNumSameIDs() const { XPETRA_MONITOR("EpetraExportT::getNumSameIDs"); return export_->NumSameIDs(); }
104 
106  size_t getNumPermuteIDs() const { XPETRA_MONITOR("EpetraExportT::getNumPermuteIDs"); return export_->NumPermuteIDs(); }
107 
110  XPETRA_MONITOR("EpetraExportT::getPermuteFromLIDs");
111  TEUCHOS_TEST_FOR_EXCEPTION(1, Xpetra::Exceptions::NotImplemented, "TODO EpetraExportT<EpetraGlobalOrdinal>::getExportImageIDs not implemented"); }
112 
113 
116  XPETRA_MONITOR("EpetraExportT::getPermuteToLIDs");
117  TEUCHOS_TEST_FOR_EXCEPTION(1, Xpetra::Exceptions::NotImplemented, "TODO EpetraExportT<EpetraGlobalOrdinal>::getPermuteToLIDs not implemented"); }
118 
119 
121  size_t getNumRemoteIDs() const {
122  XPETRA_MONITOR("EpetraExportT::getNumRemoteIDs");
123  TEUCHOS_TEST_FOR_EXCEPTION(1, Xpetra::Exceptions::NotImplemented, "TODO EpetraExportT<EpetraGlobalOrdinal>::getNumRemoteIDs not implemented"); }
124 
125 
128  XPETRA_MONITOR("EpetraExportT::getRemoteLIDs");
129  TEUCHOS_TEST_FOR_EXCEPTION(1, Xpetra::Exceptions::NotImplemented, "TODO EpetraExportT<EpetraGlobalOrdinal>::getRemoteLIDs not implemented"); }
130 
131 
133  size_t getNumExportIDs() const {
134  XPETRA_MONITOR("EpetraExportT::getNumExportIDs");
135  TEUCHOS_TEST_FOR_EXCEPTION(1, Xpetra::Exceptions::NotImplemented, "TODO EpetraExportT<EpetraGlobalOrdinal>::getNumExportIDs not implemented"); }
136 
137 
140  XPETRA_MONITOR("EpetraExportT::getExportLIDs");
141  TEUCHOS_TEST_FOR_EXCEPTION(1, Xpetra::Exceptions::NotImplemented, "TODO EpetraExportT<EpetraGlobalOrdinal>::getExportLIDs not implemented"); }
142 
143 
145  ArrayView< const int > getExportPIDs() const { XPETRA_MONITOR("EpetraExportT::getExportImageIDs"); return ArrayView<const int> (export_->ExportPIDs(),export_->NumExportIDs()); }
146 
148  Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getSourceMap() const { XPETRA_MONITOR("EpetraExportT::getSourceMap"); return toXpetra<GlobalOrdinal, Node>(export_->SourceMap()); }
149 
151  Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getTargetMap() const { XPETRA_MONITOR("EpetraExportT::getTargetMap"); return toXpetra<GlobalOrdinal, Node>(export_->TargetMap()); }
152 
154 
156 
157 
159  void print(std::ostream &os) const { XPETRA_MONITOR("EpetraExportT::"); export_->Print(os); }
160 
162 
164 
165 
168 
171 
173 
174  private:
175 
177 
178  }; // EpetraExportT class
179 
180 } // Xpetra namespace
181 
182 #endif // XPETRA_EPETRAEXPORT_HPP
const Epetra_BlockMap & TargetMap() const
const Epetra_BlockMap & SourceMap() const
int NumPermuteIDs() const
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
int NumSameIDs() const
const Epetra_CrsGraph & toEpetra(const RCP< const CrsGraph< int, GlobalOrdinal, Node > > &graph)
ArrayView< const LocalOrdinal > getPermuteToLIDs() const
List of local IDs in the target Map that are permuted.
size_t getNumSameIDs() const
Number of initial identical IDs.
void print(std::ostream &os) const
Print the Export&#39;s data to the given output stream.
ArrayView< const LocalOrdinal > getPermuteFromLIDs() const
List of local IDs in the source Map that are permuted.
virtual void Print(std::ostream &os) const
size_t getNumPermuteIDs() const
Number of IDs to permute but not to communicate.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
RCP< const Epetra_Export > getEpetra_Export() const
Get the underlying Epetra export.
ArrayView< const LocalOrdinal > getRemoteLIDs() const
List of entries in the target Map to receive from other processes.
EpetraExportT(const Teuchos::RCP< const map_type > &source, const Teuchos::RCP< const map_type > &target)
Construct a Export object from the source and target Map.
int * ExportPIDs() const
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getTargetMap() const
The target Map used to construct this Export.
RCP< const Epetra_Export > export_
size_t getNumRemoteIDs() const
Number of entries not on the calling process.
ArrayView< const LocalOrdinal > getExportLIDs() const
List of entries in the source Map that will be sent to other processes.
Exception throws when you call an unimplemented method of Xpetra.
EpetraGlobalOrdinal GlobalOrdinal
int NumExportIDs() const
ArrayView< const int > getExportPIDs() const
List of processes to which entries will be sent.
RCP< const CrsGraph< int, GlobalOrdinal, Node > > toXpetra(const Epetra_CrsGraph &g)
size_t getNumExportIDs() const
Number of entries that must be sent by the calling process to other processes.
#define XPETRA_MONITOR(funcName)
EpetraExportT(const RCP< const Epetra_Export > &exp)
EpetraExportT constructor to wrap a Epetra_Export object.
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getSourceMap() const
The source Map used to construct this Export.
Map< LocalOrdinal, GlobalOrdinal, Node > map_type
The specialization of Map used by this class.