Predefined solvers

Although it will be more convenient to build a specific solver for some problems, a generic solver is available to test your models quickly. It can also be taken as an example to build your own solver. It is defined in src/getfem/getfem_model_solvers.h and src/getfem_model_solvers.cc and the call is:

getfem::standard_solve(md, iter);

where md is the model object and iter is an iteration object from Gmm++. See also the next section for an example of use.

Note that SuperLU is used as a default linear solver on “small” problems. You can also link MUMPS with GetFEM (see section Linear algebra procedures) and use the parallel version. For nonlinear problems, A Newton method (also called Newton-Raphson method) is used.

Note also that it is possible to disable some variables (with the method md.disable_variable(varname) of the model object) in order to solve the problem only with respect to a subset of variables (the disabled variables are the considered as data) for instance to replace the global Newton strategy with a fixed point one.

Let us recall that a standard initialization for the iter object is the folowwing (see Gmm++ documentation on Iterative solvers):

gmm::iteration iter(1E-7, 1, 200);

where 1E-7 is the relative tolerance for the stopping criterion, 1 is the noisy option and 200 is the maximum number of iterations. The stopping criterion of Newton’s method is build as follows. For a relative tolerance \varepsilon, the algorithm stops when:

\min\left( \|F(u)\|_1 / \max(L, 10^{-25}) ~, ~~ \|h\|_1 / \max(\|u\|_1, 10^{-25})\right) < \varepsilon

where F(u) is the residual vector, \|\cdot\|_1 is the classical 1-norm in \R^n, h is the search direction given by Newton’s algorithm, L is the norm of an estimated external loads (coming from source term and Dirichlet bricks) and u is the current state of the searched variable. The maximum taken with 10^{-25} is to avoid pathological cases when L and/or u are vanishing.