ParMooN
 All Classes Functions Variables Friends Pages
DirectSolver.h
1 // =======================================================================
2 // @(#)DirectSolver.h
3 //
4 // Purpose: solve equation system by direct solver
5 //
6 // Author: Gunar Matthies (06.09.05)
7 //
8 // History: start of implementation 06.09.05 (Gunar Matthies)
9 //
10 // =======================================================================
11 
12 #ifndef __DIRECTSOLVER__
13 #define __DIRECTSOLVER__
14 
15 #include <SquareMatrix2D.h>
16 #include <Matrix2D.h>
17 
18 #ifdef __3D__
19 #include <SquareMatrix3D.h>
20 #include <Matrix3D.h>
21 #endif
22 
24 {
25  public:
26  TDirectSolver() {};
27 
28  virtual ~TDirectSolver() {};
29 
30 #ifdef __3D__
31 
32  virtual void SetMatrix(TSquareMatrix3D *sqmatrixA,
33  TMatrix3D *matrixB1T, TMatrix3D *matrixB2T, TMatrix3D *matrixB3T,
34  TMatrix3D *matrixB1, TMatrix3D *matrixB2, TMatrix3D *matrixB3) = 0;
35 
37  virtual void SetMatrix(TSquareMatrix3D *sqmatrixA11, TSquareMatrix3D *sqmatrixA12,
38  TSquareMatrix3D *sqmatrixA13, TSquareMatrix3D *sqmatrixA21,
39  TSquareMatrix3D *sqmatrixA22, TSquareMatrix3D *sqmatrixA23,
40  TSquareMatrix3D *sqmatrixA31, TSquareMatrix3D *sqmatrixA32,
41  TSquareMatrix3D *sqmatrixA33,
42  TMatrix3D *matrixB1T, TMatrix3D *matrixB2T, TMatrix3D *matrixB3T,
43  TMatrix3D *matrixB1, TMatrix3D *matrixB2, TMatrix3D *matrixB3) = 0;
44 #endif
45 
46  virtual void Analyse() = 0;
47  virtual void Factorize() = 0;
48  virtual void Solve(double *sol, double *rhs) = 0;
49  virtual void FactorizeSolve(double *sol, double *rhs) = 0;
50 
51 };
52 
55 void DirectSolver(TSquareMatrix *matrix, double *rhs, double *sol);
56 void DirectSolver(TSquareMatrix *matrix, double *rhs, double *sol, double *&Values,
57  int *&KCol, int *&Row, void *&Symbolic, void *&Numeric, int rb_flag);
58 
59 void DirectSolver(TSquareMatrix *matrix, double *rhs, double *sol, int N_Rhs, int N_Rhs_Disp);
60 void DirectSolver(TSquareMatrix *matrix, double *rhs, double *sol, int N_Rhs, int N_Rhs_Disp, double *&Values,
61  int *&KCol, int *&Row, void *&Symbolic, void *&Numeric, int rb_flag);
62 
63 void DirectSolverLong(TSquareMatrix *matrix, double *rhs, double *sol);
64 
65 void DirectSolver(TSquareMatrix2D *sqmatrixA,
66  TMatrix2D *matrixB1T, TMatrix2D *matrixB2T,
67  TMatrix2D *matrixB1, TMatrix2D *matrixB2,
68  double *rhs, double *sol);
69 
70 void DirectSolver(TSquareMatrix2D *sqmatrixA11, TSquareMatrix2D *sqmatrixA12,
71  TSquareMatrix2D *sqmatrixA21, TSquareMatrix2D *sqmatrixA22,
72  double *rhs1, double *rhs2, double *sol1, double *sol2, int rb_flag=3);
73 
74 /*void DirectSolver(TSquareMatrix2D *sqmatrixA11, TSquareMatrix2D *sqmatrixA12,
75  TSquareMatrix2D *sqmatrixA21, TSquareMatrix2D *sqmatrixA22,
76  TMatrix2D *matrixB1T, TMatrix2D *matrixB2T,
77  TMatrix2D *matrixB1, TMatrix2D *matrixB2,
78  double *rhs, double *sol, int rb_flag=3);*/
79 
80 void DirectSolver(TSquareMatrix2D *sqmatrixA11, TSquareMatrix2D *sqmatrixA12,
81  TSquareMatrix2D *sqmatrixA21, TSquareMatrix2D *sqmatrixA22,
82  TMatrix2D *matrixB1T, TMatrix2D *matrixB2T,
83  TMatrix2D *matrixB1, TMatrix2D *matrixB2,
84  double *rhs, double *sol, int rb_flag);
85 
86 //****************************************************************************/
87 // for NSTYPE == 1
88 //****************************************************************************/
89 void DirectSolver(TSquareMatrix2D *sqmatrixA,
90  TMatrix2D *matrixB1, TMatrix2D *matrixB2,
91  double *rhs, double *sol);
92 
93 void DirectSolver(TSquareMatrix2D *sqmatrixA,
94  TMatrix2D *matrixB1, TMatrix2D *matrixB2,
95  double *rhs, double *sol, int rb_flag);
96 
97 //****************************************************************************/
98 // for NSTYPE == 2
99 //****************************************************************************/
100 void DirectSolver(TSquareMatrix2D *sqmatrixA,
101  TMatrix2D *matrixB1T, TMatrix2D *matrixB2T,
102  TMatrix2D *matrixB1, TMatrix2D *matrixB2,
103  TMatrix2D *matrixC,
104  double *rhs, double *sol);
105 
106 //****************************************************************************/
107 // for NSTYPE == 4
108 //****************************************************************************/
109 void DirectSolver(TSquareMatrix2D *sqmatrixA11, TSquareMatrix2D *sqmatrixA12,
110  TSquareMatrix2D *sqmatrixA21, TSquareMatrix2D *sqmatrixA22,
111  TMatrix2D *matrixB1T, TMatrix2D *matrixB2T,
112  TMatrix2D *matrixB1, TMatrix2D *matrixB2,
113  double *rhs, double *sol);
114 
115 //****************************************************************************/
116 // for NSTYPE == 14
117 //****************************************************************************/
118 void DirectSolver(TSquareMatrix2D *sqmatrixA11, TSquareMatrix2D *sqmatrixA12,
119  TSquareMatrix2D *sqmatrixA21, TSquareMatrix2D *sqmatrixA22,
120  TSquareMatrix2D *sqmatrixC,
121  TMatrix2D *matrixB1T, TMatrix2D *matrixB2T,
122  TMatrix2D *matrixB1, TMatrix2D *matrixB2,
123  double *rhs, double *sol);
124 
125 //****************************************************************************/
126 // for Darcy
127 //****************************************************************************/
128 void DirectSolver(TSquareMatrix2D *sqmatrixA, TSquareMatrix2D *sqmatrixC,
129  TMatrix2D *matrixBT, TMatrix2D *matrixB,
130  double *rhs, double *sol);
131 
132 //****************************************************************************/
133 // for Conformation stress tensor
134 //****************************************************************************/
135 
136 void DirectSolver(TSquareMatrix2D *sqmatrixS11, TSquareMatrix2D *sqmatrixS12,
137  TSquareMatrix2D *sqmatrixS21, TSquareMatrix2D *sqmatrixS22, TSquareMatrix2D *sqmatrixS23,
138  TSquareMatrix2D *sqmatrixS32, TSquareMatrix2D *sqmatrixS33,
139  double *rhs, double *sol);
140 
141 //****************************************************************************/
142 // for Deformation tensor in DEVSS
143 //****************************************************************************/
144 void DirectSolver(TSquareMatrix2D *sqmatrixS11, TSquareMatrix2D *sqmatrixS22,
145  TSquareMatrix2D *sqmatrixS33, double *rhs, double *sol);
146 
147 
148 #ifdef __3D__
149 //****************************************************************************/
150 // for NSTYPE == 2
151 //****************************************************************************/
152 void DirectSolver(TSquareMatrix3D *sqmatrixA,
153  TMatrix3D *matrixB1T, TMatrix3D *matrixB2T,
154  TMatrix3D *matrixB3T,
155  TMatrix3D *matrixB1, TMatrix3D *matrixB2,
156  TMatrix3D *matrixB3,
157  double *rhs, double *sol);
158 //****************************************************************************/
159 // for NSTYPE == 4
160 //****************************************************************************/
161 void DirectSolver(TSquareMatrix3D *sqmatrixA11, TSquareMatrix3D *sqmatrixA12,
162  TSquareMatrix3D *sqmatrixA13,
163  TSquareMatrix3D *sqmatrixA21, TSquareMatrix3D *sqmatrixA22,
164  TSquareMatrix3D *sqmatrixA23,
165  TSquareMatrix3D *sqmatrixA31, TSquareMatrix3D *sqmatrixA32,
166  TSquareMatrix3D *sqmatrixA33,
167  TMatrix3D *matrixB1T, TMatrix3D *matrixB2T, TMatrix3D *matrixB3T,
168  TMatrix3D *matrixB1, TMatrix3D *matrixB2, TMatrix3D *matrixB3,
169  double *rhs, double *sol, int flag);
170 
171 
172 void DirectSolver(TSquareMatrix3D **sqmatrices, int n_row, int n_column,
173  double *sol, double *rhs);
174 
175 #endif
176 #endif
Definition: SquareMatrix2D.h:20
Definition: SquareMatrix3D.h:20
Definition: SquareMatrix.h:20
Definition: Matrix3D.h:20
Definition: Matrix2D.h:20
virtual void SetMatrix(TSquareMatrix3D *sqmatrixA, TMatrix3D *matrixB1T, TMatrix3D *matrixB2T, TMatrix3D *matrixB3T, TMatrix3D *matrixB1, TMatrix3D *matrixB2, TMatrix3D *matrixB3)=0
Definition: DirectSolver.h:23