Go to the documentation of this file.
19 #ifndef __PASO_SOLVER_H__
20 #define __PASO_SOLVER_H__
29 #define TOLERANCE_FOR_SCALARS (double)(0.)
36 SolverResult Solver(SystemMatrix_ptr<double>,
double*,
double*, Options*, Performance*);
43 dim_t* iter,
double* tolerance, Performance* pp);
46 double* tolerance, Performance* pp);
49 double* tolerance, Performance* pp);
52 dim_t* iter,
double* tolerance, Performance* pp);
55 dim_t* num_iter,
double* tolerance,
60 double* x,
dim_t* iter,
double* tolerance,
75 struct Preconditioner_Smoother;
108 #endif // __PASO_SOLVER_H__
static const real_t EPSILON
Definition: ReactiveSolver.cpp:40
SolverResult Solver_MINRES(SystemMatrix_ptr< double > A, double *R, double *X, dim_t *iter, double *tolerance, Performance *pp)
Definition: MINRES.cpp:59
void Preconditioner_LocalSmoother_Sweep(SparseMatrix_ptr< double > A, Preconditioner_LocalSmoother *gs, double *x)
Definition: Smoother.cpp:201
#define PASO_DLL_API
Definition: paso/src/system_dep.h:29
dim_t num_level
Definition: Options.h:136
double real_t
type of all real-valued scalars in escript
Definition: DataTypes.h:52
double lsup(dim_t n, const double *x, escript::JMPI mpiinfo)
returns the global Lsup of x
Definition: PasoUtil.cpp:466
void Preconditioner_Smoother_free(Preconditioner_Smoother *in)
Definition: Smoother.cpp:34
bool Jacobi
Definition: Preconditioner.h:58
boost::shared_ptr< SparseMatrix< T > > SparseMatrix_ptr
Definition: SparseMatrix.h:37
@ Divergence
Definition: Paso.h:51
void Performance_startMonitor(Performance *pp, int monitor)
switches on a monitor
Definition: performance.cpp:163
void MUMPS_solve(SparseMatrix_ptr< T > A, T *out, T *in, dim_t numRefinements, bool verbose)
calls the solver
Definition: MUMPS.h:149
this class holds a (distributed) stiffness matrix
Definition: SystemMatrix.h:50
bool accept_failed_convergence
Definition: Options.h:128
#define MATRIX_FORMAT_CSC
Definition: Paso.h:62
static int getSolver(int solver, int package, bool symmetry, const escript::JMPI &mpi_info)
returns the solver to be used with given combination
Definition: Options.cpp:221
void UMFPACK_solve(SparseMatrix_ptr< double > A, double *out, double *in, dim_t numRefinements, bool verbose)
calls the solver
Definition: UMFPACK.cpp:55
double time
Definition: Options.h:138
void BlockOps_MViP_3(const double *mat, double *V)
inplace matrix vector product - order 3
Definition: BlockOps.h:200
#define PASO_GMRES
Definition: Options.h:48
double tolerance
Definition: Options.h:114
Preconditioner_LocalSmoother * Preconditioner_LocalSmoother_alloc(SparseMatrix_ptr< double > A, bool jacobi, bool verbose)
Definition: Smoother.cpp:64
void MUMPS_free(SparseMatrix< T > *A)
frees any MUMPS related data from the matrix
Definition: MUMPS.h:118
#define MPI_SUM
Definition: EsysMPI.h:54
void AXPY(dim_t N, double *x, double a, const double *y)
x = x+a*y
Definition: PasoUtil.h:100
#define PASO_PRES20
Definition: Options.h:49
@ InputError
Definition: Paso.h:47
double net_time
Definition: Options.h:142
#define PASO_MKL
Definition: Options.h:50
#define MATRIX_FORMAT_OFFSET1
Definition: Paso.h:64
bool verbose
Definition: Options.h:118
int method
Definition: Options.h:110
boost::shared_ptr< SystemMatrix< T > > SystemMatrix_ptr
Definition: SystemMatrix.h:42
double * diag
Definition: Preconditioner.h:59
Preconditioner_LocalSmoother * localSmoother
Definition: Preconditioner.h:66
SolverResult Solver_GMRES2(Function *F, const double *f0, const double *x0, double *dx, dim_t *iter, double *tolerance, Performance *pp)
Definition: GMRES2.cpp:24
#define MPI_MAX
Definition: EsysMPI.h:56
@ NegativeNormError
Definition: Paso.h:50
void Performance_close(Performance *pp, int verbose)
shuts down the monitoring process
Definition: performance.cpp:93
void BlockOps_solveAll(dim_t n_block, dim_t n, double *D, index_t *pivot, double *x)
Definition: BlockOps.h:219
void copy(dim_t N, double *out, const double *in)
out = in
Definition: PasoUtil.h:88
#define PASO_PCG
Definition: Options.h:41
#define PASO_TFQMR
Definition: Options.h:61
@ Breakdown
Definition: Paso.h:49
Definition: Functions.h:48
Preconditioner_Smoother * Preconditioner_Smoother_alloc(SystemMatrix_ptr< double > A, bool jacobi, bool is_local, bool verbose)
constructs the symmetric Gauss-Seidel preconditioner
Definition: Smoother.cpp:54
void Preconditioner_LocalSmoother_free(Preconditioner_LocalSmoother *in)
Definition: Smoother.cpp:42
index_t truncation
Definition: Options.h:125
index_t dim_t
Definition: DataTypes.h:66
bool reordering
Definition: Options.h:119
SolverResult Solver(SystemMatrix_ptr< double > A, double *x, double *b, Options *options, Performance *pp)
calls the iterative solver
Definition: Solver.cpp:46
bool symmetric
Definition: Options.h:112
void BlockOps_SMV_2(double *R, const double *mat, const double *V)
performs operation R=R-mat*V (V and R are not overlapping) - 2x2
Definition: BlockOps.h:46
dim_t refinements
Definition: Options.h:131
dim_t num_inner_iter
Definition: Options.h:137
SolverResult Solver_BiCGStab(SystemMatrix_ptr< double > A, double *r, double *x, dim_t *iter, double *tolerance, Performance *pp)
Definition: BiCGStab.cpp:77
void Preconditioner_LocalSmoother_Sweep_colored(SparseMatrix_ptr< double > A, Preconditioner_LocalSmoother *gs, double *x)
Definition: Smoother.cpp:338
Definition: Preconditioner.h:65
SolverResult
Definition: Paso.h:44
#define PASO_NONLINEAR_GMRES
Definition: Options.h:60
dim_t iter_max
Definition: Options.h:121
void MKL_free(SparseMatrix< double > *A)
Definition: MKL.cpp:35
@ MaxIterReached
Definition: Paso.h:46
void Solver_free(SystemMatrix< double > *A)
Definition: Solver.cpp:40
SolverResult Solver_PCG(SystemMatrix_ptr< double > A, double *r, double *x, dim_t *iter, double *tolerance, Performance *pp)
Definition: PCG.cpp:62
void solve_free(SystemMatrix< T > *A)
Definition: Solver.h:79
bool converged
Definition: Options.h:144
void Performance_open(Performance *pp, int verbose)
sets up the monitoring process
Definition: performance.cpp:36
#define PASO_PASO
Definition: Options.h:56
void BlockOps_solve_N(dim_t N, double *X, double *mat, index_t *pivot, int *failed)
solves system of linear equations A*X=B
Definition: BlockOps.h:167
#define PASO_UMFPACK
Definition: Options.h:51
SparseMatrix_ptr< T > mainBlock
main block
Definition: SystemMatrix.h:329
bool is_local
Definition: Preconditioner.h:67
#define PASO_BICGSTAB
Definition: Options.h:44
void * solver_p
pointer to data needed by a solver
Definition: SystemMatrix.h:353
double residual_norm
Definition: Options.h:143
#define MPI_DOUBLE
Definition: EsysMPI.h:49
void BlockOps_Cpy_N(dim_t N, double *R, const double *V)
Definition: BlockOps.h:40
PasoException exception class.
Definition: PasoException.h:34
void Preconditioner_LocalSmoother_solve(SparseMatrix_ptr< double > A, Preconditioner_LocalSmoother *gs, double *x, const double *b, dim_t sweeps, bool x_is_initial)
Definition: Smoother.cpp:161
void freePreconditioner()
#define PASO_MINRES
Definition: Options.h:62
double gettime()
returns the current ticks for timing
Definition: EsysMPI.h:192
void BlockOps_MV_N(dim_t N, double *R, const double *mat, const double *V)
Definition: BlockOps.h:90
int index_t
type for array/matrix indices used both globally and on each rank
Definition: DataTypes.h:61
void UMFPACK_free(SparseMatrix< double > *A)
frees any UMFPACK related data from the matrix
Definition: UMFPACK.cpp:35
void Performance_stopMonitor(Performance *pp, int monitor)
switches off a monitor
Definition: performance.cpp:182
SolverResult Preconditioner_Smoother_solve_byTolerance(SystemMatrix_ptr< double > A, Preconditioner_Smoother *gs, double *x, const double *b, double atol, dim_t *sweeps, bool x_is_initial)
Definition: Smoother.cpp:127
double * buffer
Definition: Preconditioner.h:60
void SparseMatrix_MatrixVector_CSR_OFFSET0(const double alpha, const_SparseMatrix_ptr< double > A, const double *in, const double beta, double *out)
Definition: SparseMatrix_MatrixVector.cpp:191
double set_up_time
Definition: Options.h:139
index_t * pivot
Definition: Preconditioner.h:61
SolverResult Solver_GMRES(SystemMatrix_ptr< double > A, double *r, double *x, dim_t *iter, double *tolerance, dim_t Length_of_recursion, dim_t restart, Performance *pp)
Definition: GMRES.cpp:68
#define PASO_MUMPS
Definition: Options.h:57
void Preconditioner_LocalSmoother_Sweep_sequential(SparseMatrix_ptr< double > A, Preconditioner_LocalSmoother *gs, double *x)
inplace Gauss-Seidel sweep in sequential mode
Definition: Smoother.cpp:221
void BlockOps_SMV_3(double *R, const double *mat, const double *V)
performs operation R=R-mat*V (V and R are not overlapping) - 3x3
Definition: BlockOps.h:59
void Preconditioner_Smoother_solve(SystemMatrix_ptr< double > A, Preconditioner_Smoother *gs, double *x, const double *b, dim_t sweeps, bool x_is_initial)
Definition: Smoother.cpp:100
real_t real_t_eps()
Returns the machine epsilon for the real_t type.
Definition: DataTypes.h:99
SolverResult Solver_NewtonGMRES(Function *F, double *x, Options *options, Performance *pp)
Definition: NewtonGMRES.cpp:43
void BlockOps_MViP_2(const double *mat, double *V)
inplace matrix vector product - order 2
Definition: BlockOps.h:187
void MKL_solve(SparseMatrix_ptr< double > A, double *out, double *in, index_t reordering, dim_t numRefinements, bool verbose)
Definition: MKL.cpp:66
Definition: BiCGStab.cpp:25
std::complex< real_t > cplx_t
complex data type
Definition: DataTypes.h:55
#define PASO_SMOOTHER
Definition: Options.h:75
index_t solver_package
package code controlling the solver pointer
Definition: SystemMatrix.h:350
@ NoError
Definition: Paso.h:45
Definition: Preconditioner.h:57
void solve(T *out, T *in, Options *options) const
dim_t num_iter
Definition: Options.h:135
index_t restart
Definition: Options.h:126
SolverResult Solver_TFQMR(SystemMatrix_ptr< double > A, double *B, double *X, dim_t *iter, double *tolerance, Performance *pp)
Definition: TFQMR.cpp:62
void BlockOps_SMV_N(dim_t N, double *R, const double *mat, const double *V)
performs operation R=R-mat*V (V and R are not overlapping) - NxN
Definition: BlockOps.h:81