Epetra Package Browser (Single Doxygen Collection)  Development
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Epetra_LongLongVector.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_LONGLONGVECTOR_H
45 #define EPETRA_LONGLONGVECTOR_H
46 
47 #include "Epetra_ConfigDefs.h"
48 #include "Epetra_DistObject.h"
49 #include "Epetra_BlockMap.h"
50 #include "Epetra_Distributor.h"
51 class Epetra_Map;
52 
53 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
54 
56 
125 //=========================================================================
126 class EPETRA_LIB_DLL_EXPORT Epetra_LongLongVector : public Epetra_DistObject {
127 
128  public:
129 
131 
132 
149  Epetra_LongLongVector(const Epetra_BlockMap& Map, bool zeroOut = true);
150 
152 
154 
156 
168  Epetra_LongLongVector(Epetra_DataAccess CV, const Epetra_BlockMap& Map, long long *V);
169 
171  virtual ~Epetra_LongLongVector ();
173 
174 
176 
177  int PutValue(long long Value);
180 
181 
183 
184 
185 
187 
193  int ExtractCopy(long long *V) const;
194 
196 
202  int ExtractView(long long **V) const;
204 
206 
207 
211  long long MaxValue();
212 
214 
217  long long MinValue();
218 
220 
222 
223 
225 
232 
234 
237  long long& operator [] (int index) { return Values_[index]; }
239 
242  const long long& operator [] (int index) const { return Values_[index]; }
244 
246 
247 
249  long long * Values() const {return(Values_);};
250 
252  int MyLength() const {return(Map().NumMyPoints());};
253 
255  long long GlobalLength64() const {return(Map().NumGlobalPoints64());};
257 
259 
260 
262  virtual void Print(std::ostream & os) const;
264  private:
265 
266  int AllocateForCopy();
267  int DoCopy(long long * V);
268  int AllocateForView();
269  int DoView(long long * V);
270 
271  // Routines to implement Epetra_DistObject virtual methods
272  int CheckSizes(const Epetra_SrcDistObject& A);
273 
274  int CopyAndPermute(const Epetra_SrcDistObject & Source,
275  int NumSameIDs,
276  int NumPermuteIDs,
277  int * PermuteToLIDs,
278  int * PermuteFromLIDs,
279  const Epetra_OffsetIndex * Indexor,
280  Epetra_CombineMode CombineMode = Zero);
281 
282  int PackAndPrepare(const Epetra_SrcDistObject & Source,
283  int NumExportIDs,
284  int * ExportLIDs,
285  int & LenExports,
286  char * & Exports,
287  int & SizeOfPacket,
288  int * Sizes,
289  bool& VarSizes,
290  Epetra_Distributor & Distor);
291 
292  int UnpackAndCombine(const Epetra_SrcDistObject & Source,
293  int NumImportIDs,
294  int * ImportLIDs,
295  int LenImports,
296  char * Imports,
297  int & SizeOfPacket,
298  Epetra_Distributor & Distor,
299  Epetra_CombineMode CombineMode,
300  const Epetra_OffsetIndex * Indexor);
301 
302  long long * Values_;
305 };
306 
307 #endif // EPETRA_NO_64BIT_GLOBAL_INDICES
308 
309 #endif /* EPETRA_LONGLONGVECTOR_H */
Epetra_Map: A class for partitioning vectors and matrices.
Definition: Epetra_Map.h:119
Epetra_LongLongVector: A class for constructing and using dense integer vectors on a parallel compute...
Epetra_Distributor: The Epetra Gather/Scatter Setup Base Class.
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.
Epetra_OffsetIndex: This class builds index for efficient mapping of data from one Epetra_CrsGraph ba...
virtual void Print(std::ostream &os) const
Print method.
virtual int CheckSizes(const Epetra_SrcDistObject &Source)=0
Allows the source and target (this) objects to be compared for compatibility, return nonzero if not...
int MyLength() const
Returns the local vector length on the calling processor of vectors in the multi-vector.
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().
Epetra_BlockMap: A class for partitioning block element vectors and matrices.
Epetra_DistObject & operator=(const Epetra_DistObject &src)
Epetra_CombineMode
long long GlobalLength64() const
Returns the global vector length of vectors in the multi-vector.
Epetra_SrcDistObject: A class for supporting flexible source distributed objects for import/export op...
Epetra_DataAccess
long long * Values() const
Returns a pointer to an array containing the values of this vector.
Epetra_DistObject: A class for constructing and using dense multi-vectors, vectors and matrices in pa...
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().
const Epetra_BlockMap & Map() const
Returns the address of the Epetra_BlockMap for this multi-vector.