ParMooN
 All Classes Functions Variables Friends Pages
LinAlg.h
1 // =======================================================================
2 // @(#)LinAlg.h 1.8 12/07/99
3 //
4 // Purpose: basic routines for linear algebra
5 //
6 // Author: Gunar Matthies 27.01.1999
7 //
8 // Sashikumaar Ganesan 08.10.2009 (eigen values)
9 // =======================================================================
10 
11 #ifdef _MPI
12 # include "mpi.h"
13 // #include <ParVector3D.h>
14 #endif
15 
16 #ifndef __LINALG__
17 #define __LINALG__
18 
19 #include <SquareMatrix2D.h>
20 #include <Matrix2D.h>
21 
22 #ifdef __3D__
23  #include <SquareMatrix3D.h>
24  #include <Matrix3D.h>
25 #endif
26 
27 // =======================================================================
28 // BLAS 1
29 // =======================================================================
30 
32 double Ddot(int n, double *x, double *y);
33 
34  #ifdef _MPI
35 
36 // double ParDdot(double *x, double *y, TParFECommunicator2D *ParCommunicator);
37 
39 void ParDdotNSE2D(double *x, int N_U, int N_P, TParFECommunicator2D *ParCommunicatorU, TParFECommunicator2D *ParCommunicatorP,
40  double &res, double &imp_res);
41 
43 double ParDdotNSE3D(double *x, double *y, int N_U, int N_P, TParFECommunicator2D *ParCommunicatorU, TParFECommunicator2D *ParCommunicatorP);
44  #endif
45 
47 void Daxpy(int n, double alpha, double *x, double *y);
48 
50 void Dsum(int n, double alpha, double beta, double *x, double *y, double *z);
51 
53 void Dcopy(int n, double *x, double *y);
54 
56 void Dscal(int n, double alpha, double *x);
57 
59 double Dnorm(int n, double *x);
60 
61 // =======================================================================
62 // BLAS 2
63 // =======================================================================
64 
66 void MatVect(TSquareMatrix *A, double *x, double *y);
67 void MatVect_Scalar(TSquareMatrix **A, TMatrix **B, double *x, double *y);
69 void ScalarDefect(TSquareMatrix *A, double *sol, double *f, double *d,
70  double &res);
71 
72 void Defect_Scalar(TSquareMatrix **A, TMatrix **B, double *x, double *b, double *r);
73 
75 void MatVectActive(TSquareMatrix *A, double *x, double *y);
76 
78 void MatAdd(TSquareMatrix *C, TSquareMatrix *D, double alpha);
79 void MatAdd(TMatrix *C, TMatrix *D, double alpha);
80 
82 void MatAdd2(TSquareMatrix *C, TSquareMatrix *D, double alpha);
83 
85 void MatVect(TMatrix *A, double *x, double *y);
86 
88 void MatVect1(TMatrix *A, double *x, double *y);
89 
91 void TransMatVect(TMatrix *A, double *x, double *y);
92 
94 void CoupledMatVect(TSquareMatrix *A, TMatrix *B1, TMatrix *B2,
95  double *x, double *y);
96 
98 void CoupledDefect(TSquareMatrix *A, TMatrix *B1, TMatrix *B2,
99  double *x, double *b, double *r);
100 
101 void MatVectFull(TSquareMatrix **A, TMatrix **B, double *x, double *y);
102 void DefectFull(TSquareMatrix **A, TMatrix **B, double *x, double *b, double *r);
103 
104 
105 void MatVect_NSE1(TSquareMatrix **A, TMatrix **B, double *x, double *y);
106 
107 void Defect_NSE1(TSquareMatrix **A, TMatrix **B, double *x, double *b, double *r);
108 
110 void CoupledMatVect(TSquareMatrix *A, TMatrix *B1, TMatrix *B2,
111  TMatrix *B1T, TMatrix *B2T,
112  double *x, double *y);
113 
115 void CoupledDefect(TSquareMatrix *A, TMatrix *B1, TMatrix *B2,
116  TMatrix *B1T, TMatrix *B2T,
117  double *x, double *b, double *r);
118 
119 void MatVect_NSE2(TSquareMatrix **A, TMatrix **B, double *x, double *y);
120 
121 void Defect_NSE2(TSquareMatrix **A, TMatrix **B, double *x, double *b, double *r);
122 
123 #ifdef _MPI
124 void ParDefect_NSE2(TSquareMatrix **, TMatrix **, TParVectorNSE3D *, TParVectorNSE3D *, TParVectorNSE3D *);
125 #endif
126 
128 void CoupledMatVect(TSquareMatrix *A11, TSquareMatrix *A12,
129  TSquareMatrix *A21, TSquareMatrix *A22,
130  TMatrix *B1, TMatrix *B2,
131  double *x, double *y);
132 
134 void CoupledDefect(TSquareMatrix *A11, TSquareMatrix *A12,
135  TSquareMatrix *A21, TSquareMatrix *A22,
136  TMatrix *B1, TMatrix *B2,
137  double *x, double *b, double *r);
138 
139 void MatVect_NSE3(TSquareMatrix **A, TMatrix **B, double *x, double *y);
140 
141 void Defect_NSE3(TSquareMatrix **A, TMatrix **B, double *x, double *b, double *r);
142 
144 void CoupledMatVect(TSquareMatrix *A11, TSquareMatrix *A12,
145  TSquareMatrix *A21, TSquareMatrix *A22,
146  TMatrix *B1, TMatrix *B2,
147  TMatrix *B1T, TMatrix *B2T,
148  double *x, double *y);
149 
151 void CoupledDefect(TSquareMatrix *A11, TSquareMatrix *A12,
152  TSquareMatrix *A21, TSquareMatrix *A22,
153  TMatrix *B1, TMatrix *B2,
154  TMatrix *B1T, TMatrix *B2T,
155  double *x, double *b, double *r);
156 
157 void MatVect_NSE4(TSquareMatrix **A, TMatrix **B, double *x, double *y);
158 
159 void Defect_NSE4(TSquareMatrix **A, TMatrix **B, double *x, double *b, double *r);
160 
163 void CoupledMatVect(TSquareMatrix *A11, TSquareMatrix *A12,
164  TSquareMatrix *A21, TSquareMatrix *A22,
165  TSquareMatrix *C,
166  TMatrix *B1, TMatrix *B2,
167  TMatrix *B1T, TMatrix *B2T,
168  double *x, double *y);
169 
171 void CoupledDefect(TSquareMatrix *A11, TSquareMatrix *A12,
172  TSquareMatrix *A21, TSquareMatrix *A22,
173  TSquareMatrix *C,
174  TMatrix *B1, TMatrix *B2,
175  TMatrix *B1T, TMatrix *B2T,
176  double *x, double *b, double *r);
177 
178 void MatVect_EquOrd_NSE4(TSquareMatrix **A, TMatrix **B, double *x, double *y);
179 
180 void Defect_EquOrd_NSE4(TSquareMatrix **A, TMatrix **B, double *x, double *b, double *r);
181 
182 
187 void CoupledMatVect(TSquareMatrix *A, TMatrix *B, double *x, double *y);
188 void CoupledDefect(TSquareMatrix *A, TMatrix *B,
189  double *x, double *b, double *r);
190 
191 // ========================================================================
192 // (Navier-)Stokes system with almost divergence-free basis, NSTYP==5
193 // ========================================================================
194 
196 void CoupledMatVect(TSquareMatrix *A, double *x, double *y);
197 
199 void CoupledDefect(TSquareMatrix *A, double *x, double *b, double *r);
200 
201 void MatVect_NSE5(TSquareMatrix **A, TMatrix **B, double *x, double *y);
202 
203 void Defect_NSE5(TSquareMatrix **A, TMatrix **B, double *x, double *b, double *r);
204 
206 void MatVectCD_VMM(TSquareMatrix *A, TMatrix *B1, TMatrix *B2, TSquareMatrix *D,
207  double *x, double *y);
208 void MatVect_CD_VMM(TSquareMatrix **A, TMatrix **B, double *x, double *y);
209 void DefectCD_VMM(TSquareMatrix *A, TMatrix *B1, TMatrix *B2, TSquareMatrix *D,
210  double *x, double *b, double *r);
211 void Defect_CD_VMM(TSquareMatrix **A, TMatrix **B, double *x, double *b, double *r);
212 
214 void MatVectCD_VMM_KL02(TSquareMatrix *A, TMatrix *B1, TMatrix *B2,
215  TMatrix *C1, TMatrix *C2, TSquareMatrix *D,
216  double *x, double *y);
217 void MatVect_CD_VMM_KL02(TSquareMatrix **A, TMatrix **B, double *x, double *y);
218 void DefectCD_VMM_KL02(TSquareMatrix *A, TMatrix *B1, TMatrix *B2,
219  TMatrix *C1, TMatrix *C2, TSquareMatrix *D,
220  double *x, double *y, double *r);
221 void Defect_CD_VMM_KL02(TSquareMatrix **A, TMatrix **B, double *x, double *b, double *r);
222 
224 void CoupledMatVectLV96(TSquareMatrix *A, TMatrix *B1, TMatrix *B2,
225  double *x, double *y, double delta);
226 
228 void CoupledDefectLV96(TSquareMatrix *A, TMatrix *B1, TMatrix *B2,
229  double *x, double *b, double *r, double delta);
230 
232 void SolveLinearSystemLapack(double *a, double *b, int N_Eqn, int LDA);
233 
235 //void SolveLinearSystem(double *a, double *b, int N_Eqn, int LDA);
236 
238 void SolveLinearSystemTranspose(double *a, double *b, int N_Eqn, int LDA);
239 
240 /* subroutine for solving a multiple systems of linear equations */
241 /* solution is transposed */
242 void SolveMultipleSystems(double *a, double *b, int N_Eqn,
243  int LDA, int LDB, int N_Rhs);
244 
245 /* subroutine for solving a multiple systems of linear equations */
246 void SolveMultipleSystemsNew(double *a, double *b, int N_Eqn,
247  int LDA, int LDB, int N_Rhs);
248 
249 /* subroutine for solving a multiple systems of linear equations
250  using the LAPACK routines*/
251 
252 void SolveMultipleSystemsLapack(double *a, double *b, int N_Eqn,
253  int LDA, int LDB, int N_Rhs);
254 
255 /* solve diagonal Vanka system */
256 void SolveDiagonalVanka2D(double *a, double *b, int N_U, int N_P, int LDA);
257 
258 /* solve diagonal Vanka system */
259 void SolveDiagonalVanka3D(double *a, double *b, int N_U, int N_P, int LDA);
260 
262 void CoupledMatVectMortar(TSquareMatrix *A, TMatrix *B1, TMatrix *B2,
263  TMatrix *B1T, TMatrix *B2T, TMatrix *matrix_mortar,
264  double *x, double *y);
265 
267 void FindEigenValues(double *ap, int N_Eqn, char &COMPZ, double *d, double *z);
268 
269 
270 // =======================================================================
271 // Multi grid components
272 // =======================================================================
273 
274 #ifdef __2D__
275 
276 void Prolongate(TFESpace2D *CoarseSpace, TFESpace2D *FineSpace,
277  double *CoarseFunctions, double *FineFunctions, double *aux);
278 
279 void Prolongate(TFESpace2D *CoarseSpace, TFESpace2D *FineSpace,
280  int N_Functions,
281  double *CoarseFunctions, double *FineFunctions, double *aux);
282 
284 void DefectRestriction(TFESpace2D *CoarseSpace, TFESpace2D *FineSpace,
285  double *CoarseFunctions, double *FineFunctions, double *aux);
286 
288 void DefectRestriction(TFESpace2D *CoarseSpace, TFESpace2D *FineSpace,
289  int N_Functions,
290  double *CoarseFunctions, double *FineFunctions, double *aux);
291 
293 void RestrictFunction(TFESpace2D *CoarseSpace, TFESpace2D *FineSpace,
294  double *CoarseFunction, double *FineFunction, double *aux);
295 
297 void RestrictFunction(TFESpace2D *CoarseSpace, TFESpace2D *FineSpace,
298  int N_Functions,
299  double *CoarseFunction, double *FineFunction, double *aux);
300 
302 void IntoL20Vector2D(double *v, int Length, int order);
303 
304 #ifdef _MPI
305 
306 void IntoL20Vector2D(double *v, int Length, int order, TParFECommunicator2D *ParCommunicator);
307 #endif
308 
310 void IntoL20FEFunction(double *v, int Length, TFESpace2D *FESpace,
311  int velocity_space, int pressure_space
312  #ifdef _MPI
313  , MPI_Comm comm
314  #endif
315  );
316 
317 void VMS_ProjectionUpdateMatrices(int N_U,int N_Active,int N_L,
318  TSquareMatrix2D **SQMATRICES,
319  TMatrix2D **MATRICES);
320 #endif // __2D__
321 
322 #ifdef __3D__
323 
325 void CoupledMatVect(TSquareMatrix *A, TMatrix *B1, TMatrix *B2, TMatrix *B3,
326  double *x, double *y);
327 
328 void CoupledDefect(TSquareMatrix *A, TMatrix *B1, TMatrix *B2, TMatrix *B3,
329  double *x, double *b, double *r);
330 
331 void MatVect_NSE1(TSquareMatrix **A, TMatrix **B, double *x, double *y);
332 
333 void Defect_NSE1(TSquareMatrix **A, TMatrix **B, double *x, double *b, double *r);
334 
335 void CoupledMatVect(TSquareMatrix *A, TMatrix *B1, TMatrix *B2, TMatrix *B3,
336  TMatrix *B1T, TMatrix *B2T, TMatrix *B3T,
337  double *x, double *y);
338 
339 void CoupledDefect(TSquareMatrix *A, TMatrix *B1, TMatrix *B2, TMatrix *B3,
340  TMatrix *B1T, TMatrix *B2T, TMatrix *B3T,
341  double *x, double *b, double *r);
342 
343 void MatVect_NSE2(TSquareMatrix **A, TMatrix **B, double *x, double *y);
344 
345 void Defect_NSE2(TSquareMatrix **A, TMatrix **B, double *x, double *b, double *r);
346 
347 void CoupledMatVect(TSquareMatrix *A11, TSquareMatrix *A12, TSquareMatrix *A13,
348  TSquareMatrix *A21, TSquareMatrix *A22, TSquareMatrix *A23,
349  TSquareMatrix *A31, TSquareMatrix *A32, TSquareMatrix *A33,
350  TMatrix *B1, TMatrix *B2, TMatrix *B3,
351  double *x, double *y);
352 
353 void CoupledDefect(TSquareMatrix *A11, TSquareMatrix *A12, TSquareMatrix *A13,
354  TSquareMatrix *A21, TSquareMatrix *A22, TSquareMatrix *A23,
355  TSquareMatrix *A31, TSquareMatrix *A32, TSquareMatrix *A33,
356  TMatrix *B1, TMatrix *B2, TMatrix *B3,
357  double *x, double *b, double *r);
358 
359 void MatVect_NSE3(TSquareMatrix **A, TMatrix **B, double *x, double *y);
360 
361 void Defect_NSE3(TSquareMatrix **A, TMatrix **B, double *x, double *b, double *r);
362 
363 void CoupledMatVect(TSquareMatrix *A11, TSquareMatrix *A12, TSquareMatrix *A13,
364  TSquareMatrix *A21, TSquareMatrix *A22, TSquareMatrix *A23,
365  TSquareMatrix *A31, TSquareMatrix *A32, TSquareMatrix *A33,
366  TMatrix *B1, TMatrix *B2, TMatrix *B3,
367  TMatrix *B1T, TMatrix *B2T, TMatrix *B3T,
368  double *x, double *y);
369 
370 void CoupledDefect(TSquareMatrix *A11, TSquareMatrix *A12, TSquareMatrix *A13,
371  TSquareMatrix *A21, TSquareMatrix *A22, TSquareMatrix *A23,
372  TSquareMatrix *A31, TSquareMatrix *A32, TSquareMatrix *A33,
373  TMatrix *B1, TMatrix *B2, TMatrix *B3,
374  TMatrix *B1T, TMatrix *B2T, TMatrix *B3T,
375  double *x, double *b, double *r);
376 
377 void MatVect_NSE4(TSquareMatrix **A, TMatrix **B, double *x, double *y);
378 
379 void Defect_NSE4(TSquareMatrix **A, TMatrix **B, double *x, double *b, double *r);
380 
381 void CoupledMatVect(TSquareMatrix *A11, TSquareMatrix *A12, TSquareMatrix *A13,
382  TSquareMatrix *A21, TSquareMatrix *A22, TSquareMatrix *A23,
383  TSquareMatrix *A31, TSquareMatrix *A32, TSquareMatrix *A33,
384  TSquareMatrix *C,
385  TMatrix *B1, TMatrix *B2, TMatrix *B3,
386  TMatrix *B1T, TMatrix *B2T, TMatrix *B3T,
387  double *x, double *y);
388 
389 void CoupledDefect(TSquareMatrix *A11, TSquareMatrix *A12, TSquareMatrix *A13,
390  TSquareMatrix *A21, TSquareMatrix *A22, TSquareMatrix *A23,
391  TSquareMatrix *A31, TSquareMatrix *A32, TSquareMatrix *A33,
392  TSquareMatrix *C,
393  TMatrix *B1, TMatrix *B2, TMatrix *B3,
394  TMatrix *B1T, TMatrix *B2T, TMatrix *B3T,
395  double *x, double *b, double *r);
396 
397 void MatVect_NSE14(TSquareMatrix **A, TMatrix **B, double *x, double *y);
398 
399 void Defect_NSE14(TSquareMatrix **A, TMatrix **B, double *x, double *b, double *r);
400 
402 void Prolongate(TFESpace3D *CoarseSpace, TFESpace3D *FineSpace,
403  double *CoarseFunctions, double *FineFunctions,
404  double *aux);
405 
407 void Prolongate(TFESpace3D *CoarseSpace, TFESpace3D *FineSpace,
408  int N_Functions,
409  double *CoarseFunctions, double *FineFunctions,
410  double *aux);
411 
413 void DefectRestriction(TFESpace3D *CoarseSpace, TFESpace3D *FineSpace,
414  double *CoarseFunctions, double *FineFunctions, double *aux);
415 
417 void DefectRestriction(TFESpace3D *CoarseSpace, TFESpace3D *FineSpace,
418  int N_Functions,
419  double *CoarseFunctions, double *FineFunctions, double *aux);
420 
422 void RestrictFunction(TFESpace3D *CoarseSpace, TFESpace3D *FineSpace,
423  double *CoarseFunction, double *FineFunction, double *aux);
424 
426 void RestrictFunction(TFESpace3D *CoarseSpace, TFESpace3D *FineSpace,
427  int N_Functions,
428  double *CoarseFunction, double *FineFunction, double *aux);
429 
431 void IntoL20Vector3D(double *v, int Length, int order);
432 
434 void IntoL20FEFunction3D(double *v, int Length, TFESpace3D *FESpace);
435 
436 void IntoL20FEFunction3D(double *v, int Length, TFESpace3D *FESpace,
437  int velocity_space, int pressure_space);
438 
439 void VMS_ProjectionUpdateMatrices(int N_U,int N_Active,int N_L,
440  TSquareMatrix3D **SQMATRICES, TMatrix3D **MATRICES);
441 
442 void LumpMassMatrixToDiag(TSquareMatrix3D *M);
443 #endif // __3D__
444 
445 
446 
447 #endif
448 
Definition: SquareMatrix2D.h:20
Definition: SquareMatrix3D.h:20
Definition: Matrix.h:21
Definition: FESpace2D.h:28
Definition: FESpace3D.h:22
Definition: SquareMatrix.h:20
Definition: Matrix3D.h:20
Definition: Matrix2D.h:20
Definition: ParFECommunicator2D.h:20