Memosa-FVM  0.2
MultiField.h
Go to the documentation of this file.
1 // This file os part of FVM
2 // Copyright (c) 2012 FVM Authors
3 // See LICENSE file for terms.
4 
5 #ifndef _MULTIFIELD_H_
6 #define _MULTIFIELD_H_
7 
8 #include "misc.h"
9 #include "IContainer.h"
10 
11 #include "ArrayBase.h"
12 #include "StorageSite.h"
13 
15 class Field;
16 
17 class MultiField : public IContainer
18 {
19 public:
20 
21  typedef pair<const Field*, const StorageSite*> ArrayIndex;
22  typedef map<ArrayIndex,int> ArrayMap;
23  typedef vector<shared_ptr<ArrayBase> > ArrayList;
24  typedef vector<ArrayIndex> ArrayIndexList;
25  typedef pair<ArrayIndex,ArrayIndex> EntryIndex;
26  typedef map <EntryIndex,shared_ptr<ArrayBase> > GhostArrayMap;
27 
28  MultiField();
29 
30  virtual ~MultiField();
31  DEFINE_TYPENAME("MultiField");
32 
33  const ArrayBase& operator[](const ArrayIndex&) const;
35 
36  shared_ptr<ArrayBase> getArrayPtr(const ArrayIndex&);
37 
38  const ArrayBase& operator[](const int i) const {return *_arrays[i];}
39  ArrayBase& operator[](const int i) {return *_arrays[i];}
40 
41  bool hasArray(const ArrayIndex&) const;
42 
43  virtual void zero();
44  virtual void copyFrom(const IContainer& oc);
45 
46  virtual MultiField& operator+=(const MultiField& o);
47  virtual MultiField& operator-=(const MultiField& o);
48  virtual MultiField& operator/=(const MultiFieldReduction& alpha);
49  virtual MultiField& operator*=(const MultiFieldReduction& alpha);
50 
51  virtual shared_ptr<IContainer> newCopy() const;
52  virtual shared_ptr<IContainer> newClone() const;
53 
54  int getLength() const {return _length;}
55  const ArrayIndex getArrayIndex(const int i) const {return _arrayIndices[i];}
56 
57  void addArray(const ArrayIndex& aIndex, shared_ptr<ArrayBase> a);
58  void removeArray(const ArrayIndex& aIndex);
59 
60  MultiField& saxpy(const MultiFieldReduction& alphaMF, const MultiField& xMF);
61  MultiField& msaxpy(const MultiFieldReduction& alphaMF, const MultiField& xMF);
62 
63  shared_ptr<MultiFieldReduction> reduceSum() const;
64  shared_ptr<MultiFieldReduction> getOneNorm() const;
65 
66  shared_ptr<MultiFieldReduction> dotWith(const MultiField& ofield) const;
67 
68  const ArrayIndexList& getArrayIndices() const {return _arrayIndices;}
69 
70  shared_ptr<MultiField> extract(const ArrayIndexList& indices);
71  void merge(const MultiField& other);
72 
73  void syncScatter(const ArrayIndex& i);
74  void syncGather(const ArrayIndex& i);
75  void sync();
76 
77 private:
78 
79  void createSyncGatherArrays(const ArrayIndex& i);
80  void syncScatterLevel1(const ArrayIndex& i);
82  void syncGatherLevel1(const ArrayIndex& i);
83 
84  int get_request_size();
87 
88  void syncLevel1();
89 
90 
91  int _length;
97 };
98 
99 #endif
virtual shared_ptr< IContainer > newCopy() const
Definition: MultiField.cpp:101
int get_request_size_scatter_level1()
Definition: MultiField.cpp:641
ArrayMap _arrayMap
Definition: MultiField.h:94
void createSyncGatherArraysLevel1(const ArrayIndex &i)
Definition: MultiField.cpp:410
map< ArrayIndex, int > ArrayMap
Definition: MultiField.h:22
ArrayList _arrays
Definition: MultiField.h:92
MultiField & saxpy(const MultiFieldReduction &alphaMF, const MultiField &xMF)
Definition: MultiField.cpp:163
bool hasArray(const ArrayIndex &) const
Definition: MultiField.cpp:33
Definition: Field.h:14
void syncGather(const ArrayIndex &i)
Definition: MultiField.cpp:436
shared_ptr< ArrayBase > getArrayPtr(const ArrayIndex &)
Definition: MultiField.cpp:67
virtual void zero()
Definition: MultiField.cpp:115
DEFINE_TYPENAME("MultiField")
const ArrayBase & operator[](const int i) const
Definition: MultiField.h:38
shared_ptr< MultiField > extract(const ArrayIndexList &indices)
Definition: MultiField.cpp:304
MultiField & msaxpy(const MultiFieldReduction &alphaMF, const MultiField &xMF)
Definition: MultiField.cpp:177
GhostArrayMap _ghostArrays
Definition: MultiField.h:95
void syncScatterLevel1(const ArrayIndex &i)
Definition: MultiField.cpp:358
virtual MultiField & operator-=(const MultiField &o)
Definition: MultiField.cpp:151
virtual MultiField & operator/=(const MultiFieldReduction &alpha)
Definition: MultiField.cpp:192
shared_ptr< MultiFieldReduction > reduceSum() const
Definition: MultiField.cpp:249
void syncGatherLevel1(const ArrayIndex &i)
Definition: MultiField.cpp:461
pair< const Field *, const StorageSite * > ArrayIndex
Definition: MultiField.h:21
pair< ArrayIndex, ArrayIndex > EntryIndex
Definition: MultiField.h:25
map< EntryIndex, shared_ptr< ArrayBase > > GhostArrayMap
Definition: MultiField.h:26
vector< shared_ptr< ArrayBase > > ArrayList
Definition: MultiField.h:23
virtual void copyFrom(const IContainer &oc)
Definition: MultiField.cpp:127
GhostArrayMap _ghostArraysLevel1
Definition: MultiField.h:96
shared_ptr< MultiFieldReduction > getOneNorm() const
Definition: MultiField.cpp:216
void removeArray(const ArrayIndex &aIndex)
Definition: MultiField.cpp:280
int get_request_size()
Definition: MultiField.cpp:555
vector< ArrayIndex > ArrayIndexList
Definition: MultiField.h:24
int _length
Definition: MultiField.h:91
int getLength() const
Definition: MultiField.h:54
ArrayBase & operator[](const int i)
Definition: MultiField.h:39
ArrayIndexList _arrayIndices
Definition: MultiField.h:93
virtual MultiField & operator+=(const MultiField &o)
Definition: MultiField.cpp:139
const ArrayIndexList & getArrayIndices() const
Definition: MultiField.h:68
void syncLevel1()
Definition: MultiField.cpp:575
void merge(const MultiField &other)
Definition: MultiField.cpp:316
virtual ~MultiField()
Definition: MultiField.cpp:27
const ArrayBase & operator[](const ArrayIndex &) const
Definition: MultiField.cpp:39
int get_request_size_gather_level1()
Definition: MultiField.cpp:663
void addArray(const ArrayIndex &aIndex, shared_ptr< ArrayBase > a)
Definition: MultiField.cpp:270
void syncScatter(const ArrayIndex &i)
Definition: MultiField.cpp:325
const ArrayIndex getArrayIndex(const int i) const
Definition: MultiField.h:55
void createSyncGatherArrays(const ArrayIndex &i)
Definition: MultiField.cpp:386
shared_ptr< MultiFieldReduction > dotWith(const MultiField &ofield) const
Definition: MultiField.cpp:231
void sync()
Definition: MultiField.cpp:489
virtual MultiField & operator*=(const MultiFieldReduction &alpha)
Definition: MultiField.cpp:204
virtual shared_ptr< IContainer > newClone() const
Definition: MultiField.cpp:81