ESyS-Particle  2.3.4
pi_storage.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2017 by The University of Queensland //
4 // Centre for Geoscience Computing //
5 // http://earth.uq.edu.au/centre-geoscience-computing //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.apache.org/licenses/LICENSE-2.0 //
10 // //
12 
13 #ifndef __PARALLEL_INTERACTION_STORAGE_H
14 #define __PARALLEL_INTERACTION_STORAGE_H
15 
16 //--- MPI includes ---
17 #include <mpi.h>
18 
19 //--- STL includes ---
20 #include <list>
21 #include <vector>
22 #include <iostream>
23 #include <stdexcept>
24 
25 using std::list;
26 using std::vector;
27 using std::pair;
28 
29 //--- Project includes ---
30 #include "Foundation/vec3.h"
31 #include "Foundation/quintuple.h"
32 #include "Foundation/triplet.h"
34 #include "tml/comm/comm.h"
35 
36 // forward declared class to avoid circular include
37 class AFieldSlave;
39 
45 {
46  protected:
48 
49  public:
52 
53  virtual void exchange()=0;
54  virtual void rebuild()=0;
55  virtual bool update()=0;
56  // virtual void tryInsert(const vector<int>&)=0;
57  virtual bool isIn(const vector<int>&)=0;
58  virtual void calcForces()=0;
59  virtual void calcHeatFrict() {}
60  virtual void calcHeatTrans() {}
61  virtual void setTimeStepSize(double dt)=0;
62  virtual void addExIG(AParallelInteractionStorage*){}; // do nothing
63  virtual AFieldSlave* generateNewScalarFieldSlave(TML_Comm*,const string&,int,int,int,int)=0;
64  virtual AFieldSlave* generateNewVectorFieldSlave(TML_Comm*,const string&,int,int,int,int)=0;
65  virtual AFieldSlave* generateNewScalarHistoryFieldSlave(TML_Comm*,const string&,int,int,int);
66  virtual void saveCheckPointData(std::ostream&)
67  {
68  throw std::runtime_error("saveCheckPointData not implemented in subclass.");
69  }
70 
71  virtual void loadCheckPointData(std::istream&)
72  {
73  throw std::runtime_error("loadCheckPointData not implemented in subclass.");
74  }
75 
76  virtual void saveSnapShotData(std::ostream&)
77  {
78  throw std::runtime_error(" saveSnapShotData not implemented in subclass.");
79  }
80 
81  virtual bool willSave(){ return false;};
82 };
83 
89 template <typename I>
91 {
92  public:
93  typedef I interaction_type;
94 
95  protected:
96  list<I> m_interactions;
97 
98  public:
101 
103  public:
104  typedef I Interaction;
105  typedef typename list<I>::iterator Iterator;
106 
108 
109  bool hasNext();
110 
111  Interaction &next();
112 
113  int getNumRemaining();
114 
115  protected:
116  bool isInner(const Iterator &it);
117 
118  private:
123  };
124 
126 
131 
133  template <typename P> vector<pair<Vec3,P> > forAllInnerInteractionsGetWithPos(P (I::*rdf)() const);
134  template <typename P> vector<pair<Raw2Data,P> > forAllInnerInteractionsGetRaw2(P (I::*rdf)() const);
135  template <typename P> vector<pair<DataWithID,P> > forAllInnerInteractionsGetDataWithID(P (I::*rdf)() const);
136  template <typename P> vector<pair<DataWithPosID,P> > forAllInnerInteractionsGetDataWithPosID(P (I::*rdf)() const);
137  template <typename P> void forAllInnerInteractionsGet(P&,typename P::value_type (I::*rdf)() const);
138 
140  template <typename P> vector<pair<Vec3,P> > forAllTaggedInnerInteractionsGetWithPos(P (I::*rdf)() const,int,int);
141  template <typename P> void forAllTaggedInnerInteractionsGet(P&,typename P::value_type (I::*rdf)() const,int,int);
142 
144  virtual AFieldSlave* generateNewScalarFieldSlave(TML_Comm*,const string&,int,int,int,int); // const ?
145  virtual AFieldSlave* generateNewVectorFieldSlave(TML_Comm*,const string&,int,int,int,int);
146 
147 };
148 
149 #include "pis/pi_storage.hpp"
150 
151 #endif //__PARALLEL_INTERACTION_STORAGE_H
TParallelInteractionStorage::generateNewScalarFieldSlave
virtual AFieldSlave * generateNewScalarFieldSlave(TML_Comm *, const string &, int, int, int, int)
Definition: pi_storage.hpp:281
TParallelInteractionStorage::~TParallelInteractionStorage
virtual ~TParallelInteractionStorage()
Definition: pi_storage.h:100
TParallelInteractionStorage::forAllInnerInteractionsGetRaw2
vector< pair< Raw2Data, P > > forAllInnerInteractionsGetRaw2(P(I::*rdf)() const)
AParallelInteractionStorage::rebuild
virtual void rebuild()=0
AParallelInteractionStorage::generateNewVectorFieldSlave
virtual AFieldSlave * generateNewVectorFieldSlave(TML_Comm *, const string &, int, int, int, int)=0
AParallelInteractionStorage::saveSnapShotData
virtual void saveSnapShotData(std::ostream &)
Definition: pi_storage.h:76
AParallelInteractionStorage::calcHeatTrans
virtual void calcHeatTrans()
Definition: pi_storage.h:60
TParallelInteractionStorage::forAllInnerInteractionsGetDataWithPosID
vector< pair< DataWithPosID, P > > forAllInnerInteractionsGetDataWithPosID(P(I::*rdf)() const)
TParallelInteractionStorage::InteractionIterator::Interaction
I Interaction
Definition: pi_storage.h:104
pi_storage.h
AParallelInteractionStorage::willSave
virtual bool willSave()
Definition: pi_storage.h:81
TParallelInteractionStorage::interaction_type
I interaction_type
Definition: pi_storage.h:93
TParallelInteractionStorage::InteractionIterator::getNumRemaining
int getNumRemaining()
Definition: pi_storage.hpp:69
TParallelInteractionStorage::InteractionIterator::next
Interaction & next()
Definition: pi_storage.hpp:57
AParallelInteractionStorage::exchange
virtual void exchange()=0
TParallelInteractionStorage::TParallelInteractionStorage
TParallelInteractionStorage(AParallelParticleArray *ppa)
Definition: pi_storage.h:99
TParallelInteractionStorage::InteractionIterator::m_it
Iterator m_it
Definition: pi_storage.h:120
AParallelInteractionStorage::~AParallelInteractionStorage
virtual ~AParallelInteractionStorage()
Definition: pi_storage.h:51
AParallelInteractionStorage::calcForces
virtual void calcForces()=0
TParallelInteractionStorage::InteractionIterator::m_ppa
AParallelParticleArray * m_ppa
Definition: pi_storage.h:122
TParallelInteractionStorage::DataWithID
esys::lsm::triplet< int, int, Vec3 > DataWithID
Definition: pi_storage.h:129
TParallelInteractionStorage::Raw2Data
esys::lsm::quintuple< Vec3, double, Vec3, double, Vec3 > Raw2Data
Definition: pi_storage.h:128
TParallelInteractionStorage::generateNewVectorFieldSlave
virtual AFieldSlave * generateNewVectorFieldSlave(TML_Comm *, const string &, int, int, int, int)
Definition: pi_storage.hpp:316
AParallelInteractionStorage
abstract base class for parallel interaction storage array
Definition: pi_storage.h:45
TParallelInteractionStorage::InteractionIterator::m_end
Iterator m_end
Definition: pi_storage.h:121
quintuple.h
TParallelInteractionStorage::forAllInnerInteractionsGetDataWithID
vector< pair< DataWithID, P > > forAllInnerInteractionsGetDataWithID(P(I::*rdf)() const)
pi_storage.hpp
AFieldSlave
Abstract base class for slave part of field.
Definition: FieldSlave.h:23
NULL
#define NULL
Definition: t_list.h:17
esys::lsm::triplet
Definition: triplet.h:24
TParallelInteractionStorage::InteractionIterator::Iterator
list< I >::iterator Iterator
Definition: pi_storage.h:105
AParallelParticleArray
abstract base class for parallel particle storage array
Definition: pp_array.h:42
AParallelInteractionStorage::generateNewScalarHistoryFieldSlave
virtual AFieldSlave * generateNewScalarHistoryFieldSlave(TML_Comm *, const string &, int, int, int)
Definition: pi_storage.cpp:29
AParallelInteractionStorage::calcHeatFrict
virtual void calcHeatFrict()
Definition: pi_storage.h:59
TParallelInteractionStorage::InteractionIterator::isInner
bool isInner(const Iterator &it)
Definition: pi_storage.hpp:23
AParallelInteractionStorage::addExIG
virtual void addExIG(AParallelInteractionStorage *)
Definition: pi_storage.h:62
triplet.h
TParallelInteractionStorage::m_interactions
list< I > m_interactions
Definition: pi_storage.h:96
comm.h
TParallelInteractionStorage
templated abstract base class for parallel interaction storage array. Adds the vector of interactions...
Definition: pi_storage.h:91
AParallelInteractionStorage::isIn
virtual bool isIn(const vector< int > &)=0
AParallelInteractionStorage::generateNewScalarFieldSlave
virtual AFieldSlave * generateNewScalarFieldSlave(TML_Comm *, const string &, int, int, int, int)=0
TML_Comm
abstract base class for communicator
Definition: comm.h:47
vec3.h
AParallelInteractionStorage::saveCheckPointData
virtual void saveCheckPointData(std::ostream &)
Definition: pi_storage.h:66
TParallelInteractionStorage::forAllTaggedInnerInteractionsGetWithPos
vector< pair< Vec3, P > > forAllTaggedInnerInteractionsGetWithPos(P(I::*rdf)() const, int, int)
Definition: pi_storage.hpp:231
AParallelInteractionStorage::setTimeStepSize
virtual void setTimeStepSize(double dt)=0
CheckPointable.h
TParallelInteractionStorage::forAllTaggedInnerInteractionsGet
void forAllTaggedInnerInteractionsGet(P &, typename P::value_type(I::*rdf)() const, int, int)
generate FieldSlave of correct type
Definition: pi_storage.hpp:258
TParallelInteractionStorage::forAllInnerInteractionsGet
void forAllInnerInteractionsGet(P &, typename P::value_type(I::*rdf)() const)
access functions with tags
Definition: pi_storage.hpp:209
TParallelInteractionStorage::getInnerInteractionIterator
InteractionIterator getInnerInteractionIterator()
types
Definition: pi_storage.hpp:76
TParallelInteractionStorage::InteractionIterator
Definition: pi_storage.h:102
TParallelInteractionStorage::forAllInnerInteractionsGetWithPos
vector< pair< Vec3, P > > forAllInnerInteractionsGetWithPos(P(I::*rdf)() const)
Definition: pi_storage.hpp:91
AParallelInteractionStorage::update
virtual bool update()=0
AParallelInteractionStorage::m_ppa
AParallelParticleArray * m_ppa
Definition: pi_storage.h:47
esys::lsm::CheckPointable
Definition: CheckPointable.h:27
esys::lsm::quintuple
Definition: quintuple.h:25
AParallelInteractionStorage::loadCheckPointData
virtual void loadCheckPointData(std::istream &)
Definition: pi_storage.h:71
TParallelInteractionStorage::InteractionIterator::m_numRemaining
int m_numRemaining
Definition: pi_storage.h:119
TParallelInteractionStorage::InteractionIterator::InteractionIterator
InteractionIterator(Iterator begin, Iterator end, AParallelParticleArray *ppa)
Definition: pi_storage.hpp:29
AParallelInteractionStorage::AParallelInteractionStorage
AParallelInteractionStorage(AParallelParticleArray *ppa)
Definition: pi_storage.h:50
TParallelInteractionStorage::InteractionIterator::hasNext
bool hasNext()
Definition: pi_storage.hpp:50
TParallelInteractionStorage::DataWithPosID
esys::lsm::quintuple< int, int, Vec3, Vec3, Vec3 > DataWithPosID
access functions
Definition: pi_storage.h:130