ParMooN
 All Classes Functions Variables Friends Pages
MGLevel3D.h
1 // =======================================================================
2 // %W% %G%
3 //
4 // Class: TMGLevel3D
5 // Purpose: store all data for one level in a multi grid method in 3d
6 //
7 // Author: Gunar Matthies 26.06.2000
8 //
9 // History: 26.06.2000 start of implementation
10 //
11 // =======================================================================
12 
13 #ifndef __MGLEVEL3D__
14 #define __MGLEVEL3D__
15 
16 #include <SquareMatrix3D.h>
17 #ifdef _MPI
18  #ifdef __3D__
19  #include <ParFECommunicator3D.h>
20  #else
21  #include <ParFECommunicator2D.h>
22  #endif
23 #endif
24 
25 // #include <omp.h>
27 {
28  protected:
30  int Level;
31 
34 
37 
39  int N_Active;
40 
43 
46 
48  int N_DOF;
49 
52 
55 
57  int *RowPtr;
58 
60  int *KCol;
61 
63  double *Entries;
64 
66  double *Rhs;
67 
69  double *X;
70 
72  int N_Aux;
73 
75  double **Aux;
76 
78  double *Additional;
79 
81  void ILUDecomposition();
82 
83 #ifdef _MPI
84 
85  int OwnN_DOF;
86 
87  double *Temp_arr;
88 
89  TParFECommunicator3D *ParComm;
90  TParFEMapper3D *ParMapper;
91 
93  int *Reorder,N_Master,N_Int,N_Dept;
94 
95  int *Reorder_M,*Reorder_D1,*Reorder_D2,*Reorder_I;
96 
97  int N_InterfaceM, N_Dept1, N_Dept2;// N_Dept3;
98 
99 #endif
100 
101 #ifdef _HYBRID
102 
103  int N_CMaster, N_CDept1, N_CDept2, N_CInt, *ptrCMaster, *ptrCDept1, *ptrCDept2, *ptrCInt;
104 #endif
105 
106  public:
107 
108 
110  TMGLevel3D(int level, TSquareMatrix3D *A,
111  double *rhs, double *sol, int n_aux,
112  int *permutation);
113 
114 #ifdef _MPI
115 
116  TMGLevel3D(int level, TSquareMatrix3D *a, double *rhs, double *sol,
117  TParFECommunicator3D *parComm, TParFEMapper3D *parMapper, int n_aux,
118  int *permutation);
119  double *GetTemp_arr()
120  { return Temp_arr; }
121 #endif
122 
124  ~TMGLevel3D();
125 
127  double *GetAuxVector(int i);
128 
130  double *GetSolution()
131  { return X; }
132 
134  double *GetRhs()
135  { return Rhs; }
136 
137 
138 
140  double **GetAuxVectors()
141  { return Aux; }
142 
145  { return A; }
146 
148  int GetN_DOF()
149  { return N_DOF; }
150 
153  { return HangingNodeBound; }
154 
157  { return N_Dirichlet; }
158 
160  void Defect(double *sol, double *f, double *d, double &res);
161 
163  void Update(double *sol, double *upd);
164 
166  void CorrectNodes(double *vect);
167 
169  void CorrectDefect(double *vect);
170 
172  void Reset(double *vect);
173 
176  { return FESpace; }
177 
179  void ILU(double *sol, double *f, double *aux,
180  int N_Parameters, double *Parameters);
181 
183  void SOR(double *sol, double *f, double *aux,
184  int N_Parameters, double *Parameters);
185 
187  void SSOR(double *sol, double *f, double *aux,
188  int N_Parameters, double *Parameters);
189 
191  void Jacobi(double *sol, double *f, double *aux,
192  int N_Parameters, double *Parameters);
193 
194 
195 
197  void Block2x2(double *sol, double *f, double *aux,
198  int N_Parameters, double *Parameters);
199 
201  void SolveExact(double *u1, double *rhs1);
202 
204  double StepLengthControl(double *u,
205  double *uold,
206  double *def,
207  int N_Parameters,
208  double *Parameters);
209 
210 
211 
212 #ifdef _MPI
213 
214  TParFECommunicator3D *GetParComm()
215  { return ParComm; }
216 
217  void SOR_Re(double *sol, double *f, double *aux,
218  int N_Parameters, double *Parameters);
219 
220 #endif
221 
222 #ifdef _HYBRID
223  void SOR_Re_Color(double *sol, double *f, double *aux,
224  int N_Parameters, double *Parameters, bool firstTime, bool lastTime);
225  void SOR_Re_Color(double *sol, double *f, double *aux, int N_Parameters, double *Parameters,int smooth);
226 
227  void SOR_Re_Color_Coarse(double *sol, double *f, double *aux,
228  int N_Parameters, double *Parameters);
229 #endif
230 
231 };
232 
233 #endif
int OwnN_DOF
Definition: MGLevel3D.h:85
int * RowPtr
Definition: MGLevel3D.h:57
double * Rhs
Definition: MGLevel3D.h:66
int * KCol
Definition: MGLevel3D.h:60
void ILU(double *sol, double *f, double *aux, int N_Parameters, double *Parameters)
Definition: MGLevel3D.C:796
void CorrectNodes(double *vect)
Definition: MGLevel3D.C:562
Definition: SquareMatrix3D.h:20
TFESpace3D * FESpace
Definition: MGLevel3D.h:33
TSquareStructure3D * MatrixStructure
Definition: MGLevel3D.h:54
void Jacobi(double *sol, double *f, double *aux, int N_Parameters, double *Parameters)
Definition: MGLevel3D.C:443
~TMGLevel3D()
Definition: MGLevel3D.C:169
void SOR(double *sol, double *f, double *aux, int N_Parameters, double *Parameters)
Definition: MGLevel3D.C:254
int * Permutation
Definition: MGLevel3D.h:36
Definition: FESpace3D.h:22
int N_Dirichlet
Definition: MGLevel3D.h:45
int Level
Definition: MGLevel3D.h:30
int N_Active
Definition: MGLevel3D.h:39
TSquareMatrix3D * A
Definition: MGLevel3D.h:51
Definition: MGLevel3D.h:26
int * Reorder
Definition: MGLevel3D.h:93
TMGLevel3D(int level, TSquareMatrix3D *A, double *rhs, double *sol, int n_aux, int *permutation)
Definition: MGLevel3D.C:39
double * GetSolution()
Definition: MGLevel3D.h:130
int N_CMaster
Definition: MGLevel3D.h:103
Definition: ParFEMapper3D.h:24
void Defect(double *sol, double *f, double *d, double &res)
Definition: MGLevel3D.C:194
double ** GetAuxVectors()
Definition: MGLevel3D.h:140
int N_DOF
Definition: MGLevel3D.h:48
int GetN_Dirichlet()
Definition: MGLevel3D.h:156
TSquareMatrix3D * GetMatrix()
Definition: MGLevel3D.h:144
void Update(double *sol, double *upd)
Definition: MGLevel3D.C:539
void Reset(double *vect)
Definition: MGLevel3D.C:557
double * Entries
Definition: MGLevel3D.h:63
double ** Aux
Definition: MGLevel3D.h:75
int GetN_DOF()
Definition: MGLevel3D.h:148
double * Additional
Definition: MGLevel3D.h:78
double * GetAuxVector(int i)
Definition: MGLevel3D.C:179
int N_Aux
Definition: MGLevel3D.h:72
double StepLengthControl(double *u, double *uold, double *def, int N_Parameters, double *Parameters)
Definition: MGLevel3D.C:882
Definition: SquareStructure3D.h:20
int GetHangingNodeBound()
Definition: MGLevel3D.h:152
TFESpace3D * GetFESpace()
Definition: MGLevel3D.h:175
Definition: ParFECommunicator3D.h:25
int HangingNodeBound
Definition: MGLevel3D.h:42
double * GetRhs()
Definition: MGLevel3D.h:134
void Block2x2(double *sol, double *f, double *aux, int N_Parameters, double *Parameters)
Definition: MGLevel3D.C:614
void SSOR(double *sol, double *f, double *aux, int N_Parameters, double *Parameters)
Definition: MGLevel3D.C:337
double * X
Definition: MGLevel3D.h:69
void ILUDecomposition()
Definition: MGLevel3D.C:712
void CorrectDefect(double *vect)
Definition: MGLevel3D.C:588
void SolveExact(double *u1, double *rhs1)
Definition: MGLevel3D.C:839