Resolution of linear systems
The resolution of linear systems can be performed by a direct solver or an iterative solver with different preconditionings. The direct and iterative solvers are provided by Seldon. All direct solvers are regrouped in the class All_MatrixLU. By using this class, you can select the solver you prefer. Similarly, all the iterative solvers are regrouped in class All_IterativeSolver, which uses as preconditioning the class All_Preconditioner which regroups all the preconditionings used. The class All_Preconditioner can be overloaded if you wish to add an external preconditioner without modifying Montjoie. The following preconditioners are implemented in Montjoie
- IDENTITY : identity preconditioning
- SSOR : Successive over-relaxation preconditioning
- DIRECT : incomplete factorization
- JACOBI : Jacobi or Block-Jacobi preconditioning
- LOW_ORDER : preconditioning with low-order subdivided mesh
- MULTIGRID : geometric multigrid (p-multigrid)
- SUBDOMAIN : domain decomposition preconditioning
The class All_LinearSolver regroups iterative and direct solvers and can be used as follows :
// construction of EllipticProblem class EllipticProblem<TypeElement, TypeEquation> var; ReadInputFile(input_file, var); // ... // then you can declare a solver relying on the considered problem All_LinearSolver<TypeElement, TypeEquation> glob_solver(var); // you can read parameters of the data file : ReadInputFile(input_file, glob_solver); // you can select the solver, for example a direct solver glob_solver.SetDirectSolver(); // when you call PerformFactorizationStep, the matrix is computed, and // factorized if a direct solver has been selected, otherwise the preconditioning // is computed typename TypeEquation::Nature_Matrix nat_mat; glob_solver.PerformFactorizationStep(nat_mat, true); // then you can compute the solution for each right hand side needed Vector<Complexe> x(N), b(N); // resolution of A x = b glob_solver.Computation(b, x, nat_mat);
Methods of All_MatrixLU
SetPrintLevel | sets level of verbosity of the solver |
Factorize | factorization of a sparse matrix |
Solve | resolution of a linear system by using its LU factorisation |
TransSolve | resolution of a transpose linear system by using its LU factorisation |
GetSchurComplement | computation of the Schur complement of a matrix from its LU factorisation |
SelectOptimalDirectSolver | selects best direct solver |
SelectDirectSolver | selects direct solver from a line of the data file |
GetMaximumSize | returns maximum size for an efficient resolution with a direct solver |
SolveDistributed | resolution of a linear system by using its LU factorisation (parallel) |
TransSolveDistributed | resolution of a transpose linear system by using its LU factorisation (parallel) |
Public attributes and methods of All_IterativeSolver
type_preconditioner | type of preconditioning used |
precond | preconditioning used |
SetPrintLevel | sets level of verbosity of the solver |
SetPrintLevel | sets level of verbosity of the solver |
GetPrintLevel | returns level of verbosity of the solver |
SelectIterativeSolver | selects which iterative solver to use |
SetMaxNumberIteration | sets the maximum number of iterations allowed for the iterative resolution |
SetRestart | sets the restart parameter (for Gmres, Gcr, etc) |
SetStoppingCriterion | sets the stopping criterion used by iterative solver |
GetStoppingCriterion | returns the stopping criterion used by iterative solver |
GetM | returns the number of rows of the linear system |
Solve | solves the linear system iteratively |
SelectOptimalIterativeSolver | selects the best iterative solver for a given linear system |
Public attributes and methods of All_LinearSolver
var_deriv | considered problem |
mat_direct | finite element matrix used for the direct solver |
mat_iterative | finite element matrix used for the iterative solver |
mat_lu | direct solver |
iterative_solver | iterative solver |
static_condensation | if true, internal dofs are eliminated to reduce memory used by the direct solver |
scaling_matrix | if true, the linear system is scaled to reduce its condition number |
GetTypeSolver | returns the type of solver |
IsIterativeSolver | returns true if the used solver is iterative |
SetDirectSolver | direct solver will be used |
SetIterativeSolver | iterative solver will be used |
SelectOptimalLinearSolver | selects the best solver to use |
SetPrintLevel | sets the level of verbosity |
ComputeMatrixAndFactorize | computes finite element matrix and its factorisation |
ComputeMatrixAndPreconditioning | computes finite element matrix and its preconditioning |
PerformFactorizationStep | computes finite element matrix and its factorisation (or preconditioning for iterative resolution) |
ComputeSolution | computes the solution of the linear system associated with the finite element matrix |
Functions related to resolution of systems
Solve | computes the solution of a non-linear system of equations by using MinPack |