OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
AmrObject.h
Go to the documentation of this file.
1 #ifndef AMR_OBECT_H
2 #define AMR_OBECT_H
3 
4 #include "Index/NDIndex.h"
5 
7 #include "Utilities/Util.h"
8 
9 // #include "Algorithms/AmrPartBunch.h"
10 
11 // class AmrPartBunch;
12 
19 class AmrObject {
20 
21 public:
22  // FIXME Why not using typedef of PartBunchBase
23  typedef std::pair<Vector_t, Vector_t> VectorPair_t;
24 // using VectorPair_t = typename AmrPartBunch::VectorPair_t;
25 
28  CHARGE_DENSITY = 0, // default
34  };
35 
36 
42  struct AmrInfo {
43  int grid[3];
44  int maxgrid[3];
45  int bf[3];
46  int maxlevel;
47  int refratio[3];
48  };
49 
50 public:
51 
52  AmrObject();
53 
54  AmrObject(TaggingCriteria tagging,
55  double scaling,
56  double chargedensity);
57 
58  virtual ~AmrObject();
59 
65  virtual void getGridStatistics(std::map<int, long>& gridPtsPerCore,
66  std::vector<int>& gridsPerLevel) const = 0;
67 
71  virtual void initFineLevels() = 0;
72 
77  virtual void regrid(double time) = 0;
78 
84  void setTagging(TaggingCriteria tagging);
85 
91  void setTagging(std::string tagging);
92 
98  void setScalingFactor(double scaling);
99 
104  void setChargeDensity(double chargedensity);
105 
111  void setMaxNumParticles(size_t maxNumPart);
112 
118  void setMinNumParticles(size_t minNumPart);
119 
120  /* Methods that are needed by the
121  * bunch
122  */
123  virtual VectorPair_t getEExtrema() = 0;
124 
125  virtual double getRho(int x, int y, int z) = 0;
126 
127  virtual void computeSelfFields() = 0;
128 
129  virtual void computeSelfFields(int b) = 0;
130 
131  virtual void computeSelfFields_cycl(double gamma) = 0;
132 
133  virtual void computeSelfFields_cycl(int b) = 0;
134 
135  virtual void updateMesh() = 0;
136 
137  virtual Vektor<int, 3> getBaseLevelGridPoints() const = 0;
138 
139  virtual const int& maxLevel() const = 0;
140  virtual const int& finestLevel() const = 0;
141 
145  virtual double getT() const = 0;
146 
151  virtual void redistributeGrids(int how) { }
152 
158  const bool& isRefined() const;
159 
166  static std::string enum2string(int number);
167 
168 protected:
169 
171 
172  double scaling_m;
173  // (POTENTIAL, EFIELD)
175 
176  size_t maxNumPart_m;
177 
178  size_t minNumPart_m;
179 
180  bool refined_m;
181 
185 };
186 
187 #endif
min. #particles per cell
Definition: AmrObject.h:32
size_t minNumPart_m
Tagging value for MIN_NUM_PARTICLES.
Definition: AmrObject.h:178
static std::string enum2string(int number)
Definition: AmrObject.cpp:79
TaggingCriteria tagging_m
Tagging strategy.
Definition: AmrObject.h:170
virtual void computeSelfFields()=0
virtual void regrid(double time)=0
virtual void redistributeGrids(int how)
Definition: AmrObject.h:151
virtual double getRho(int x, int y, int z)=0
size_t maxNumPart_m
Tagging value for MAX_NUM_PARTICLES.
Definition: AmrObject.h:176
TaggingCriteria
Methods for tagging cells for refinement.
Definition: AmrObject.h:27
const bool & isRefined() const
Definition: AmrObject.cpp:74
int refratio[3]
Mesh refinement ratio in x-, y- and z-direction.
Definition: AmrObject.h:47
void setMinNumParticles(size_t minNumPart)
Definition: AmrObject.cpp:69
void setScalingFactor(double scaling)
Definition: AmrObject.cpp:54
virtual void updateMesh()=0
int grid[3]
Number of grid points in x-, y- and z-direction.
Definition: AmrObject.h:43
void setMaxNumParticles(size_t maxNumPart)
Definition: AmrObject.cpp:64
virtual void computeSelfFields_cycl(double gamma)=0
double scaling_m
Scaling factor for tagging [0, 1].
Definition: AmrObject.h:172
IpplTimings::TimerRef amrRegridTimer_m
Definition: AmrObject.h:184
virtual Vektor< int, 3 > getBaseLevelGridPoints() const =0
virtual ~AmrObject()
Definition: AmrObject.cpp:22
std::pair< Vector_t, Vector_t > VectorPair_t
Definition: AmrObject.h:23
virtual const int & maxLevel() const =0
virtual const int & finestLevel() const =0
max. #particles per cell
Definition: AmrObject.h:33
virtual void getGridStatistics(std::map< int, long > &gridPtsPerCore, std::vector< int > &gridsPerLevel) const =0
Timing::TimerRef TimerRef
Definition: IpplTimings.h:176
int maxlevel
Maximum level for AMR (0: single-level)
Definition: AmrObject.h:46
virtual VectorPair_t getEExtrema()=0
virtual double getT() const =0
void setTagging(TaggingCriteria tagging)
Definition: AmrObject.cpp:26
double chargedensity_m
Tagging value for CHARGE_DENSITY.
Definition: AmrObject.h:174
virtual void initFineLevels()=0
IpplTimings::TimerRef amrSolveTimer_m
timer for selfField calculation (used in concrete AmrObject classes)
Definition: AmrObject.h:183
bool refined_m
Only set to true in AmrObject::initFineLevels()
Definition: AmrObject.h:180
int bf[3]
Grid blocking factor in x-, y- and z-direction.
Definition: AmrObject.h:45
int maxgrid[3]
Maximum grid size in x-, y- and z-direction.
Definition: AmrObject.h:44
void setChargeDensity(double chargedensity)
Definition: AmrObject.cpp:59