OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
IrregularDomain.h
Go to the documentation of this file.
1 #ifndef IRREGULAR_DOMAIN_H
2 #define IRREGULAR_DOMAIN_H
3 #ifdef HAVE_SAAMG_SOLVER
4 
5 #include <vector>
6 #include <string>
9 
11 enum {
12  CONSTANT,
13  LINEAR,
14  QUADRATIC
15 };
16 
18 class IrregularDomain {
19 
20 public:
21 
25  virtual void compute(Vector_t hr) = 0;
26  virtual void compute(Vector_t hr, NDIndex<3> localId) = 0;
31  virtual int getNumXY(int z) = 0;
32 
44  virtual void getBoundaryStencil(int x, int y, int z, double &W, double &E, double &S, double &N, double &F, double &B, double &C, double &scaleFactor) = 0;
45 
55  virtual void getBoundaryStencil(int idx, double &W, double &E, double &S, double &N, double &F, double &B, double &C, double &scaleFactor) = 0;
56 
67  virtual void getNeighbours(int x, int y, int z, int &W, int &E, int &S, int &N, int &F, int &B) = 0;
68  virtual void getNeighbours(int idx, int &W, int &E, int &S, int &N, int &F, int &B) = 0;
69 
72  virtual std::string getType() = 0;
73 
79  virtual bool isInside(int x, int y, int z) = 0;
80 
81  Vector_t getNr() { return nr; }
82  Vector_t getHr() { return hr; }
83  void setNr(Vector_t nri) { nr = nri; }
84  void setHr(Vector_t hri) { hr = hri; }
85 
86  void setMinMaxZ(double minz, double maxz) { zMin_m=minz; zMax_m=maxz; }
87  double getMinZ() { return zMin_m; }
88  double getMaxZ() { return zMax_m; }
89 
90  void setGlobalMeanR(Vector_t rmean) { rMean_m = rmean;}
91  Vector_t getGlobalMeanR() { return rMean_m; }
92 
93  void setGlobalToLocalQuaternion(Quaternion_t globalToLocalQuaternion){
94  globalToLocalQuaternion_m = globalToLocalQuaternion;}
95  Quaternion_t getGlobalToLocalQuaternion() { return globalToLocalQuaternion_m;}
96 
97  virtual double getXRangeMin() = 0;
98  virtual double getXRangeMax() = 0;
99  virtual double getYRangeMin() = 0;
100  virtual double getYRangeMax() = 0;
101  virtual double getZRangeMin() = 0;
102  virtual double getZRangeMax() = 0;
103 
104  virtual int getIdx(int x, int y, int z) = 0;
105  virtual bool hasGeometryChanged() = 0;
106 
107 protected:
108 
109  // a irregular domain is always defined on a grid
111  Vector_t nr;
113  Vector_t hr;
114 
116  double zMin_m;
117  double zMax_m;
118 
120  Vector_t rMean_m;
121  Quaternion_t globalToLocalQuaternion_m;
122 };
123 
124 #endif //#ifdef HAVE_SAAMG_SOLVER
125 #endif //#ifndef IRREGULAR_DOMAIN_H
Definition: TSVMeta.h:24
const int nr
Definition: ClassicRandom.h:24