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;
// ...

// 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 :

// 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