Skip to content

Add new nonlinear solver linesearch/BFGS and related linear solvers QR and SPQR

Reinhard Resch requested to merge linesearch-BFGS-SPQR into develop

This branch adds a new nonlinear solver based on the Broyden–Fletcher–Goldfarb–Shanno algorithm and QR updates. Two new linear solvers for QR decomposition are added which may be used with other nonlinear solvers as well. However, the BFGS nonlinear solver can be used only with QR based linear solvers.

If the assembly of the Jacobian matrix is the most expensive part of your simulation, the Jacobian is not very sparse and the solution is sufficiently continuous, than you can expect significant speed-ups with this nonlinear solver.

To use this nonlinear solver add the following lines to the initial value section of your input file:

linear solver: spqr;

nonlinear solver: bfgs, modified, 100, keep jacobian matrix, default solver options, heavy nonlinear;

You should also add the following line in order to see how effective it works.

output: iterations, cpu time;

In addition to that, a few improvements have been added to the automatic differentiation library including support for std::unordered_map and google::dense_hash_map.

Merge request reports