ParMooN
 All Classes Functions Variables Friends Pages
PardisoSolver.h
1 // =======================================================================
2 // @(#)ParDirectSolver.h
3 //
4 // Class: TPardisoSolver
5 // Purpose: Solve equation system by OpenMP based direct
6 // solver PARDISO
7 //
8 // Author:
9 //
10 // History:
11 //
12 // =======================================================================
13 
14 #ifndef __PARDIRECTSOLVER__
15 #define __PARDIRECTSOLVER__
16 
17 #include <Database.h>
18 #include <MooNMD_Io.h>
19 #include <DirectSolver.h>
20 
21 #ifdef __2D__
22  #include <SquareMatrix2D.h>
23  #include <Matrix2D.h>
24 #else
25  #include <SquareMatrix3D.h>
26  #include <Matrix3D.h>
27 #endif
28 
29 #ifdef _OPENMP
30  #include <omp.h>
31 #endif
32 
34 {
35  protected:
37  void **pt;
38 
40  int *iparam;
41 
43  double *dparam;
44 
46  int *KCol;
47  int KCol_size;
48 
50  int *RowPtr;
51  int RowPtr_size;
52 
54  double *Entries;
55  int Entries_size;
56 
58  int N_Eq;
59 
61  int N_Entries;
62 
63 
65  int num_prc;
66 
68  int mtype;
69 
71  bool pp;
72  int rhs_index;
73 
75  std::ofstream *dat;
76  double time_a;
77  double time_f;
78  double time_s;
79  int runs_a;
80  int runs_f;
81  int runs_s;
82 
83  protected:
84  void ShiftIndicies();
85  void PrintIparam();
86 // void PrintDparam();
87  void ErrorMsg(int);
88  void Sort();
89  void FreeMemory();
90  void AllocMemory();
91 
92  int SetMsgLvl()
93  { return TDatabase::ParamDB->SC_VERBOSE > 0 ? 1 : 0;};
94 
95 #ifdef __2D__
96  // nstype 1
97  void FillRowPtr(int N_U, int N_P, int N_Active,
98  int *RowPtrA, int *RowPtrB, int *ColPtrB);
99 
100  void GetTransposedArrays(TMatrix *B, int *&KRowB,
101  int *&ColPtrB, int *&MapB);
102 #endif
103 
104  public:
105  TPardisoSolver();
106 
107  ~TPardisoSolver();
108 
109 #ifdef __2D__
110 
111  void SetMatrix(TSquareMatrix2D *Matrix);
112 
114  void SetMatrix(TSquareMatrix2D *A, TMatrix *B1, TMatrix *B2);
115 
116  void SetMatrixPar(TSquareMatrix2D *A, TMatrix *B1, TMatrix *B2);
117 
119  void SetMatrix(TSquareMatrix2D *sqmatrixA,
120  TMatrix2D *matrixB1T, TMatrix2D *matrixB2T,
121  TMatrix2D *matrixB1, TMatrix2D *matrixB2);
122 
124  void SetMatrix(TSquareMatrix2D *sqmatrixA11, TSquareMatrix2D *sqmatrixA12,
125  TSquareMatrix2D *sqmatrixA21, TSquareMatrix2D *sqmatrixA22,
126  TMatrix2D *matrixB1T, TMatrix2D *matrixB2T,
127  TMatrix2D *matrixB1, TMatrix2D *matrixB2);
128 #endif
129 
130 #ifdef __3D__
131 
132  void SetMatrix(TSquareMatrix3D *sqmatrixA,
133  TMatrix3D *matrixB1T, TMatrix3D *matrixB2T, TMatrix3D *matrixB3T,
134  TMatrix3D *matrixB1, TMatrix3D *matrixB2, TMatrix3D *matrixB3);
135 
137  void SetMatrix(TSquareMatrix3D *sqmatrixA11, TSquareMatrix3D *sqmatrixA12,
138  TSquareMatrix3D *sqmatrixA13, TSquareMatrix3D *sqmatrixA21,
139  TSquareMatrix3D *sqmatrixA22, TSquareMatrix3D *sqmatrixA23,
140  TSquareMatrix3D *sqmatrixA31, TSquareMatrix3D *sqmatrixA32,
141  TSquareMatrix3D *sqmatrixA33,
142  TMatrix3D *matrixB1T, TMatrix3D *matrixB2T, TMatrix3D *matrixB3T,
143  TMatrix3D *matrixB1, TMatrix3D *matrixB2, TMatrix3D *matrixB3);
144 #endif
145 
146  void Analyse();
147  void Factorize();
148  void Solve(double *sol, double *rhs);
149  void FactorizeSolve(double *sol, double *rhs);
150 
153  void BenchReset();
154 
155 };
156 
157 #endif
int * KCol
Definition: PardisoSolver.h:46
Definition: SquareMatrix2D.h:20
Definition: SquareMatrix3D.h:20
Definition: Matrix.h:21
bool pp
Definition: PardisoSolver.h:71
int * iparam
Definition: PardisoSolver.h:40
void BenchReset()
Definition: PardisoSolver.C:1411
int num_prc
Definition: PardisoSolver.h:65
std::ofstream * dat
Definition: PardisoSolver.h:75
int * RowPtr
Definition: PardisoSolver.h:50
void SetMatrix(TSquareMatrix2D *Matrix)
Definition: PardisoSolver.C:160
int N_Entries
Definition: PardisoSolver.h:61
double * Entries
Definition: PardisoSolver.h:54
Definition: Matrix3D.h:20
Definition: Matrix2D.h:20
Definition: DirectSolver.h:23
int N_Eq
Definition: PardisoSolver.h:58
void ** pt
Definition: PardisoSolver.h:37
double * dparam
Definition: PardisoSolver.h:43
int mtype
Definition: PardisoSolver.h:68
Definition: PardisoSolver.h:33
static TParamDB * ParamDB
Definition: Database.h:1134