Epetra Package Browser (Single Doxygen Collection) Development
Loading...
Searching...
No Matches
Epetra_DistObject.h
Go to the documentation of this file.
1/*
2//@HEADER
3// ************************************************************************
4//
5// Epetra: Linear Algebra Services Package
6// Copyright 2011 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 Michael A. Heroux (maherou@sandia.gov)
39//
40// ************************************************************************
41//@HEADER
42*/
43
44#ifndef EPETRA_DISTOBJECT_H
45#define EPETRA_DISTOBJECT_H
46#include "Epetra_ConfigDefs.h"
47#include "Epetra_Object.h"
49#include "Epetra_BlockMap.h"
50class Epetra_Comm;
51class Epetra_Import;
52class Epetra_Export;
55
57
79//==========================================================================
80class EPETRA_LIB_DLL_EXPORT Epetra_DistObject: public Epetra_Object, public virtual Epetra_SrcDistObject {
81
82 public:
84
85
99
114 Epetra_DistObject(const Epetra_BlockMap& Map, const char* const Label);
115
117
119
120
122 virtual ~Epetra_DistObject();
124
126
127
129
141 int Import(const Epetra_SrcDistObject& A, const Epetra_Import& Importer, Epetra_CombineMode CombineMode, const Epetra_OffsetIndex * Indexor = 0);
142
144
156 int Import(const Epetra_SrcDistObject& A, const Epetra_Export& Exporter, Epetra_CombineMode CombineMode, const Epetra_OffsetIndex * Indexor = 0);
157
159
171 int Export(const Epetra_SrcDistObject& A, const Epetra_Import & Importer, Epetra_CombineMode CombineMode, const Epetra_OffsetIndex * Indexor = 0);
172
174
186 int Export(const Epetra_SrcDistObject& A, const Epetra_Export& Exporter, Epetra_CombineMode CombineMode, const Epetra_OffsetIndex * Indexor = 0);
188
190
191
192 const Epetra_BlockMap& Map() const {return(Map_);};
193
195 const Epetra_Comm& Comm() const {return(*Comm_);};
196
198 bool DistributedGlobal() const {return(Map_.DistributedGlobal());};
200
202
203
204 virtual void Print(std::ostream& os) const;
206
207 protected:
208
209
211
212
213 virtual int DoTransfer(const Epetra_SrcDistObject& A,
214 Epetra_CombineMode CombineMode,
215 int NumSameIDs,
216 int NumPermuteIDs,
217 int NumRemoteIDs,
218 int NumExportIDs,
219 int* PermuteToLIDs,
220 int* PermuteFromLIDs,
221 int* RemoteLIDs,
222 int* ExportLIDs,
223 int& LenExports,
224 char*& Exports,
225 int& LenImports,
226 char*& Imports,
227 Epetra_Distributor& Distor,
228 bool DoReverse,
229 const Epetra_OffsetIndex * Indexor );
231
232 // These methods must be implemented by derived class
233
235
236
237 virtual int CheckSizes(const Epetra_SrcDistObject& Source) = 0;
239 virtual int CopyAndPermute(const Epetra_SrcDistObject& Source,
240 int NumSameIDs,
241 int NumPermuteIDs,
242 int * PermuteToLIDs,
243 int * PermuteFromLIDs,
244 const Epetra_OffsetIndex * Indexor,
245 Epetra_CombineMode CombineMode = Zero) = 0;
246
248 virtual int PackAndPrepare(const Epetra_SrcDistObject& Source,
249 int NumExportIDs,
250 int* ExportLIDs,
251 int& LenExports,
252 char*& Exports,
253 int& SizeOfPacket,
254 int* Sizes,
255 bool & VarSizes,
256 Epetra_Distributor& Distor) = 0;
257
259 virtual int UnpackAndCombine(const Epetra_SrcDistObject& Source,
260 int NumImportIDs,
261 int* ImportLIDs,
262 int LenImports,
263 char* Imports,
264 int& SizeOfPacket,
265 Epetra_Distributor& Distor,
266 Epetra_CombineMode CombineMode,
267 const Epetra_OffsetIndex * Indexor) = 0;
268
272 char* Exports_;
273 char* Imports_;
276 int *Sizes_;
277
278 private:
280
281};
282
283#endif /* EPETRA_DISTOBJECT_H */
Epetra_CombineMode
Epetra_BlockMap: A class for partitioning block element vectors and matrices.
Epetra_Comm: The Epetra Communication Abstract Base Class.
Definition Epetra_Comm.h:73
Epetra_DistObject: A class for constructing and using dense multi-vectors, vectors and matrices in pa...
const Epetra_BlockMap & Map() const
Returns the address of the Epetra_BlockMap for this multi-vector.
bool DistributedGlobal() const
Returns true if this multi-vector is distributed global, i.e., not local replicated.
virtual int CheckSizes(const Epetra_SrcDistObject &Source)=0
Allows the source and target (this) objects to be compared for compatibility, return nonzero if not.
virtual int UnpackAndCombine(const Epetra_SrcDistObject &Source, int NumImportIDs, int *ImportLIDs, int LenImports, char *Imports, int &SizeOfPacket, Epetra_Distributor &Distor, Epetra_CombineMode CombineMode, const Epetra_OffsetIndex *Indexor)=0
Perform any unpacking and combining after call to DoTransfer().
virtual int PackAndPrepare(const Epetra_SrcDistObject &Source, int NumExportIDs, int *ExportLIDs, int &LenExports, char *&Exports, int &SizeOfPacket, int *Sizes, bool &VarSizes, Epetra_Distributor &Distor)=0
Perform any packing or preparation required for call to DoTransfer().
virtual int CopyAndPermute(const Epetra_SrcDistObject &Source, int NumSameIDs, int NumPermuteIDs, int *PermuteToLIDs, int *PermuteFromLIDs, const Epetra_OffsetIndex *Indexor, Epetra_CombineMode CombineMode=Zero)=0
Perform ID copies and permutations that are on processor.
const Epetra_Comm & Comm() const
Returns the address of the Epetra_Comm for this multi-vector.
const Epetra_Comm * Comm_
Epetra_BlockMap Map_
Epetra_Distributor: The Epetra Gather/Scatter Setup Base Class.
Epetra_Export: This class builds an export object for efficient exporting of off-processor elements.
Epetra_Import: This class builds an import object for efficient importing of off-processor elements.
Epetra_Object: The base Epetra class.
virtual void Print(std::ostream &os) const
Print object to an output stream Print method.
Epetra_Object & operator=(const Epetra_Object &src)
Epetra_OffsetIndex: This class builds index for efficient mapping of data from one Epetra_CrsGraph ba...
Epetra_SrcDistObject: A class for supporting flexible source distributed objects for import/export op...