ParMooN
 All Classes Functions Variables Friends Pages
NSE_MGLevel.h
1 // =======================================================================
2 // @(#)NSE_MGLevel.h 1.10 07/03/00
3 //
4 // Class: TNSE_MGLevel
5 // Purpose: abstract super class for a Stokes/Navier-Stokes system
6 //
7 // Author: Volker John 25.07.2000
8 //
9 // History: 25.07.2000 start of implementation
10 //
11 // =======================================================================
12 
13 #ifndef __NSE_MGLEVEL__
14 #define __NSE_MGLEVEL__
15 
16 #include <Matrix.h>
17 #ifdef __2D__
18  #include <SquareMatrix2D.h>
19 #endif
20 #ifdef __3D__
21  #include <SquareMatrix3D.h>
22 #endif
23 
25 {
26  protected:
28  int Level;
29 
31  int Type;
32 
33 #ifdef __2D__
34 
36 
39 #endif
40 
41 #ifdef __3D__
42 
44 
47 #endif
48 
51 
53  int N_Active;
54 
57 
59  int N_DOF;
60 
62  int N_UDOF;
63 
65  int N_PDOF;
66 
69 
72 
74  double *Rhs1;
75 
77  double *Rhs2;
78 
79 #ifdef __3D__
80 
81  double *Rhs3;
82 #endif
83 
85  double *RhsP;
86 
88  double *U1;
89 
91  double *U2;
92 
93 #ifdef __3D__
94 
95  double *U3;
96 #endif
97 
99  double *P;
100 
102  int N_Aux;
103 
105  double **Aux;
106 
108  double *Additional;
109 
111  double alpha;
112 
114  double beta;
115 
118 
120  int *downwind;
121 
124 
127 
130 
131  public:
133  TNSE_MGLevel(int level, double *f1, double *u1,
134  int n_aux, double *al, int VelocitySpace,
135  int PressureSpace,
136  TCollection *coll);
137 
139  ~TNSE_MGLevel();
140 
142  double *GetAuxVector(int i);
143 
144 #ifdef __2D__
145 
146  void GetSolution(double* &u1, double* &u2, double* &p)
147  { u1 = U1; u2 = U2; p = P; }
148 
150  void GetRhs(double* &f1, double* &f2, double* &f3)
151  { f1 = Rhs1; f2 = Rhs2; f3 = RhsP;}
152 #endif
153 #ifdef __3D__
154 
155  void GetSolution(double* &u1, double* &u2, double* &u3, double* &p)
156  { u1 = U1; u2 = U2; u3 = U3; p = P; }
157 
159  void GetRhs(double* &f1, double* &f2, double* &f3, double* &f4)
160  { f1 = Rhs1; f2 = Rhs2; f3 = Rhs3; f4 = RhsP;}
161 #endif
162 
164  void GetSolutionVector(double* &u1)
165  { u1 = U1;}
166 
168  void GetRhsVector(double* &f1)
169  { f1 = Rhs1;}
170 
172  double **GetAuxVectors()
173  { return Aux; }
174 
176  int GetN_UDOF()
177  { return N_UDOF; }
178 
180  int GetN_PDOF()
181  { return N_PDOF; }
182 
185  { return VelocitySpace; }
186 
189  { return PressureSpace; }
190 
193  { return HangingNodeBound; }
194 
197  { return N_Dirichlet; }
198 
200  virtual void Defect(double *u1, double *f1, double *d1, double &res);
201 
203  void Update(double *u1, double *v1);
204 
206  virtual void CorrectNodes(double *u1);
207 
209  void SetHangingNodes(double *u1);
210 
212  void CorrectDefect(double *v1);
213 
215  void Reset(double *v1);
216 
217 #ifdef __2D__
218 
220  { return USpace; }
221 
224  { return PSpace; }
225 #endif
226 
227 #ifdef __3D__
228 
230  { return USpace; }
231 
234  { return PSpace; }
235 #endif
236 
237  TCollection *GetCollection()
238  { return VankaColl; }
239 
240  void SetCollection(TCollection *coll)
241  { VankaColl = coll; }
242 
244  virtual void CellVanka(double *u1, double *rhs1, double *aux,
245  int N_Parameters, double *Parameters, int smoother, int N_Levels);
246 
248  virtual void NodalVanka(double *u1, double *rhs1, double *aux,
249  int N_Parameters, double *Parameters, int smoother, int N_Levels);
250 
252  virtual void SolveExact(double *u1, double *rhs1);
253 
255  virtual void SolveExactUMFPACK(double *u1, double *rhs1, int &umfpack_flag);
256 
258  virtual void BraessSarazin(double *u1, double *rhs1, double *aux,
259  int N_Parameters, double *Parameters,int N_Levels);
260 
262  virtual double StepLengthControl(double *u1, double *u1old, double *def1,
263  int N_Parameters, double *Parameter);
264 
266  virtual void PrintAll();
267 
269  int GetType()
270  { return Type; }
271 
272 };
273 
274 #endif
TFESpace3D * PSpace
Definition: NSE_MGLevel.h:46
int N_Active
Definition: NSE_MGLevel.h:53
double * U1
Definition: NSE_MGLevel.h:88
TNSE_MGLevel(int level, double *f1, double *u1, int n_aux, double *al, int VelocitySpace, int PressureSpace, TCollection *coll)
Definition: NSE_MGLevel.C:34
int GetN_PDOF()
Definition: NSE_MGLevel.h:180
int GetN_UDOF()
Definition: NSE_MGLevel.h:176
virtual void NodalVanka(double *u1, double *rhs1, double *aux, int N_Parameters, double *Parameters, int smoother, int N_Levels)
Definition: NSE_MGLevel.C:267
TFESpace3D * GetPSpace()
Definition: NSE_MGLevel.h:233
TFESpace2D * GetPSpace()
Definition: NSE_MGLevel.h:223
double ** Aux
Definition: NSE_MGLevel.h:105
virtual void SolveExact(double *u1, double *rhs1)
Definition: NSE_MGLevel.C:274
void GetRhsVector(double *&f1)
Definition: NSE_MGLevel.h:168
int GetVelocitySpace()
Definition: NSE_MGLevel.h:184
virtual void CorrectNodes(double *u1)
Definition: NSE_MGLevel.C:105
int Level
Definition: NSE_MGLevel.h:28
int HangingNodeBound
Definition: NSE_MGLevel.h:56
double * P
Definition: NSE_MGLevel.h:99
Definition: FESpace2D.h:28
Definition: FESpace3D.h:22
double * U2
Definition: NSE_MGLevel.h:91
int * downwind
Definition: NSE_MGLevel.h:120
int N_Aux
Definition: NSE_MGLevel.h:102
void GetSolution(double *&u1, double *&u2, double *&u3, double *&p)
Definition: NSE_MGLevel.h:155
int * velo_velo_local_coupling
Definition: NSE_MGLevel.h:123
int * divergence_local_coupling
Definition: NSE_MGLevel.h:129
double * Rhs3
Definition: NSE_MGLevel.h:81
store cells in an array, used by cell iterators
Definition: Collection.h:18
double * Additional
Definition: NSE_MGLevel.h:108
int PressureSpace
Definition: NSE_MGLevel.h:71
double ** GetAuxVectors()
Definition: NSE_MGLevel.h:172
TCollection * VankaColl
Definition: NSE_MGLevel.h:117
int GetType()
Definition: NSE_MGLevel.h:269
TFESpace2D * PSpace
Definition: NSE_MGLevel.h:38
int GetHangingNodeBound()
Definition: NSE_MGLevel.h:192
int N_UDOF
Definition: NSE_MGLevel.h:62
void GetRhs(double *&f1, double *&f2, double *&f3)
Definition: NSE_MGLevel.h:150
void GetRhs(double *&f1, double *&f2, double *&f3, double *&f4)
Definition: NSE_MGLevel.h:159
TFESpace3D * GetUSpace()
Definition: NSE_MGLevel.h:229
TFESpace3D * USpace
Definition: NSE_MGLevel.h:43
int GetPressureSpace()
Definition: NSE_MGLevel.h:188
virtual double StepLengthControl(double *u1, double *u1old, double *def1, int N_Parameters, double *Parameter)
Definition: NSE_MGLevel.C:289
double * Rhs1
Definition: NSE_MGLevel.h:74
virtual void Defect(double *u1, double *f1, double *d1, double &res)
Definition: NSE_MGLevel.C:90
void Reset(double *v1)
Definition: NSE_MGLevel.C:254
int N_PDOF
Definition: NSE_MGLevel.h:65
~TNSE_MGLevel()
Definition: NSE_MGLevel.C:63
double beta
Definition: NSE_MGLevel.h:114
double * GetAuxVector(int i)
Definition: NSE_MGLevel.C:73
virtual void PrintAll()
Definition: NSE_MGLevel.C:296
double alpha
Definition: NSE_MGLevel.h:111
void SetHangingNodes(double *u1)
Definition: NSE_MGLevel.C:125
int Type
Definition: NSE_MGLevel.h:31
int N_DOF
Definition: NSE_MGLevel.h:59
void GetSolution(double *&u1, double *&u2, double *&p)
Definition: NSE_MGLevel.h:146
virtual void SolveExactUMFPACK(double *u1, double *rhs1, int &umfpack_flag)
Definition: NSE_MGLevel.C:279
virtual void CellVanka(double *u1, double *rhs1, double *aux, int N_Parameters, double *Parameters, int smoother, int N_Levels)
Definition: NSE_MGLevel.C:260
int N_Dirichlet
Definition: NSE_MGLevel.h:50
void Update(double *u1, double *v1)
Definition: NSE_MGLevel.C:95
double * Rhs2
Definition: NSE_MGLevel.h:77
int VelocitySpace
Definition: NSE_MGLevel.h:68
TFESpace2D * GetUSpace()
Definition: NSE_MGLevel.h:219
void CorrectDefect(double *v1)
Definition: NSE_MGLevel.C:176
double * RhsP
Definition: NSE_MGLevel.h:85
Definition: NSE_MGLevel.h:24
int * gradient_local_coupling
Definition: NSE_MGLevel.h:126
virtual void BraessSarazin(double *u1, double *rhs1, double *aux, int N_Parameters, double *Parameters, int N_Levels)
Definition: NSE_MGLevel.C:284
double * U3
Definition: NSE_MGLevel.h:95
TFESpace2D * USpace
Definition: NSE_MGLevel.h:35
void GetSolutionVector(double *&u1)
Definition: NSE_MGLevel.h:164
int GetN_Dirichlet()
Definition: NSE_MGLevel.h:196