escript  Revision_
Preconditioner.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2018 by The University of Queensland
5 * http://www.uq.edu.au
6 *
7 * Primary Business: Queensland, Australia
8 * Licensed under the Apache License, version 2.0
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
12 * Development 2012-2013 by School of Earth Sciences
13 * Development from 2014 by Centre for Geoscience Computing (GeoComp)
14 *
15 *****************************************************************************/
16 
17 #ifndef __PASO_PRECONDITIONER_H__
18 #define __PASO_PRECONDITIONER_H__
19 
20 #include "Paso.h"
21 #include "SystemMatrix.h"
22 
23 namespace paso {
24 
25 struct MergedSolver;
27 typedef boost::shared_ptr<Preconditioner> Preconditioner_ptr;
28 typedef boost::shared_ptr<const Preconditioner> const_Preconditioner_ptr;
29 
31 struct Solver_ILU;
32 struct Solver_RILU;
33 
34 // general preconditioner interface
36 {
47 };
48 
51 void Preconditioner_solve(Preconditioner* prec, SystemMatrix_ptr A, double*, double*);
52 
53 
54 // GAUSS SEIDEL & Jacobi
56 {
57  bool Jacobi;
58  double* diag;
59  double* buffer;
61 };
62 
64 {
66  bool is_local;
67 };
68 
71 
73  SystemMatrix_ptr A, bool jacobi, bool is_local, bool verbose);
74 
76  SparseMatrix_ptr A, bool jacobi, bool verbose);
77 
79  Preconditioner_Smoother* gs, double* x, const double* b,
80  dim_t sweeps, bool x_is_initial);
81 
83  Preconditioner_LocalSmoother* gs, double* x, const double* b,
84  dim_t sweeps, bool x_is_initial);
85 
87  Preconditioner_Smoother* gs, double* x, const double* b,
88  double atol, dim_t* sweeps, bool x_is_initial);
89 
91  Preconditioner_LocalSmoother* gs, double* x);
92 
95  double* x);
96 
98  Preconditioner_LocalSmoother* gs, double* x);
99 
101  Preconditioner_LocalSmoother* gs, double* x);
102 
105 {
106  double* factors;
107 };
108 
111 {
116  double* inv_A_FF;
124  double* x_F;
125  double* b_F;
126  double* x_C;
127  double* b_C;
129 };
130 
131 void Solver_ILU_free(Solver_ILU * in);
132 Solver_ILU* Solver_getILU(SparseMatrix_ptr A, bool verbose);
133 void Solver_solveILU(SparseMatrix_ptr A, Solver_ILU* ilu, double* x, const double* b);
134 
135 void Solver_RILU_free(Solver_RILU* in);
137 void Solver_solveRILU(Solver_RILU* rilu, double* x, double* b);
138 
140  SparseMatrix_ptr A_CF, double* invA_FF, index_t* A_FF_pivot,
141  SparseMatrix_ptr A_FC);
142 
143 } // namespace paso
144 
145 #endif // __PASO_PRECONDITIONER_H__
146 
Solver_RILU * RILU_of_Schur
Definition: Preconditioner.h:128
Solver_RILU * Solver_getRILU(SparseMatrix_ptr A, bool verbose)
Definition: RILU.cpp:71
void Preconditioner_Smoother_free(Preconditioner_Smoother *in)
Definition: Smoother.cpp:34
void Preconditioner_Smoother_solve(SystemMatrix_ptr A, Preconditioner_Smoother *gs, double *x, const double *b, dim_t sweeps, bool x_is_initial)
Definition: Smoother.cpp:100
dim_t type
Definition: Preconditioner.h:37
double * inv_A_FF
Definition: Preconditioner.h:116
void Preconditioner_LocalSmoother_free(Preconditioner_LocalSmoother *in)
Definition: Smoother.cpp:42
index_t * rows_in_C
Definition: Preconditioner.h:121
double * x_C
Definition: Preconditioner.h:126
void Preconditioner_LocalSmoother_Sweep_colored(SparseMatrix_ptr A, Preconditioner_LocalSmoother *gs, double *x)
Definition: Smoother.cpp:338
Definition: Options.h:77
void Solver_ILU_free(Solver_ILU *in)
Definition: ILU.cpp:35
Preconditioner * Preconditioner_alloc(SystemMatrix_ptr A, Options *options)
Definition: Preconditioner.cpp:46
index_t * pivot
Definition: Preconditioner.h:60
Preconditioner_Smoother * jacobi
Jacobi preconditioner.
Definition: Preconditioner.h:40
double * b_F
Definition: Preconditioner.h:125
void Preconditioner_LocalSmoother_Sweep(SparseMatrix_ptr A, Preconditioner_LocalSmoother *gs, double *x)
Definition: Smoother.cpp:201
void Solver_updateIncompleteSchurComplement(SparseMatrix_ptr A_CC, SparseMatrix_ptr A_CF, double *invA_FF, index_t *A_FF_pivot, SparseMatrix_ptr A_FC)
Definition: SchurComplement.cpp:28
bool is_local
Definition: Preconditioner.h:66
Preconditioner_LocalSmoother * Preconditioner_LocalSmoother_alloc(SparseMatrix_ptr A, bool jacobi, bool verbose)
Definition: Smoother.cpp:64
SolverResult Preconditioner_Smoother_solve_byTolerance(SystemMatrix_ptr A, Preconditioner_Smoother *gs, double *x, const double *b, double atol, dim_t *sweeps, bool x_is_initial)
Definition: Smoother.cpp:127
void Preconditioner_LocalSmoother_solve(SparseMatrix_ptr A, Preconditioner_LocalSmoother *gs, double *x, const double *b, dim_t sweeps, bool x_is_initial)
Definition: Smoother.cpp:161
boost::shared_ptr< SparseMatrix > SparseMatrix_ptr
Definition: SparseMatrix.h:35
boost::shared_ptr< Preconditioner > Preconditioner_ptr
Definition: Preconditioner.h:26
index_t * mask_F
Definition: Preconditioner.h:122
void Solver_solveRILU(Solver_RILU *rilu, double *x, double *b)
Definition: RILU.cpp:289
Solver_RILU * rilu
RILU preconditioner.
Definition: Preconditioner.h:46
void Preconditioner_LocalSmoother_Sweep_sequential(SparseMatrix_ptr A, Preconditioner_LocalSmoother *gs, double *x)
inplace Gauss-Seidel sweep in sequential mode
Definition: Smoother.cpp:221
boost::shared_ptr< SystemMatrix > SystemMatrix_ptr
Definition: SystemMatrix.h:40
Solver_ILU * Solver_getILU(SparseMatrix_ptr A, bool verbose)
constructs the incomplete block factorization
Definition: ILU.cpp:44
Preconditioner_Smoother * gs
Gauss-Seidel preconditioner.
Definition: Preconditioner.h:42
Definition: BiCGStab.cpp:25
dim_t n_block
Definition: Preconditioner.h:113
Preconditioner_Smoother * Preconditioner_Smoother_alloc(SystemMatrix_ptr A, bool jacobi, bool is_local, bool verbose)
constructs the symmetric Gauss-Seidel preconditioner
Definition: Smoother.cpp:54
void Preconditioner_LocalSmoother_Sweep_tiled(SparseMatrix_ptr A, Preconditioner_LocalSmoother *gs, double *x)
int index_t
type for array/matrix indices used both globally and on each rank
Definition: DataTypes.h:59
SparseMatrix_ptr A_CF
Definition: Preconditioner.h:119
ILU preconditioner.
Definition: Preconditioner.h:104
double * buffer
Definition: Preconditioner.h:59
Preconditioner_LocalSmoother * localSmoother
Definition: Preconditioner.h:65
void Preconditioner_free(Preconditioner *in)
Definition: Preconditioner.cpp:35
Definition: Preconditioner.h:35
void Solver_solveILU(SparseMatrix_ptr A, Solver_ILU *ilu, double *x, const double *b)
Definition: ILU.cpp:316
void Solver_RILU_free(Solver_RILU *in)
Definition: RILU.cpp:35
RILU preconditioner.
Definition: Preconditioner.h:110
index_t * A_FF_pivot
Definition: Preconditioner.h:117
Definition: Preconditioner.h:63
dim_t n
Definition: Preconditioner.h:112
index_t * rows_in_F
Definition: Preconditioner.h:120
void Preconditioner_solve(Preconditioner *prec, SystemMatrix_ptr A, double *x, double *b)
Definition: Preconditioner.cpp:111
SparseMatrix_ptr A_FC
Definition: Preconditioner.h:118
boost::shared_ptr< const Preconditioner > const_Preconditioner_ptr
Definition: Preconditioner.h:28
dim_t sweeps
Definition: Preconditioner.h:38
double * b_C
Definition: Preconditioner.h:127
double * x_F
Definition: Preconditioner.h:124
dim_t n_C
Definition: Preconditioner.h:115
SolverResult
Definition: Paso.h:42
Definition: Preconditioner.h:55
index_t * mask_C
Definition: Preconditioner.h:123
dim_t n_F
Definition: Preconditioner.h:114
double * diag
Definition: Preconditioner.h:58
index_t dim_t
Definition: DataTypes.h:64
double * factors
Definition: Preconditioner.h:106
Solver_ILU * ilu
ILU preconditioner.
Definition: Preconditioner.h:44
bool Jacobi
Definition: Preconditioner.h:57