{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "tags": [
     "remove-input",
     "remove-output",
     "active-ipynb"
    ]
   },
   "outputs": [],
   "source": [
    "try:\n",
    "    from openmdao.utils.notebook_utils import notebook_mode  # noqa: F401\n",
    "except ImportError:\n",
    "    !python -m pip install openmdao[notebooks]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Solvers\n",
    "\n",
    "## Nonlinear Solvers\n",
    "\n",
    "- [NonlinearBlockGS](nonlinear_block_gs.ipynb)\n",
    "- [NonlinearBlockJac](nonlinear_block_jac.ipynb)\n",
    "- [NonlinearRunOnce](nonlinear_runonce.ipynb)\n",
    "- [NewtonSolver](newton.ipynb)\n",
    "- [BroydenSolver](broyden.ipynb)\n",
    "\n",
    "(linear-solvers)=\n",
    "## Linear Solvers\n",
    "\n",
    "- [LinearBlockGS](linear_block_gs.ipynb)\n",
    "- [LinearBlockJac](linear_block_jac.ipynb)\n",
    "- [LinearRunOnce](linear_runonce.ipynb)\n",
    "- [DirectSolver](direct_solver.ipynb)\n",
    "- [PETScKrylov](petsc_krylov.ipynb)\n",
    "- [ScipyKrylov](scipy_iter_solver.ipynb)\n",
    "- [LinearUserDefined](linear_user_defined.ipynb)\n",
    "- [PETScDirectSolver](petsc_direct_solver.ipynb)\n",
    "\n",
    "(linesearch-section)=\n",
    "## Linesearch/Backtracking\n",
    "\n",
    "Backtracking line searches are subsolvers that can be specified in the `linesearch` attribute of a NewtonSolver, and are used to pull back to a reasonable point when a Newton step goes too far. This can occur when a step causes output variables to exceed their specified lower and upper bounds. It can also happen in more complicated problems where a full Newton step happens to take you well past the nonlinear solution, even to an area where the residual norm is worse than the initial point. Specifying a value for linesearch can help alleviate these problems and improve robustness of your Newton solve.\n",
    "There are two different backtracking line-search algorithms in OpenMDAO:\n",
    "\n",
    "- [ArmijoGoldsteinLS](armijo_goldstein.ipynb)\n",
    "- [BoundsEnforceLS](bounds_enforce.ipynb)\n",
    "\n",
    "(modify-options-section)=\n",
    "## Modifying Solver Options\n",
    "\n",
    "A method is provided to allow the user to modify solver options:\n",
    "\n",
    "- [Modifying Solver Options](modify_solver_options.ipynb)"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Tags",
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  },
  "orphan": true
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
