O P A R - Open Architecture Particle in Cell Simulation - Version 3.0
Plasma simulations with dust particles
 All Classes Files Functions Variables Friends Macros Groups Pages
geometry.h
Go to the documentation of this file.
1 
16 #ifndef GEOMETRY_H
17 #define GEOMETRY_H
18 #include "task.h"
19 #include "numeric.h"
20 #define ID_GEOMETRY "Geometry"
21 
30 //---------------------------------------------------------------------------------------------------------------------
31 class Geometry : public Task {
32  protected:
37  public:
39  double Rd;
41  int number_d;
43  Geometry () : Task() {};
45  virtual ~Geometry () {};
47  virtual std::string GetClassName () const {return ID_GEOMETRY;}
48  virtual void Init ();
50  virtual bool Execute () {return true;};
52  GridPosition GetGridSize () const {return GridSize;}
54  Position GetGridSpacing () const {return GridSpacing;}
56  virtual Position MinPosition() const = 0;
57  virtual Position MaxPosition() const = 0;
58 
64 
66  virtual double GetDustRadius();
67 #ifndef ONE_DIMENSIONAL
68 
69  virtual int GetNumberDust();
71  virtual GridPosition GetDustPosition(int);
72 #endif
73 
74  virtual Position GetLocation (const GridPosition&) const = 0;
76  virtual double Distance(const GridPosition&, const GridPosition&) const = 0;
78  double GetVolumeQuant () const {return GridSpacing.volume(); }
80  virtual double GetBoxVolume () const = 0;
81 
85 #ifdef ONE_DIMENSIONAL
86  virtual bool outside(const Position&) const = 0 ;
87 
91 
92  virtual bool insidedust(const Position&) const = 0;
94  virtual bool outsideRight(const Position&) const = 0;
95 #endif
96 #ifndef ONE_DIMENSIONAL
97  int ig;
98  Position pt,pd;
99 #ifdef TWO_DIMENSIONAL
100 
101  Position pc[2][2000];
102 #endif
103 #ifdef THREE_DIMENSIONAL
104 
105  Position pc[3][2000];
106 #endif
107 
110  virtual bool outside(const Position&) const = 0;
111  virtual bool outside_periodic(const Position&) const = 0;
112  virtual bool outside_right(const Position&) const = 0;
113  virtual bool outside_left(const Position&) const = 0;
115  virtual bool insidedust(const Position&, GridPosition) const = 0;
116 #endif
117 
119 
123  virtual void DivByVolume(grid<double> &G) = 0;
124 #ifndef THREE_DIMENSIONAL
125  virtual void DivByVolume(grid<Position> &G) = 0;
126  virtual void DivByVolume(grid<Velocity> &G) = 0;
127 #endif
128 
129 
130 protected:
131  virtual PARAMETERMAP* MakeParamMap (PARAMETERMAP* pm = NULL);
132 };
133 
143 class ClosedGeometry : public Geometry {
144  public:
146  double Rd;
147 #ifndef ONE_DIMENSIONAL
148  int x,y;
150  int Rg;
152  double dx2;
154  double dy2;
156  double Rq;
158  double pos1x,pos1y,pos1z,pos2x,pos2y,pos2z,pos3x,pos3y,pos3z,pos4x,pos4y,pos4z,pos5x,pos5y,pos5z;
159  double pos6x,pos6y,pos6z,pos7x,pos7y,pos7z,pos8x,pos8y,pos8z,pos9x,pos9y,pos9z,pos10x,pos10y,pos10z;
160  double pos11x,pos11y,pos11z,pos12x,pos12y,pos12z,pos13x,pos13y,pos13z,pos14x,pos14y,pos14z,pos15x,pos15y,pos15z;
161  double pos16x,pos16y,pos16z,pos17x,pos17y,pos17z,pos18x,pos18y,pos18z,pos19x,pos19y,pos19z,pos20x,pos20y,pos20z;
162 #ifdef TWO_DIMENSIONAL
163  int xp,yp;
164 #endif
165 #ifdef THREE_DIMENSIONAL
166  int z;
168  double dz2;
169 #endif
170 #endif
171 
172  int number_d;
176  virtual ~ClosedGeometry () {};
177  virtual void Init();
178 
180  virtual Position MinPosition() const {return Position(0.);}
181  virtual Position MaxPosition() const {return Position(GridSize);};
183 
184 
185  virtual Position GetLocation (const GridPosition&) const;
186  virtual double Distance(const GridPosition&, const GridPosition&) const;
187  virtual double GetDustRadius();
188 #ifndef ONE_DIMENSIONAL
189  virtual int GetNumberDust();
190  virtual GridPosition GetDustPosition(int);
191 #endif
192 #ifdef ONE_DIMENSIONAL
193  virtual double GetBoxVolume () const {return (GetGridSize()[0]-1)*GetVolumeQuant();};
194  virtual bool outside(const Position&) const;
195  virtual bool insidedust(const Position&) const;
196  virtual bool outsideRight(const Position&) const;
197 #endif
198 #ifdef TWO_DIMENSIONAL
199  virtual double GetBoxVolume () const {return (GetGridSize()[0]-1)*(GetGridSize()[1]-1)*GetVolumeQuant();};
200 #endif
201 #ifdef THREE_DIMENSIONAL
202  virtual double GetBoxVolume () const {
203  return (GetGridSize()[0]-1)*(GetGridSize()[1]-1)*(GetGridSize()[2]-1)*GetVolumeQuant();
204  };
205 #endif
206 #ifndef ONE_DIMENSIONAL
207  virtual bool outside(const Position&) const;
208  virtual bool outside_periodic(const Position&) const;
209  virtual bool outside_right(const Position&) const;
210  virtual bool outside_left(const Position&) const;
211  virtual bool insidedust(const Position&, GridPosition) const;
212 #endif
213  virtual void DivByVolume(grid<double> &G);
214  virtual void DivByVolume(grid<Position> &G);
215  virtual void DivByVolume(grid<Velocity> &G);
216  protected:
217  virtual PARAMETERMAP* MakeParamMap (PARAMETERMAP* pm = NULL);
218 };
219 #endif