ParMooN
 All Classes Functions Variables Friends Pages
MGLevel2D.h
1 // =======================================================================
2 // @(#)MGLevel2D.h 1.3 08/24/99
3 //
4 // Class: TMGLevel2D
5 // Purpose: store all data for one level in a multi grid method
6 //
7 // Author: Gunar Matthies 02.11.1998
8 //
9 // History: 02.11.1998 start of implementation
10 //
11 // =======================================================================
12 
13 #ifndef __MGLEVEL2D__
14 #define __MGLEVEL2D__
15 
16 #include <SquareMatrix2D.h>
17 
19 {
20  protected:
22  int Level;
23 
26 
29 
31  int N_Active;
32 
35 
38 
40  int N_DOF;
41 
44 
47 
49  int *RowPtr;
50 
52  int *KCol;
53 
55  double *Entries;
56 
58  double *Rhs;
59 
61  double *X;
62 
64  int N_Aux;
65 
67  double **Aux;
68 
70  double *Additional;
71 
73  void ILUDecomposition();
74 
75 #ifdef _MPI
76 
77  int OwnN_DOF;
78 
79  TParFECommunicator2D *ParComm;
80 
83 
86 
89 
91  double *OwnSolArray;
92 #endif
93 
94 
95  public:
97  TMGLevel2D(int level, TSquareMatrix2D *A,
98  double *rhs, double *sol, int n_aux,
99  int *permutation);
100 
101 #ifdef _MPI
102  TMGLevel2D(int level, TSquareMatrix2D *a, double *rhs, double *sol,
103  TFEFunction2D *c, TParFECommunicator2D *parComm,TFESpace2D *ownScalarSpace, int n_aux,
104  int *permutation);
105 #endif
106 
108  ~TMGLevel2D();
109 
111  double *GetAuxVector(int i);
112 
114  double *GetSolution()
115  { return X; }
116 
118  double *GetRhs()
119  { return Rhs; }
120 
122  double **GetAuxVectors()
123  { return Aux; }
124 
126  int GetN_DOF()
127  { return N_DOF; }
128 
131  { return HangingNodeBound; }
132 
135  { return N_Dirichlet; }
136 
138  void Defect(double *sol, double *f, double *d, double &res);
139 
141  void Update(double *sol, double *upd);
142 
144  void CorrectNodes(double *vect);
145 
147  void CorrectDefect(double *vect);
148 
150  void Reset(double *vect);
151 
154  { return FESpace; }
155 
157  void ILU(double *sol, double *f, double *aux,
158  int N_Parameters, double *Parameters);
159 
161  void SOR(double *sol, double *f, double *aux,
162  int N_Parameters, double *Parameters);
163 
165  void SSOR(double *sol, double *f, double *aux,
166  int N_Parameters, double *Parameters);
167 
169  void Jacobi(double *sol, double *f, double *aux,
170  int N_Parameters, double *Parameters);
171 
173  void Block2x2(double *sol, double *f, double *aux,
174  int N_Parameters, double *Parameters);
175 
177  void SolveExact(double *u1, double *rhs1);
178 
180  double StepLengthControl(double *u,
181  double *uold,
182  double *def,
183  int N_Parameters,
184  double *Parameters);
185 
186 #ifdef _MPI
187  TFESpace2D *GetOwnFESpace()
188  { return OwnScalarSpace; }
189 
190  TParFECommunicator2D *GetParComm()
191  { return ParComm; }
192 
193  double *GetOwnSolution()
194  { return OwnSolArray; }
195 
196  TFEFunction2D *GetFEFunction()
197  { return C; }
198 
199  TFEFunction2D *GetOwnFEFunction()
200  { return OwnC; }
201 
202 
203 #endif
204 
205 };
206 
207 #endif
double * OwnSolArray
Definition: MGLevel2D.h:91
void SSOR(double *sol, double *f, double *aux, int N_Parameters, double *Parameters)
Definition: MGLevel2D.C:233
int Level
Definition: MGLevel2D.h:22
double * Rhs
Definition: MGLevel2D.h:58
int N_Aux
Definition: MGLevel2D.h:64
int N_DOF
Definition: MGLevel2D.h:40
Definition: SquareMatrix2D.h:20
double StepLengthControl(double *u, double *uold, double *def, int N_Parameters, double *Parameters)
Definition: MGLevel2D.C:705
TFESpace2D * FESpace
Definition: MGLevel2D.h:25
TFEFunction2D * OwnC
Definition: MGLevel2D.h:88
TSquareStructure2D * MatrixStructure
Definition: MGLevel2D.h:46
int * RowPtr
Definition: MGLevel2D.h:49
Definition: FESpace2D.h:28
double * X
Definition: MGLevel2D.h:61
void ILUDecomposition()
Definition: MGLevel2D.C:513
int OwnN_DOF
Definition: MGLevel2D.h:77
Definition: MGLevel2D.h:18
TSquareMatrix2D * A
Definition: MGLevel2D.h:43
void Defect(double *sol, double *f, double *d, double &res)
Definition: MGLevel2D.C:151
void Block2x2(double *sol, double *f, double *aux, int N_Parameters, double *Parameters)
Definition: MGLevel2D.C:416
int N_Active
Definition: MGLevel2D.h:31
void Reset(double *vect)
Definition: MGLevel2D.C:379
double * Entries
Definition: MGLevel2D.h:55
double * GetAuxVector(int i)
Definition: MGLevel2D.C:135
TFESpace2D * OwnScalarSpace
Definition: MGLevel2D.h:85
TFEFunction2D * C
Definition: MGLevel2D.h:82
double ** GetAuxVectors()
Definition: MGLevel2D.h:122
int * Permutation
Definition: MGLevel2D.h:28
int GetN_Dirichlet()
Definition: MGLevel2D.h:134
void CorrectNodes(double *vect)
Definition: MGLevel2D.C:384
void Update(double *sol, double *upd)
Definition: MGLevel2D.C:369
TFESpace2D * GetFESpace()
Definition: MGLevel2D.h:153
TMGLevel2D(int level, TSquareMatrix2D *A, double *rhs, double *sol, int n_aux, int *permutation)
Definition: MGLevel2D.C:25
double * Additional
Definition: MGLevel2D.h:70
int HangingNodeBound
Definition: MGLevel2D.h:34
int * KCol
Definition: MGLevel2D.h:52
void SolveExact(double *u1, double *rhs1)
Definition: MGLevel2D.C:662
double ** Aux
Definition: MGLevel2D.h:67
void SOR(double *sol, double *f, double *aux, int N_Parameters, double *Parameters)
Definition: MGLevel2D.C:175
int GetN_DOF()
Definition: MGLevel2D.h:126
Definition: ParFECommunicator2D.h:20
void CorrectDefect(double *vect)
Definition: MGLevel2D.C:410
Definition: SquareStructure2D.h:20
int N_Dirichlet
Definition: MGLevel2D.h:37
double * GetRhs()
Definition: MGLevel2D.h:118
int GetHangingNodeBound()
Definition: MGLevel2D.h:130
~TMGLevel2D()
Definition: MGLevel2D.C:125
void ILU(double *sol, double *f, double *aux, int N_Parameters, double *Parameters)
Definition: MGLevel2D.C:610
void Jacobi(double *sol, double *f, double *aux, int N_Parameters, double *Parameters)
Definition: MGLevel2D.C:318
double * GetSolution()
Definition: MGLevel2D.h:114
Definition: FEFunction2D.h:24