Solvers
Linear Solver¶
PolyFEM offers several linear solver options based on compilation options. For more information, see PolySolve a stand-alone linear solver wrapper library used by PolyFEM.
Options: AMGCL, Eigen::BiCGSTAB, Eigen::CholmodSupernodalLLT, Eigen::ConjugateGradient, Eigen::DGMRES, Eigen::GMRES, Eigen::LeastSquaresConjugateGradient, Eigen::MINRES, Eigen::PardisoLDLT, Eigen::PardisoLU, Eigen::SimplicialLDLT, Eigen::SparseLU, Eigen::UmfPackLU, Hypre, Pardiso
Nonlinear Solver¶
To solve nonlinear formulations, PolyFEM offers two options: Newton’s method (newton) and L-BFGS (lbfgs).
The settings for the solver are stored inside the field "nonlinear". General settings include:
"grad_norm"(default:1e-8): convergence tolerance on the norm (\(L^2\)) of the gradient"nl_iterations"(default:1000): maximum number of iterations to spend solving"use_grad_norm"(default:true): whether to use the gradient norm or update direction norm for convergence checks- When optimizing a function it is natural to check for a zero (up to tolerance) gradient as this signifies an extremum. However, we also implement the convergence criteria used by Li et al. [2020]. Where instead of the gradient’s norm the update direction’s \(L^\infty\)-norm is used. This provides two benefits: (1) it expresses the convergence criteria in the units of the variable (e.g., distance for elasticity) which (2) avoids applying small updates that lead to a marginal change in the variables. Note: this criterion has been well tested for nonlinear elasticity, but your mileage may vary for other formulations.
Newton’s Method¶
A (projected) Newton’s method with line search.
L-BFGS¶
A quasi-Newton method, L-BFGS requires more iterations than the full Newton’s method but avoids expensive linear solves.
Reference: https://en.wikipedia.org/wiki/Limited-memory_BFGS
Acknowledgments: The L-BFGS solver is implemented using the LBFGS++ library.
Line Search¶
Todo
Describe line-search and its purpose.
Backtracking¶
Todo
Describe this method and its parameters.
Armijo¶
Todo
Describe this method and its parameters.
Armijo (alt)¶
Todo
Describe this method and its parameters.
More-Thuente¶
Todo
Describe this method and its parameters.