92 |
}; |
}; |
93 |
typedef struct Paso_Solver_RILU Paso_Solver_RILU; |
typedef struct Paso_Solver_RILU Paso_Solver_RILU; |
94 |
|
|
95 |
|
/* AMG preconditioner */ |
96 |
|
struct Paso_Solver_AMG { |
97 |
|
dim_t n; |
98 |
|
dim_t n_block; |
99 |
|
dim_t n_F; |
100 |
|
dim_t n_C; |
101 |
|
double* inv_A_FF; |
102 |
|
index_t* A_FF_pivot; |
103 |
|
Paso_SparseMatrix * A_FC; |
104 |
|
Paso_SparseMatrix * A_CF; |
105 |
|
index_t* rows_in_F; |
106 |
|
index_t* rows_in_C; |
107 |
|
index_t* mask_F; |
108 |
|
index_t* mask_C; |
109 |
|
double* x_F; |
110 |
|
double* b_F; |
111 |
|
double* x_C; |
112 |
|
double* b_C; |
113 |
|
struct Paso_Solver_AMG * AMG_of_Schur; |
114 |
|
}; |
115 |
|
typedef struct Paso_Solver_AMG Paso_Solver_AMG; |
116 |
|
|
117 |
|
|
118 |
/* general preconditioner interface */ |
/* general preconditioner interface */ |
127 |
Paso_Solver_RILU* rilu; |
Paso_Solver_RILU* rilu; |
128 |
/* Gauss-Seidel preconditioner */ |
/* Gauss-Seidel preconditioner */ |
129 |
Paso_Solver_GS* gs; |
Paso_Solver_GS* gs; |
130 |
|
/* amg preconditioner */ |
131 |
|
Paso_Solver_AMG* amg; |
132 |
|
|
133 |
} Paso_Solver_Preconditioner; |
} Paso_Solver_Preconditioner; |
134 |
|
|
135 |
void Paso_Solver(Paso_SystemMatrix*,double*,double*,Paso_Options*,Paso_Performance* pp); |
void Paso_Solver(Paso_SystemMatrix*,double*,double*,Paso_Options*,Paso_Performance* pp); |
156 |
Paso_Solver_RILU* Paso_Solver_getRILU(Paso_SparseMatrix * A_p,bool_t verbose); |
Paso_Solver_RILU* Paso_Solver_getRILU(Paso_SparseMatrix * A_p,bool_t verbose); |
157 |
void Paso_Solver_solveRILU(Paso_Solver_RILU * rilu, double * x, double * b); |
void Paso_Solver_solveRILU(Paso_Solver_RILU * rilu, double * x, double * b); |
158 |
|
|
159 |
|
void Paso_Solver_AMG_free(Paso_Solver_AMG * in); |
160 |
|
Paso_Solver_AMG* Paso_Solver_getAMG(Paso_SparseMatrix * A_p,bool_t verbose); |
161 |
|
void Paso_Solver_solveAMG(Paso_Solver_AMG * amg, double * x, double * b); |
162 |
|
|
163 |
void Paso_Solver_updateIncompleteSchurComplement(Paso_SparseMatrix* A_CC, Paso_SparseMatrix *A_CF,double* invA_FF,index_t* A_FF_pivot, Paso_SparseMatrix *A_FC); |
void Paso_Solver_updateIncompleteSchurComplement(Paso_SparseMatrix* A_CC, Paso_SparseMatrix *A_CF,double* invA_FF,index_t* A_FF_pivot, Paso_SparseMatrix *A_FC); |
164 |
Paso_Solver_Jacobi* Paso_Solver_getJacobi(Paso_SparseMatrix * A_p); |
Paso_Solver_Jacobi* Paso_Solver_getJacobi(Paso_SparseMatrix * A_p); |
165 |
void Paso_Solver_solveJacobi(Paso_Solver_Jacobi * prec, double * x, double * b); |
void Paso_Solver_solveJacobi(Paso_Solver_Jacobi * prec, double * x, double * b); |