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 |